Условная групповая сумма - PullRequest
0 голосов
/ 30 мая 2019

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

Итак:

dat.groupby('Hours')['Amount'].sum()

, выполнив групповые часы и суммируя сумму, я получаю общую сумму транзакций, которые были совершены за каждый час.

Hours
0     257101.87
1     146105.69
2     108819.17
....
45    532181.83
46    448887.69
47    336343.60
Name: Amount, dtype: float64

Проблема в том, что моя база данных содержит 1000 строк, и я не могу просто создать новый столбец со значениями из groupby, мне нужно условие, предусматривающее, что если значение в столбце часа равно 0, то вернуть сумму всех суммы, где час равен 0.

Итак, желаемый результат будет примерно таким

Hours      Amount      Total
 0           20         100
 0           20         100
 0           60         100
 1           10          20
 1           10          20
 2           50          50

В этом сценарии я хотел бы создать итоговый столбец и вернуть сумму всех сумм, произошедших за данный час

Ответы [ 2 ]

2 голосов
/ 30 мая 2019

Групповое + преобразование должно это сделать

df["Total"] = df.groupby("Hours")["Amount"].transform(sum) 

Почему это работает ...

A преобразование в пандах похоже на разделение-применение-комбинирование-слияние за один раз. Вы сохраняете ту же длину оси после группового сокращения

0 голосов
/ 30 мая 2019

Я бы использовал вывод dat.groupby('Hours')['Amount'].sum() и merge с исходным значением в столбце Hours:

totals = dat.groupby('Hours')['Amount'].sum()

dat_with_totals = dat.merge(totals, on='Hours')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...