Python 熊猫:如何从相关矩阵中删除自相关
我试图找出不同栏目与熊猫的最高相关性。我知道你可以用它得到相关矩阵Python 熊猫:如何从相关矩阵中删除自相关,python,numpy,pandas,correlation,Python,Numpy,Pandas,Correlation,我试图找出不同栏目与熊猫的最高相关性。我知道你可以用它得到相关矩阵 df.corr() 我知道在那之后我可以得到最高的相关性 df.sort() df.stack() df[-5:] 问题是,这些相关性还包含列本身的列值(1)。如何删除这些包含与self相关的列?我知道我可以通过删除所有的1值来删除它们,但我不想这样做,因为可能也存在实际的1相关性。假设您有 corrs = df.corr() 然后问题是对角线元素,IIUC。您可以很容易地将它们设置为一些负值,例如-2(必然低于所有相
df.corr()
我知道在那之后我可以得到最高的相关性
df.sort()
df.stack()
df[-5:]
问题是,这些相关性还包含列本身的列值(1)。如何删除这些包含与self相关的列?我知道我可以通过删除所有的1值来删除它们,但我不想这样做,因为可能也存在实际的1相关性。假设您有
corrs = df.corr()
然后问题是对角线元素,IIUC。您可以很容易地将它们设置为一些负值,例如-2(必然低于所有相关性)
示例 (非常感谢@Fabian Rost的改进和@jezrael的数据帧)
我最近找到了更清晰的答案,你们可以通过数值来比较多个索引级别 这就是我最后使用的
corr = df.corr().stack()
corr = corr[corr.index.get_level_values(0) != corr.index.get_level_values(1)]
相关性也可能为负值。因此,最好将它们设置为小于-1的值。也许您可以添加sample
df=pd.DataFrame({'one':[0.1,32,2,0.4,0.8],'two':[0.23,18,56,61,12],'three':[0.9,3,6,5,3],'four':[0.34,75,91,19,21],'zive':[0.1,32,2,0.4,0.8],'six':[0.9,36,5],'drive':[0.3],'drive':[0.9],.5],.5],.5],'drive',[0.5],.5],.3],.5],.5],[3],.5]!我不知道怎么填。这很好地解决了这个问题。(我想我只需将它们设置为NaN,然后删除所有NaN)@mikkom好主意,NaN
s将在AFAIC底部排序。
import numpy as np
df=pd.DataFrame( {
'one':[0.1, .32, .2, 0.4, 0.8],
'two':[.23, .18, .56, .61, .12],
'three':[.9, .3, .6, .5, .3],
'four':[.34, .75, .91, .19, .21],
'zive': [0.1, .32, .2, 0.4, 0.8],
'six':[.9, .3, .6, .5, .3],
'drive':[.9, .3, .6, .5, .3]})
corrs = df.corr()
np.fill_diagonal(corrs.values, -2)
>>> corrs
drive four one six three two zive
drive -2.000000 -0.039607 -0.747365 1.000000 1.000000 0.238102 -0.747365
four -0.039607 -2.000000 -0.489177 -0.039607 -0.039607 0.159583 -0.489177
one -0.747365 -0.489177 -2.000000 -0.747365 -0.747365 -0.351531 1.000000
six 1.000000 -0.039607 -0.747365 -2.000000 1.000000 0.238102 -0.747365
three 1.000000 -0.039607 -0.747365 1.000000 -2.000000 0.238102 -0.747365
two 0.238102 0.159583 -0.351531 0.238102 0.238102 -2.000000 -0.351531
zive -0.747365 -0.489177 1.000000 -0.747365 -0.747365 -0.351531 -2.000000
corr = df.corr().stack()
corr = corr[corr.index.get_level_values(0) != corr.index.get_level_values(1)]