计算标准偏差时忽略多个NaN

时间:2018-09-14 01:07:21

标签: python pandas numpy dataframe

我有以下pandas数据框,其中包含约5分钟的日内数据。市场开盘当天(美国东部标准时间9:30),DeltaBetweenClose是第一个交易条的NaN

    time     Date       symbol    DeltaBetweenClose 
    9:35    2017-07-17  spy        NaN 
    9:40    2017-07-17  spy       -1.2                     
    ..........................................
    ..........................................    
    16:00   2018-07-17  spy        1.7
    9:35    2017-07-18  spy        NaN
    9:40    2017-07-18  spy        0.3                      
    ..........................................
    ..........................................        
    9:35    2018-07-17  nflx       NaN

我正在尝试创建一列CloseDelta_sd,该列将计算DeltaBetweenClose分组的symbol列的滚动标准偏差,该列将查找前30个小节,并在忽略{的情况下计算标准偏差{1}}个。我的以下尝试返回所有NaN。当NaN列的顶部只有一个NaN时,它起作用。

DeltaBetweenClose

1 个答案:

答案 0 :(得分:1)

此问题与std无关,因为默认情况下会跳过NaN,而与rolling无关。

您需要使用min_periods参数:

  

在一个窗口中必须具有值的最小观察数(否则结果为NA)。对于由偏移量指定的窗口,它将默认为1。

由于您提供的是int而不是偏移量,因此最终会有很多NaN组,因此修复很简单:

(df.groupby('symbol').DeltaBetweenClose
    .transform(lambda x: x.rolling(30, min_periods=1).std()))