在pandas中将滚动平均列添加到多索引

时间:2018-02-22 02:49:49

标签: python pandas group-by

我有一个包含股票名称和股票数据的多指数。它有65种不同的股票,日期持续5年 - 所以部分DF看起来像这样

                            High    Low Open    Px_last    Volume
                   Date         
SPOM US equity  12/31/2012  0.4575  0.2925  0.4575  0.3975  8890
                 1/1/2013   0.4575  0.2925  0.4575  0.3975  8890
                 1/2/2013   0.3975  0.3225  0.3975  0.3225  3400
                 1/3/2013   0.3738  0.28    0.34    0.29    48933
                 1/4/2013   0.4     0.3175  0.36    0.3175  3610
                 1/7/2013   0.47    0.2863  0.3      0.46   61854
                 1/8/2013   0.54    0.39    0.48    0.4575  86644

我想添加10D滚动平均值的列,我查看了其他一些帖子,例如stackoverflow.com/questions/38334832/rolling-averages-on-groups。我使用了这段代码并没有抛出任何错误,但问题是10D-MA列显示整个数据帧有nan。它没有计算任何数字。任何人都可以告诉我我做错了什么以及为什么这不会产生预期的结果

df2['10D-MA'] = df2.groupby(level=0).apply(lambda df2: df2['Px_last'].rolling(10).mean())

1 个答案:

答案 0 :(得分:0)

IIUC

df['10D']=df.groupby(level=0).Px_last.apply(lambda x: x.rolling(10,min_periods=1).mean())
df
Out[93]: 
                     High     Low    Open  Px_last  Volume       10D
       Date                                                         
equity 12/31/2012  0.4575  0.2925  0.4575   0.3975    8890  0.397500
       1/1/2013    0.4575  0.2925  0.4575   0.3975    8890  0.397500
       1/2/2013    0.3975  0.3225  0.3975   0.3225    3400  0.372500
       1/3/2013    0.3738  0.2800  0.3400   0.2900   48933  0.351875
       1/4/2013    0.4000  0.3175  0.3600   0.3175    3610  0.345000
       1/7/2013    0.4700  0.2863  0.3000   0.4600   61854  0.364167
       1/8/2013    0.5400  0.3900  0.4800   0.4575   86644  0.377500