我不明白每日偏移量的滚动平均值是如何工作的。
在下面的示例中,我从Values
列计算了4天的滚动平均值。
因为我使用了4D
偏移量,所以我假设它将给出每天最后四天的所有值的平均值。
相反,在最后一行中,它返回最后五个项的总和,但除以非NaN值的数量,即{{ 1}}。
为清楚起见,我假设这样的事情:(44 + 34 + 0 + 0 + 37) / 3) = 38.333333
(40 + 17 + 44 + 34 + 0 + 0 + 37) / 5) = 34.4
我在上表中输入了以下代码:
Date Values Rolling Mean
0 2017-04-10 20:31:00 9.0 9.000000
1 2017-04-11 12:22:00 19.0 14.000000
2 2017-04-11 18:23:00 14.0 14.000000
3 2017-04-12 14:11:00 11.0 13.250000
4 2017-04-13 00:51:00 40.0 18.600000
5 2017-04-13 12:20:00 17.0 18.333333
6 2017-04-13 18:06:00 44.0 22.000000
7 2017-04-14 13:29:00 34.0 23.500000
8 2017-04-15 00:00:00 NaN 25.571429
9 2017-04-16 00:00:00 NaN 29.200000
10 2017-04-17 17:51:00 37.0 38.333333
这是某种错误吗?我如何相对容易地纠正它?
修改
仅意识到arr = pd.read_csv('example.csv')
arr['Date'] = pd.to_datetime(arr['Date'])
rmean = arr.rolling(
window='4D',
on='Date',
min_periods=0
).mean().rename(columns={'Values': 'Rolling Mean'})
pd.merge(
arr, rmean,
on='Date'
)
并不是问题,但也许是(不)考虑值的问题。
当我用NaN
删除整行时(如下所示),它仍然产生相同的结果。好像只考虑了窗口中第一天的最后一个条目(即NaN
)
2017-04-13 18:06:00
编辑2
好,我明白了。它通过采用“天偏移X 24小时”而不是我最初假设的“天偏移X日历天”来计算偏移。
请参阅:
rmean = arr.dropna().rolling(
window='4D',
on='Date',
min_periods=0
).mean().rename(columns={'Values': 'Rolling Mean'})