loops - 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
谢谢!
解决方案
推荐阅读
- android - 如何取消协程中的阻塞代码
- arrays - 在汇编中声明和索引 qwords 的整数数组
- acumatica - 如何抑制客户类更新
- python - 列重命名:在数字和字母之间切换
- javascript - 如何更改 webpack 构建中的所有 href 和 src 路径?
- scala - Scala spark,输入数据框,返回所有值等于 1 的列
- jenkins - Jenkins - 使用来自不同 groovy 文件中的列表变量的选项填充选择参数
- visual-studio-2019 - Visual Studio 2019 (v16.3.5) - 更新 EDMX 文件更改所有模型上的间距和缩进
- reactjs - 如何设置类似于 Material-UI 的轮廓文本字段的静态轮廓 div?
- python-3.x - 使用python解析XML中的同名标签