我需要将pandas列(sample_sales)中的每日值相加,如果它们属于日期范围,由2列(payment_start和payment_end)表示,在同一行中与每日日期列(日期)匹配。我想将下个月的付款输出到monthly_payment列,monthly_payment是所需的输出。我只输入了每月的开始值来节省空间,但这里的范围是每天。
date payment_start payment_end sample_sales monthly_payment next_month_duration
2017-11-05 2017-10-01 2017-11-04 1 0 28
2017-11-06 2017-10-01 2017-11-04 2 0 28
... ... ... ... ...
2017-12-03 2017-11-05 2017-12-02 2 3 28
2017-12-04 2017-11-05 2017-12-02 2 3 28
... ... ... ... ...
2017-12-31 2017-12-03 2017-12-30 3 4 35
2018-01-01 2017-12-03 2017-12-30 3 4 35
... ... ... ... ...
2017-02-04 2017-12-31 2018-02-03 4 6 28
2017-02-05 2017-12-31 2018-02-03 4 6 28
几个月的持续时间遵循以下重复模式35,28,28天,因此将sample_sales移动一个月并不容易。
我目前正在使用此功能,我添加了next_month_duration:
df['monthly_payment'] = df.apply(lambda x: df.loc[(df['payment_start'] + df['next_month_duration'] <= x.name) & (x.name <= df['payment_end'] + df['next_month_duration']), ['sample_sales']].sum(), axis=1)
我面临的问题是,通过next_month_duration推送sample_sales的总和,由于28和35天的月持续时间而留下空白值或双倍数。
最终,我想根据日期范围对上个月的monthly_payment值进行求和,并将月总值分配给month_payment列中下个月的每个日期。