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|
#+-----+----------+-----+-----+----------------+