我有一個這樣的資料框...
| 顧客 | 日期 | 平衡 |
|---|---|---|
| 亞當 | 2022 年 1 月 1 日 | 10 |
| 亞當 | 2022 年 1 月 1 日 | 20 |
| 亞當 | 2022 年 3 月 1 日 | 30 |
| 莫莉 | 2022 年 1 月 1 日 | 40 |
| 莫莉 | 2022 年 1 月 1 日 | 50 |
| 莫莉 | 2022 年 3 月 1 日 | 60 |
我想找到每個客戶的每日日終余額。我用重采樣方法嘗試了 groupby,但什么也做不了。對于兩個客戶,1 月 2 日都丟失了,所以我的函式應該為 1 月 2 日創建一行,并用前一天的期末余額填充它。我的輸出應該是這樣的-
| 顧客 | 日期 | 平衡 |
|---|---|---|
| 亞當 | 2022 年 1 月 1 日 | 20 |
| 亞當 | 2022 年 2 月 1 日 | 20 |
| 亞當 | 2022 年 3 月 1 日 | 30 |
| 莫莉 | 2022 年 1 月 1 日 | 50 |
| 莫莉 | 2022 年 2 月 1 日 | 50 |
| 莫莉 | 2022 年 3 月 1 日 | 60 |
uj5u.com熱心網友回復:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/439412.html
標籤:Python 熊猫 数据框 熊猫-groupby 熊猫重采样
