使用 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
我有一个这样的数据框...
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