Я пытаюсь сгруппировать по столбцу идентификатора в pyspark
кадре данных и суммировать столбец в зависимости от значения другого столбца.
Для иллюстрации рассмотрим следующий фиктивный кадр данных:
+-----+-------+---------+
| ID| type| amount|
+-----+-------+---------+
| 1| a| 55|
| 2| b| 1455|
| 2| a| 20|
| 2| b| 100|
| 3| null| 230|
+-----+-------+---------+
Мой желаемый результат:
+-----+--------+----------+----------+
| ID| sales| sales_a| sales_b|
+-----+--------+----------+----------+
| 1| 55| 55| 0|
| 2| 1575| 20| 1555|
| 3| 230| 0| 0|
+-----+--------+----------+----------+
Таким образом, sales
будет суммой amount
, а sales_a
и sales_b
- сумма amount
, когда type
равно a
или b
соответственно.
Для sales
я знаю, что это можно сделать так:
from pyspark.sql import functions as F
df = df.groupBy("ID").agg(F.sum("amount").alias("sales"))
Для других, я думаю, F.when
было бы полезно, но я не уверен, как это сделать.