[英]pyspark perform aggregate sum on multple columns in dataframe
我有一个示例 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|
+----------+--------+------+------+------+------+
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.