如何计算两个样本之间的相关性

时间:2019-05-27 21:56:02

标签: python dataframe correlation

我正在尝试计算DataFrame类型的两个样本(行)之间的相关性。我发现一些代码可以计算要素(列)之间的相关性,最终,它将矩阵转换为排序的List,然后删除与自身的相关性。我想要相同的样品。

correlations_all = train_df[features].corr().abs().unstack().sort_values(kind="quicksort").reset_index()

correlations_all = correlations_all[correlations_all['level_0'] != correlations_all['level_1']]

output:
level_0        level_1        0
var_0          var_1          0.50
var_0          var_4          0.45
var_10         var_4          0.4

那么如何在python中做到这一点?

1 个答案:

答案 0 :(得分:0)

总的来说,答案是

pd.concat([df,df2],axis=1).T.corr().drop(range(0,df.shape[1]),axis=1)[0:df.shape[1]+1]

详细说明:

创建df

df = pd.DataFrame(np.random.randint(0, high=100, size=(10, 5)),columns=list('abcde'))
df2 = pd.DataFrame(np.random.randint(0, high=100, size=(10, 5)),columns=list('fghjk'))

输出:

>>> df
a   b   c   d   e
0  47  68  60   8  27
1  52  36  50   0  46
2  21  53  55  43   0
3  32  63  42  37  38
4  91  95  28  81  55
5  68  14  16   5  27
6  51   2  73   8  49
7   2  83  54  77  61
8  44  89  87  93  42
9  75  50  78  31  80

>>> df2
    f   g   h   j   k
0  40  62  68   2  24
1  55   9  64  37  39
2  18   5  11  14  79
3  36  14  39  11  66
4  63  95  87  49  81
5  29  20  76  32  90
6  19  48  13   0  81
7  79  55  32   8  17
8  93   3  33   7  53
9  85  30  50  14   2
corr() 

有一个corrwith()函数,第一个函数计算与另一个数据帧的相关性。

corr()在您的情况下更有用。但是corr()是自己计算的。因此,我们先连接了2 df。

输出:

>>>pd.concat([df,df2],axis=1)
    a   b   c   d   e   f   g   h   j   k
0  47  68  60   8  27  40  62  68   2  24
1  52  36  50   0  46  55   9  64  37  39
2  21  53  55  43   0  18   5  11  14  79
3  32  63  42  37  38  36  14  39  11  66
4  91  95  28  81  55  63  95  87  49  81
5  68  14  16   5  27  29  20  76  32  90
6  51   2  73   8  49  19  48  13   0  81
7   2  83  54  77  61  79  55  32   8  17
8  44  89  87  93  42  93   3  33   7  53
9  75  50  78  31  80  85  30  50  14   2

corr()方法计算列之间的相关性。要在行之间进行计算,请先进行转置并删除您不希望看到的df部分。

pd.concat([df,df2],axis=1).T.corr().drop(range(0,df.shape[1]),axis=1)[0:df.shape[1]+1]

输出:

pd.concat([df,df2],axis=1).T.corr().drop(range(0,df.shape[1]),axis=1)[0:df.shape[1]]
              5         6         7         8         9
    0  0.154824  0.161153 -0.006838 -0.301014 -0.125625
    1 -0.405248 -0.344024  0.413258  0.284815  0.367698
    2  0.146049 -0.390763  0.165186 -0.358735 -0.245411
    3 -0.018887 -0.084056 -0.239326  0.061516  0.488869
    4 -0.338686  0.256093  0.455395  0.741626 -0.130878

提取单行

def compute_corr(df,i):
    print(f"Correlation between {i}'th sample and other samples")
    return df.T.corr().loc[i]

输出:

x= pd.concat([df,df2],axis=1).T.corr().drop(range(0,6),axis=1)
compute_corr(x,0)
Correlation between 0'th sample and other samples
0    1.000000
1    0.590134
2   -0.983648
3   -0.894758
4   -0.463191   
Name: 0, dtype: float64

我希望这次是您需要的代码。