创建一个新行(索引)并与表合并

时间:2019-06-05 21:32:26

标签: python pandas dataframe

我希望分配基于每个月剩余天数的金额。例如,如果我在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

0 个答案:

没有答案
相关问题