Суммирование только отдельных значений в группе по - PullRequest
0 голосов
/ 11 мая 2019

У меня есть датафрейм, который выглядит так:

Region   State  Volume   Hour   Price
South    GA     23       1      35
South    GA     23       2      50
South    FL     35       3      60
South    FL     35       4      22

Один и тот же регион, штат всегда будет иметь сохраняемый объем. То, что я хотел бы сделать, это суммировать отчетливый объем для всего региона. Например, итоговый кадр данных должен выглядеть следующим образом:

Region   State  Volume   Hour   Price  TotalVolumeInRegion
South    GA     23       1      35     58
South    GA     23       2      50     58
South    FL     35       3      60     58
South    FL     35       4      22     58

Обратите внимание, как мы складываем только 23 + 35. Как нам это сделать?

1 Ответ

1 голос
/ 11 мая 2019

Поскольку отдельные оконные функции не поддерживаются, мы можем сделать это с помощью объединения.

val df = Seq(
  ("South", "GA", 23, 1, 35),
  ("South", "GA", 23, 2, 50),
  ("South", "FL", 35, 3, 60),
  ("South", "FL", 35, 4, 22)
).toDF("Region", "State", "Volume", "Hour", "Price")

val totals = df
  .select($"Region", $"State", $"Volume")
  .distinct()
  .groupBy($"Region")
  .agg(sum($"Volume") as "TotalVolumeInRegion")

df.join(totals, usingColumn = "Region").show()

Выход:

+------+-----+------+----+-----+-------------------+
|Region|State|Volume|Hour|Price|TotalVolumeInRegion|
+------+-----+------+----+-----+-------------------+
| South|   GA|    23|   1|   35|                 58|
| South|   GA|    23|   2|   50|                 58|
| South|   FL|    35|   3|   60|                 58|
| South|   FL|    35|   4|   22|                 58|
+------+-----+------+----+-----+-------------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...