首页 文章

如何在同一数据框中生成两列数据帧的相关系数作为新列变量?

提问于
浏览
2

我有一个包含三列的数据框 . ID用作我想使用groupby命令的标识符 . 在这里,我想为每个ID生成A和B之间的相关系数 . 这是我的数据帧的样子:

ID  A  B
1   5  7
1   3  4
2   4  5
2   7  6
2   9  1

我想将其转换为以下数据框:

ID  A  B  Corr_Coeff
1   5  7  <Value 1> 
1   3  4  <Value 1>
2   4  5  <Value 2> 
2   7  6  <Value 2>
2   9  1  <Value 2>

这是我目前使用的代码,但似乎没有工作:

df['Corr_Coeff'] = df.groupby('ID')[['A','B']].corr()

如果有人可以帮助我在这里会很棒!提前致谢 .

1 回答

  • 0

    我认为需要map通过iloc按位置选择行,以删除 MultiIndex 使用reset_index

    df1 = df.groupby('ID')[['A','B']].corr()
    print (df1)
                 A         B
    ID                      
    1  A  1.000000  1.000000
       B  1.000000  1.000000
    2  A  1.000000 -0.675845
       B -0.675845  1.000000
    
    df['corr'] = df['ID'].map(df1.iloc[0::2, 1].reset_index(level=1, drop=True))
    print (df)
       ID  A  B      corr
    0   1  5  7  1.000000
    1   1  3  4  1.000000
    2   2  4  5 -0.675845
    3   2  7  6 -0.675845
    4   2  9  1 -0.675845
    

    替代创建映射 Series by corrwith,最后通过DataFrame.squeeze1 column Dataframe 转换为 Series

    s = (df[['A']].groupby(df['ID']).corrwith(df['B'])).squeeze()
    print(s)
    ID
    1    1.000000
    2   -0.675845
    Name: A, dtype: float64
    
    df['corr'] = df['ID'].map(s)
    print (df)
       ID  A  B      corr
    0   1  5  7  1.000000
    1   1  3  4  1.000000
    2   2  4  5 -0.675845
    3   2  7  6 -0.675845
    4   2  9  1 -0.675845
    

相关问题