如何使用groupby计算熊猫数据帧中两列之间的滚动相关系数



我有一个数据帧:

df=pd.dataframe({'group':['A','A','A','A','A','A','A','A','B','B','B','B','B','B','B','B'],'val1':[100,200,300,400,50,150,250,350,50,150,250,350,100,200,300,475],'val2':[3,5,10,-3,2,-5,89,12,35,5,10,-3,2,-5,89,12]})

我想计算列val1'&'之间的相关系数val2’,滚动窗口为3并且在每组内。我想把它作为一列添加到数据帧中。我可以在不使用groupby:的情况下做到这一点

df['val1'].rolling(5).corr(df['val2'])

但我无法将其与groupby相结合。

我正在寻找的输出是一个添加到原始df中的列,如下所示:

相关性南南南>12[/tr>5-3//tr>-0.43[/tr>0.23[/tr><12>0.65[/tr>
Val1Val2
A1003
A2005
A30010
A400-3
A5020.1
A150-5-0.25
A250890.8
A3500.65
B5035
B150
B25010
B350
B1002
B200-5
B475890.87
B100

您可以使用.groupby()按列group进行分组。结果将是两个组,每个组包含所有行(即使是不属于该组的行(。然后,通过与原始行索引上的.GroupBy.max()进行聚合,进一步组合不同组的结果,如下所示:

df['Correlation'] = df.groupby('group')['val1'].rolling(5).corr(df['val2']).groupby(level=1).max()

结果:

print(df)
group  val1  val2  Correlation
0      A   100     3          NaN
1      A   200     5          NaN
2      A   300    10          NaN
3      A   400    -3          NaN
4      A    50     2    -0.136808
5      A   150    -5     0.051931
6      A   250    89     0.093510
7      A   350    12     0.079207
8      B    50    35          NaN
9      B   150     5          NaN
10     B   250    10          NaN
11     B   350    -3          NaN
12     B   100     2    -0.652637
13     B   200    -5    -0.210248
14     B   300    89     0.328695
15     B   475    12     0.152914

最新更新