【问题标题】:How to calculate a rolling correlation coefficient between 2 columns in a pandas dataframe with groupby?如何使用 groupby 计算 pandas 数据框中两列之间的滚动相关系数?
【发布时间】:2021-09-17 20:59:14
【问题描述】:

我有一个数据框:

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]})

我想计算滚动窗口为 3 的列“val1”和“val2”之间以及每个组内的相关系数。我想将此作为列添加到数据框中。我可以在不使用 groupby 的情况下做到这一点:

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

但我无法将其与 groupby 合并。

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

group Val1 Val2 Correlation
A 100 3 Nan
A 200 5 Nan
A 300 10 Nan
A 400 -3 Nan
A 50 2 0.1
A 150 -5 -0.25
A 250 89 0.8
A 350 12 0.65
B 50 35 Nan
B 150 5 Nan
B 250 10 Nan
B 350 -3 Nan
B 100 2 -0.43
B 200 -5 0.23
B 475 89 0.87
B 100 12 0.65

【问题讨论】:

    标签: pandas pandas-groupby rolling-computation


    【解决方案1】:

    您可以使用.groupby() 按列分组group。结果将是 2 个组,每个组包含所有行(即使对于不属于该组的行)。然后,在原行索引上用.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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-24
      • 1970-01-01
      • 2020-01-04
      • 1970-01-01
      • 2021-01-03
      • 2017-09-23
      • 2020-07-12
      相关资源
      最近更新 更多