在我的情况下,如何通过避免使用NaN
值来执行滚动计算?
我的系列:
2019-05-01 0.1
2019-05-02 0.2
2019-05-03 NaN
2019-05-04 NaN
2019-05-05 NaN
2019-05-06 0.1
2019-05-07 0.5
2019-05-08 NaN
2019-05-09 0.1
2019-05-10 0.2
2019-05-11 NaN
2019-05-12 NaN
2019-05-13 0.3
我需要以以下方式计算该系列的周期2的平均值:
2019-05-01 NaN
2019-05-02 0.15
2019-05-03 NaN
2019-05-04 NaN
2019-05-05 NaN
2019-05-06 0.15
2019-05-07 0.30
2019-05-08 NaN
2019-05-09 0.30
2019-05-10 0.15
2019-05-11 NaN
2019-05-12 NaN
2019-05-13 0.25
使用rolling
,如果您没有两个后续的非NaN
值,则平均值将返回NaN,因此它不起作用(在删除NaN的结果下方):
2019-05-01 NaN
2019-05-02 0.15
2019-05-03 NaN
2019-05-04 NaN
2019-05-05 NaN
2019-05-06 NaN
2019-05-07 0.30
2019-05-08 NaN
2019-05-09 NaN
2019-05-10 0.15
2019-05-11 NaN
2019-05-12 NaN
2019-05-13 NaN
答案 0 :(得分:3)
对于您而言,dropna
首先是rolling
reindex
返回
s.dropna().rolling(2).mean().reindex(s.index)
Out[796]:
2019-05-01 NaN
2019-05-02 0.15
2019-05-03 NaN
2019-05-04 NaN
2019-05-05 NaN
2019-05-06 0.15
2019-05-07 0.30
2019-05-08 NaN
2019-05-09 0.30
2019-05-10 0.15
2019-05-11 NaN
2019-05-12 NaN
2019-05-13 0.25
Name: x, dtype: float64
答案 1 :(得分:0)
您可以使用最近显示的值来估算数据:
222
然后计算滚动平均值:
temp = df.fillna(method='ffill')
最后替换NaN:
temp = temp.rolling(2).mean()