Как найти сумму каждой строки выше в сгруппированных данных? - PullRequest
0 голосов
/ 14 января 2019

у меня есть df

 AccountID       PurchaseDate                 Price
    | 113        2018-09-01 22:56:30              13|
    | 114        2018-09-03 22:57:30              23|
    | 113        2018-09-02 22:56:30              19|
    | 114        2018-09-01 22:56:30              20|
    | 114        2018-09-03 22:56:30              25|

У меня есть AccountID уже в groupby() Как создать новый столбец TotalPurchase, содержащий сумму Price, но только для тех же AccountID и PurchaseDate до дня для этой строки?

AccountID       PurchaseDate                 Price          TotalPurchase
| 113        2018-09-01 22:56:30              13               0  |
| 113        2018-09-02 22:56:30              19               13 |
| 114        2018-09-01 22:56:30              20               0  |
| 114        2018-09-03 22:56:30              25               20 |
| 114        2018-09-03 22:57:30              23               45 |

1 Ответ

0 голосов
/ 14 января 2019

Попробуйте следующее, используя shift() и cumsum():

df = df.sort_values(by=['AccountID', 'PurchaseDate'])
df['TotalPurchase'] = df.groupby('AccountID')['Price'].transform(lambda x: x.shift().cumsum()).fillna(0)

ВЫВОД:

  AccountID PurchaseDate        Price   TotalPurchase
0   113     2018-09-01 22:56:30 13     0.0
2   113     2018-09-02 22:56:30 19     13.0
3   114     2018-09-01 22:56:30 20     0.0
4   114     2018-09-03 22:56:30 25     20.0
1   114     2018-09-03 22:57:30 23     45.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...