我正在尝试计算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中做到这一点?
答案 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
我希望这次是您需要的代码。