サンプルの 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 |
残りの列からランダムな行を選択していますか?たとえば、partner_id の同じ値が複数のprice1 に関連付けられる可能性があるためです。
– イーサン
2020 年 9 月 3 日 10:39
------------------------
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|
+----------+--------+------+------+------+------+
------------------------
値によって異なります。値は、partner_id に従って変更されますか?はいの場合は @lamanus の答えが正しいですが、そうでない場合は、groupBy 部分 df.groupBy('partner_id' ,'month_id') に追加できます。
2022 年 4 月 6 日 5:19 に回答
ファヘド・フタバ
ファヘド・フタバ
1
2
銅バッジ 2 個