numpy 找到给定日期范围内缺少的月份,然后将该缺少的日期添加到具有与上次日期相同的记录的数据中

7dl7o3gd  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(109)

我有一张帐单,其中我有唯一的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

1.首先,我想按付款日期分组(每个月的最后一天),并且作为一个聚集函数而不是总和或平均值,我想结转反映在最后一个月最后一天的相同余额。
1.如您所见,记录中缺少3月份,我想在此添加一个3月份的新记录,该记录的余额与2月22日给出的相同,即5,000,新记录的日期应为3月22日的最后一天。
1.由于日期范围为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缺少的“月”,而不是日期

kwvwclae

kwvwclae1#

您可以使用:


# 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

相关问题