我有一份賬戶報表,其中有唯一 ID、付款日期、付款日期和余額。
以下資料的日期范圍 = 發放日期至 2022 年 5 月
日期示例:
Unique Disbursed date payment date balance amount
123 2022-Jan-13 2022-Jan-27 10,000
123 2022-Jan-13 2022-Feb-28 5,000
123 2022-Jan-13 2022-Apr-29 2,000
首先,我想按付款日期(每個月的最后一天)分組,并且作為聚合函式而不是 Sum 或平均值,我想結轉反映在上個月最后一天的相同余額。
如您所見,記錄中缺少 3 月,在這里我想添加 3 月的新記錄,其余額與 2 月 22 日相同,即 5,000,新記錄的日期應為 3 月 22 日的最后一天。
由于給出的日期范圍為 2022 年至 5 月,因此我想在 5 月 22 日添加另一條新記錄,其余額與上個月(4 月 22 日)相同,即 2000 年,新記錄的日期應為 5 月 22 日的最后一天
注意:我有多個唯一 ID,例如 123、456、789 等。
我試過下面的代碼來找出丟失的月份
對于 df['date'] 中的 i:pd.date_range(i,'2020-11-28').difference(df.index) print(i)
但是,它給了幾天明智的缺失日期。我想找出每個唯一 ID 缺少的“月份”而不是日期
uj5u.com熱心網友回復:
您可以使用:
# generate needed month ends
idx = pd.date_range('2022-01', '2022-06', freq='M')
out = (df
# compute the month end for existing data
.assign(month_end=pd.to_datetime(df['payment date'])
.sub(pd.Timedelta('1d'))
.add(pd.offsets.MonthEnd()))
.set_index(['Unique', 'month_end'])
# reindex with missing ID/month ends
.reindex(pd.MultiIndex.from_product([df['Unique'].unique(),
idx
], names=['Unique', 'idx']))
.reset_index()
# fill missing month end with correct format
.assign(**{'payment date': lambda d:
d['payment date'].fillna(d['idx'].dt.strftime('%Y-%b-%d'))})
# ffill the data per ID
.groupby('Unique').ffill()
)
輸出:
Unique idx Disbursed date payment date balance amount
0 123 2022-01-31 2022-Jan-13 2022-Jan-27 10,000
1 123 2022-02-28 2022-Jan-13 2022-Feb-28 5,000
2 123 2022-03-31 2022-Jan-13 2022-Mar-31 5,000
3 123 2022-04-30 2022-Jan-13 2022-Apr-29 2,000
4 123 2022-05-31 2022-Jan-13 2022-May-31 2,000
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/529008.html
上一篇:按時間順序排列5個輸入的日期
