我有一个数据框,如下所示。我必须将具有claim_typ的行的行列作为“ PD”,并与当前行的行列进行区别,然后将其添加为新列。
源数据框:
Id svc_dt clm_typ rank
48115882 20180209 RV 1
48115882 20180209 RJ 2
48115882 20180216 RJ 3
48115882 20180302 RJ 4
48115882 20180402 PD 5
48115882 20180502 RJ 6
预期的结果数据框:
Id svc_dt clm_typ rank diff_PD_Rank
48115882 20180209 RV 1 4 (Current rank - rank of column with 'PD')
48115882 20180209 RJ 2 3
48115882 20180216 RJ 3 2
48115882 20180302 RJ 4 1
48115882 20180402 PD 5 null
48115882 20180502 RJ 6 null
答案 0 :(得分:1)
PySpark解决方案。
假设每个id的每个clm_type'PD'有一行,则可以将条件聚合与max(when...))
一起使用以获取必要的差异。
# necessary imports
w1 = Window.partitionBy(df.id).orderBy(df.svc_dt)
df = df.withColumn('rnum',row_number().over(w1))
w2 = Window.partitionBy(df.id)
res = df.withColumn('diff_pd_rank',max(when(df.clm_typ == 'PD',df.rnum)).over(w2) - rnum)
res.show()