Pyspark-如何创建从单元格复制特定数字的列

问题描述 投票:1回答:1

我需要转换以下数据框:

Group - Risk Group - State - Value
A           yes        1      1000
A           no         2      100
A           no         3      100
A           no         4      100
A           no         5      100
B           yes        1      2000
B           no         2      200
B           no         3      100
B           no         4      100
B           no         5      200
C           yes        1      3000
C           no         2      100
C           no         3      100
C           no         4      200
C           no         5      200

在此,我将风险组转移到列中:

Group - Risk Group - State - Value - Risk Group Value
A           no         2      100         1000
A           no         3      100         1000
A           no         4      100         1000
A           no         5      100         1000 
B           no         2      200         2000
B           no         3      100         2000
B           no         4      100         2000
B           no         5      200         2000
C           no         2      100         3000
C           no         3      100         3000
C           no         4      200         3000
C           no         5      200         3000

我的最终输出将是创建一个新的列,以使(风险组值/值)之间的比率变化,但这很容易做到。

谢谢!

pyspark conditional-statements transpose case-when
1个回答
0
投票

您只能加总[[when风险组是yes,在window partitioned by Group上,然后在filter上删除yes] >行以获得所需的输出。from pyspark.sql import functions as F from pyspark.sql.window import Window w=Window().partitionBy("Group") df.withColumn("Risk Group Value", F.sum(F.when(F.col("Risk Group")=='yes',F.col("Value"))).over(w))\ .filter(F.col("Risk Group")!='yes')\ .orderBy("Group").show() #+-----+----------+-----+-----+----------------+ #|Group|Risk Group|State|Value|Risk Group Value| #+-----+----------+-----+-----+----------------+ #| A| no| 2| 100| 1000| #| A| no| 3| 100| 1000| #| A| no| 4| 100| 1000| #| A| no| 5| 100| 1000| #| B| no| 2| 200| 2000| #| B| no| 3| 100| 2000| #| B| no| 4| 100| 2000| #| B| no| 5| 200| 2000| #| C| no| 2| 100| 3000| #| C| no| 5| 200| 3000| #| C| no| 3| 100| 3000| #| C| no| 4| 200| 3000| #+-----+----------+-----+-----+----------------+

© www.soinside.com 2019 - 2024. All rights reserved.