Pyspark-如何创建从单元格复制特定数字的列
我需要转换以下数据帧:Pyspark-如何创建从单元格复制特定数字的列,pyspark,conditional-statements,transpose,case-when,Pyspark,Conditional Statements,Transpose,Case When,我需要转换以下数据帧: 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 20
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
我的最终输出将是创建一个新列,用于计算(风险组价值/价值)之间的比率,但这很容易做到
谢谢 当风险组为
是时,您只能在按组划分的窗口上求和,然后过滤删除是行以获得所需的输出
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|
#+-----+----------+-----+-----+----------------+