熊猫滚动适用于允许南

时间:2017-06-06 23:16:46

标签: pandas nan mean ignore

我有一个非常简单的熊猫系列:

xx = pd.Series([1, 2, np.nan, np.nan, 3, 4, 5])

如果我跑这个我得到我想要的东西:

>>> xx.rolling(3,1).mean()
0    1.0
1    1.5
2    1.5
3    2.0
4    3.0
5    3.5
6    4.0

但如果我必须使用.apply()我无法通过忽略NaN操作中的mean()来使其工作:

>>> xx.rolling(3,1).apply(np.mean)
0    1.0
1    1.5
2    NaN
3    NaN
4    NaN
5    NaN
6    4.0

>>> xx.rolling(3,1).apply(lambda x : np.mean(x))
0    1.0
1    1.5
2    NaN
3    NaN
4    NaN
5    NaN
6    4.0

我应该怎么做才能使用.apply()并在第一个输出中得到结果?我的实际问题更复杂,我必须使用.apply()来实现,但归结为这个问题。

1 个答案:

答案 0 :(得分:2)

您可以使用np.nanmean()

xx.rolling(3,1).apply(lambda x : np.nanmean(x))
Out[59]: 
0    1.0
1    1.5
2    1.5
3    2.0
4    3.0
5    3.5
6    4.0
dtype: float64

如果你必须明确处理nans,你可以这样做:

xx.rolling(3,1).apply(lambda x : np.mean(x[~np.isnan(x)]))
Out[94]: 
0    1.0
1    1.5
2    1.5
3    2.0
4    3.0
5    3.5
6    4.0
dtype: float64