首页 > 解决方案 > Pyspark数据框循环聚合不同条件的列

问题描述

我有一个如下表,有 4 列,起点、终点、距离、是否存在条件。我想获得条件存在计数的汇总结果。我知道我可以多次编写 sum(case when) 语句以获得我想要的结果。

df2 = df1.groupBy(col('Start')).agg(
sum(when((col('Distance')<=1) & (col('Condition').isNotNull()),1).otherwise(0)).alias('Cond_cnt_1')),
sum(when((col('Distance')<=2) & (col('Condition').isNotNull()),1).otherwise(0)).alias('Cond_cnt_2')),
sum(when((col('Distance')<=3) & (col('Condition').isNotNull()),1).otherwise(0)).alias('Cond_cnt_3')),
sum(when((col('Distance')<=4) & (col('Condition').isNotNull()),1).otherwise(0)).alias('Cond_cnt_4')))

但是有没有更好的方法来循环并获得我想要的结果?

表格1

Start,End,Distance,Condition
111,114,3,B1
111,115,4,B2
111,112,1,
111,113,2,
111,116,5,
111,118,7,B3
111,119,8,
112,111,1,
112,113,1,
112,114,2,B1
112,115,3,B2
112,116,4,
112,117,5,

表2

Start,Cond_cnt_1,Cond_cnt_2,Cond_cnt_3,Cond_cnt_4
111,0,0,1,2
112,0,1,2,2

谢谢!

标签: loopsdistanceaggregation

解决方案


推荐阅读