我需要转换以下数据框:
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
我的最终输出将是创建一个新的列,以使(风险组值/值)之间的比率变化,但这很容易做到。
谢谢!
您只能加总[[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|
#+-----+----------+-----+-----+----------------+