假设我有一个类似于下面的 Pandas 数据框,我将如何获得 2 个特定列之间的滚动相关性(在此示例中为 2 天)并按“ID”列分组?我熟悉 Pandas rolling_corr() 函数,但我不知道如何将它与 groupby() 子句结合起来。
我有什么:
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
A 1-Jan 45 22
A 2-Jan 15 66 0.1
A 3-Jan 55 13 0.16
B 1-Jan 41 12
B 2-Jan 87 45 0.15
B 3-Jan 82 66 0.05
C 1-Jan 33 34
C 2-Jan 15 67 0.09
C 3-Jan 46 22 0.11
谢谢!
最佳答案
您实际上可以从这里的简单方法开始: Pandas Correlation Groupby
然后像这样添加rolling(3)
:
df.groupby('ID')[['Val1','Val2']].rolling(3).corr()
我已将窗口从 2 更改为 3,因为窗口大小为 2 时您只会得到 1 或 -1。不幸的是,该输出(未显示)有点冗长,因为它在以下情况下输出 2x2 相关矩阵您只需要一个标量。 但是通过额外的一行,您可以使输出更加简洁:
df2 = df.groupby('ID')[['Val1','Val2']].rolling(3).corr()
df2.groupby(level=[0,1]).last()['Val1']
ID
A 0 NaN
1 NaN
2 -0.996539
B 3 NaN
4 NaN
5 0.879868
C 6 NaN
7 NaN
8 -0.985529
关于python - 与 Pandas 中的 Groupby 滚动相关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28998998/