使用 pandas 查找每日余额?

Finding daily balance using pandas?

我有一个这样的数据框...

Customer Date Balance
Adam 01/01/2022 10
Adam 01/01/2022 20
Adam 03/01/2022 30
Molly 01/01/2022 40
Molly 01/01/2022 50
Molly 03/01/2022 60

我想查找每个客户的每日日终余额。我尝试使用 groupby 和 resample 方法,但什么也做不了。对于这两个客户,1 月 2 日都丢失了,所以我的函数应该为 1 月 2 日创建一行,并用前一天的结束余额填充它。我的输出应该是这样的-

Customer Date Balance
Adam 01/01/2022 20
Adam 02/01/2022 20
Adam 03/01/2022 30
Molly 01/01/2022 50
Molly 02/01/2022 50
Molly 03/01/2022 60

IIUC,你可以这样做:

df2 = (
 df.assign(Date=pd.to_datetime(df['Date'], dayfirst=True))
   .groupby(['Customer', 'Date'], sort=False).last()
)

dt = df2.index.get_level_values('Date')
idx = pd.MultiIndex.from_product([df2.index.get_level_values('Customer').unique(),
                                  pd.date_range(dt.min(), dt.max(), freq='D')
                                 ], names=['Customer', 'Date'])

df2 = df2.reindex(idx).groupby(level='Customer', sort=False).ffill().reset_index()

输出:

  Customer       Date  Balance
0     Adam 2022-01-01     20.0
1     Adam 2022-01-02     20.0
2     Adam 2022-01-03     30.0
3    Molly 2022-01-01     50.0
4    Molly 2022-01-02     50.0
5    Molly 2022-01-03     60.0
6     John 2022-01-01      NaN
7     John 2022-01-02     15.0
8     John 2022-01-03     15.0