我希望分配基于每个月剩余天数的金额。例如,如果我在2019年6月20日收到$ 1000(月薪),那么我希望熊猫数据框为2019年6月20日的月分配(1000/30 * 10 = $ 333),剩余的$ 666将通过创建一个新行,新月为2019年7月1日,金额为$ 666
当前数据具有日期,金额和类别。我需要做的第一步是按类别A进行筛选,然后在类别A中找出最接近该月最后一个日期的日期。然后,一旦按上一个日期进行过滤,就需要分配金额。我可以分配当月的金额,但是我将如何为每个月创建一个额外的行并添加剩余的金额。请记住,理想情况下,我希望索引增加1,这样一旦我将其再次绑定到原始数据帧,顺序就不会混乱
df = pd.DataFrame({
'Date':['5/23/2019', '5/9/2019', '4/25/2019', '4/11/2019', '3/28/2019', '3/14/2019', '2/28/2019', '2/14/2019',
'1/31/2019', '1/17/2019', '1/3/2019', '12/20/2018', '12/14/2018', '12/6/2018', '11/22/2018',
'11/8/2018', '10/25/2018', '10/11/2018', '9/27/2018', '9/13/2018', '8/30/2018', '8/16/2018',
'8/2/2018', '7/19/2018', '7/5/2018', '6/21/2018', '6/7/2018', '5/24/2018', '5/10/2018',
'4/26/2018', '4/12/2018', '3/29/2018', '3/15/2018', '3/1/2018', '2/15/2018', '2/1/2018',
'1/18/2018', '1/4/2018', '12/21/2017', '12/15/2017', '12/7/2017', '11/23/2017', '11/9/2017',
'10/26/2017', '10/12/2017', '9/28/2017', '9/14/2017', '8/31/2017', '8/17/2017', '8/3/2017',
'7/20/2017', '7/6/2017'],
'Amount':np.random.choice([10000]),
'Category': np.random.choice( ['A','B'], 52)
})
dates = df[df.Category == 'A']
dates.Date = pd.to_datetime(dates.Date)
#Finding the max date
last_dates = pd.DataFrame(dates.groupby([dates.Date.dt.year,
dates.Date.dt.month]).max().values).iloc[:,0]
last_dates = list(last_dates.dt.strftime('%Y-%m-%d').astype('str'))
last_dates = '|'.join(last_dates)
dates['Last_Date'] = dates.Date.astype('str').str.contains(last_dates)
#Filtering for latest date
dates = dates[dates['Last_Date'] == True]
dates['Days_left'] = dates.Date.dt.daysinmonth - dates.Date.dt.day
dates['Amount_per_day'] = round(dates.Amount/30,2)
dates['Amount_for_month'] = dates.Amount_per_day * dates.Days_left
例如,对于以下两行,我希望进行拆分,如下面的输出所示
电流输出
Date Amount Category ... Days_left Amount_per_day
Amount_for_month
1 2019-05-09 10000 A ... 22 333.33 7333.26
2 2019-04-25 10000 A ... 5 333.33 1666.65
预期输出(样本)
Date Amount Category ... Days_left Amount_per_day Amount_for_month
1 2019-06-01 10000 A ... 22 333.33 2666.67
2 2019-05-09 10000 A ... 22 333.33 7333.26
3 2019-05-01 10000 A ... 5 333.33 8333.33
4 2019-04-25 10000 A ... 5 333.33 1666.65