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