首页 > 解决方案 > 如何在分组数据中找到上面每一行的总和?

问题描述

我有一个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但仅针对该行的相同AccountIDPurchaseDate前一天的总和?

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 |

标签: pythonpandasnumpy

解决方案


shift()使用and尝试以下操作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

推荐阅读