如何解决pyspark对数据帧中的多个列执行汇总和
我有一个示例df输入数据帧:
partner_id|month_id|value1 |value2|price1|price2|
1001 | 01 |10 |20 |1 |2 |
1002 | 01 |20 |30 |2 |3 |
1003 | 01 |30 |40 |3 |4 |
1004 | 02 |40 |50 |4 |5 |
1001 | 02 |50 |60 |5 |6 |
1001 | 02 |60 |70 |6 |7 |
1001 | 03 |70 |80 |7 |8 |
我想对partner_id列进行分组,并对所有值列求和。汇总代码如下所示:
df = df.groupBy(df.partner_id).agg(F.sum(df.value1).alias("value1"),F.sum(df.value2).alias("value2))
结果数据框:
partner_id|value1 |value2|
1002 |20 |30 |
1003 |30 |40 |
1004 |40 |50 |
1001 |190 |230 |
但是,我需要选择输入数据框对应的所有其他列以按列分组,达到最佳的方法是什么?
预期的输出,例如:
partner_id|month_id|value1 |value2|price1|price2|
1002 | 01 |20 |30 |2 |3 |
1003 | 01 |30 |40 |3 |4 |
1004 | 02 |40 |50 |4 |5 |
1001 | 02 |190 |230 |5 |6 |
解决方法
您对month_id
,price1
和price2
列的选择是什么?我已经选择了最小值。
df.groupBy('partner_id') \
.agg(min('month_id').alias('month_id'),\
sum('value1').alias('value1'),\
sum('value2').alias('value2'),\
min('price1').alias('price1'),\
min('price2').alias('price2')) \
.show()
+----------+--------+------+------+------+------+
|partner_id|month_id|value1|value2|price1|price2|
+----------+--------+------+------+------+------+
| 1002| 1| 20| 30| 2| 3|
| 1001| 1| 190| 230| 1| 2|
| 1003| 1| 30| 40| 3| 4|
| 1004| 2| 40| 50| 4| 5|
+----------+--------+------+------+------+------+
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。