通过避免NaN滚动序列

时间:2019-05-13 16:17:20

标签: python python-3.x pandas numpy datetime

在我的情况下,如何通过避免使用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

2 个答案:

答案 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()