簡體   English   中英

pyspark對數據幀中的多列執行聚合總和

[英]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_idprice1price2列? 我選擇了最小值。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM