使用Groupby进行熊猫滚动功能

时间:2015-03-12 13:04:20

标签: python pandas group-by correlation standard-deviation

在使用按功能分组时,我在尝试在Pandas(即rolling_std()和rolling_corr())中实现'滚动'功能时遇到问题。我已经尝试使用下面的公式,但我一直得到'ValueError:无法从重复的轴重新索引'。

df是我的数据框:

df.groupby(level='ID')['Val1'].apply(lambda x: pd.rolling_std(x,30))

我有什么:

ID  Date    Val1    Val2
A   1-Jan   45      22
A   2-Jan   15      66
A   3-Jan   55      13
B   1-Jan   41      12
B   2-Jan   87      45
B   3-Jan   82      66
C   1-Jan   33      34
C   2-Jan   15      67
C   3-Jan   46      22

我需要什么:

ID  Date    Val1    Val2    Rolling_Corr    Rolling_Std (Val1)
A   1-Jan   45  22      
A   2-Jan   15  66  0.1 1.2
A   3-Jan   55  13  0.16    2.5
B   1-Jan   41  12      
B   2-Jan   87  45  0.15    2.8
B   3-Jan   82  66  0.05    1.1
C   1-Jan   33  34      
C   2-Jan   15  67  0.09    1.5
C   3-Jan   46  22  0.11    2.4

由于

1 个答案:

答案 0 :(得分:0)

在较新版本的pandas中,rolling的语法已更改,例如,从rolling_std()更改为rolling().std(),并且在与groupby结合使用时效果良好:

df.groupby('ID').rolling(2).std()

     ID   Date       Val1       Val2
ID                                  
A  0  A  1-Jan        NaN        NaN
   1  A  2-Jan  21.213203  31.112698
   2  A  3-Jan  28.284271  37.476659
B  3  B  1-Jan        NaN        NaN
   4  B  2-Jan  32.526912  23.334524
   5  B  3-Jan   3.535534  14.849242
C  6  C  1-Jan        NaN        NaN
   7  C  2-Jan  12.727922  23.334524
   8  C  3-Jan  21.920310  31.819805

或者查看corr的以下内容,由于corr的详细输出,这些内容相似但稍微复杂一些:

Rolling Correlation with Groupby in Pandas