Python - pysparkはデータフレーム内の複数の列の合計を実行します

okwaves2024-01-25  6

サンプルの 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 個

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。