在使用按功能分组时,我在尝试在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
由于
答案 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
的详细输出,这些内容相似但稍微复杂一些: