【问题标题】:pandas rolling apply to allow nan熊猫滚动申请允许nan
【发布时间】:2017-11-08 03:03:32
【问题描述】:

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

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(),我无法通过在mean() 操作中忽略NaNs 来使其工作:

>>> 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() 来实现,但归结为这个问题。

【问题讨论】:

    标签: python pandas nan mean


    【解决方案1】:

    你可以使用 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-05
      • 2018-07-30
      相关资源
      最近更新 更多