Python 如果2020年的日期的预订值小于25,则用上一年的7天平均值替换
我正在处理熊猫数据帧,如果少于25列的预订值平均为7天,我必须替换列预订值示例Python 如果2020年的日期的预订值小于25,则用上一年的7天平均值替换,python,pandas,dataframe,data-cleaning,data-conversion,Python,Pandas,Dataframe,Data Cleaning,Data Conversion,我正在处理熊猫数据帧,如果少于25列的预订值平均为7天,我必须替换列预订值示例x=22-03-2020的预订值为3,我必须替换它 x = average(before 3 days + last year same date + after 3 days/7)) 更换后 我有很多值要替换,我可以手动替换,但我需要一些快捷方式。你可以使用滚动和中心=真,但需要所有天数的值,所以添加,然后将一年添加到日期时间索引中,因为闰年是2020年,所以在2月底的总重复数中添加平均值,按掩码最后设置的值:
x=22-03-2020
的预订值为3,我必须替换它
x = average(before 3 days + last year same date + after 3 days/7))
更换后
我有很多值要替换,我可以手动替换,但我需要一些快捷方式。你可以使用
滚动和中心=真
,但需要所有天数的值,所以添加,然后将一年添加到日期时间索引中,因为闰年是2020年,所以在2月底的总重复数中添加平均值,按掩码最后设置的值:
df = pd.DataFrame({'date':pd.date_range('2019-03-19', periods=8),
'Booking':[92,109,144,109,122,76,78, 3]})
df.loc[7, 'date'] = pd.to_datetime('2020-03-22')
df = df.set_index('date')
s = df['Booking'].asfreq('d').rolling(7, center=True).mean()
s.index = s.index + pd.offsets.DateOffset(years=1)
s = s.mean(level=0)
print (s)
date
2020-03-19 NaN
2020-03-20 NaN
2020-03-21 NaN
2020-03-22 104.285714
2020-03-23 NaN
2021-03-18 NaN
2021-03-19 NaN
2021-03-20 NaN
2021-03-21 NaN
2021-03-22 NaN
Name: Booking, Length: 369, dtype: float64
请显示您已尝试的内容,然后返回代码片段
mask = df['Booking'].lt(25)
df.loc[mask, 'Booking'] = s
print (df)
Booking
date
2019-03-19 92.000000
2019-03-20 109.000000
2019-03-21 144.000000
2019-03-22 109.000000
2019-03-23 122.000000
2019-03-24 76.000000
2019-03-25 78.000000
2020-03-22 104.285714