python - Pandas :如何从相关矩阵中删除自相关

标签 python numpy pandas correlation

我试图找到不同列与 pandas 的最高相关性。我知道可以获得相关矩阵

df.corr()

我知道在那之后我可以获得最高的相关性

df.sort() 
df.stack() 
df[-5:]

问题是这些相关性还包含列本身的值 (1)。如何删除这些包含与 self 相关的列?我知道我可以通过删除所有 1 值来删除它们,但我不想这样做,因为也可能存在实际的 1 相关性。

最佳答案

说你有

corrs = df.corr()

然后问题出在对角线元素 IIUC 上。您可以轻松地将它们设置为某个负值,例如 -2(这必然低于所有相关性)

np.fill_diagonal(corrs.values, -2)

示例

(非常感谢@Fabian Rost 的改进和@jezrael 的 DataFrame)

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

关于python - Pandas :如何从相关矩阵中删除自相关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35405222/

相关文章:

python - 绘图仅显示是否使用 .exe 从 Tkinter 关闭主窗口

python - vscode 中的调试测试在容器内失败

python - 文件未找到错误: [Errno 2] No such file or directory: 'test_user1_user_id'

python - 矩阵和向量之间的欧氏距离

python - 尊重 Pandas Dataframes 的 Python 中的扁平化(不规则)列表列表

python - 在python中将标准错误输出重定向到/dev/null

python - 如何在 numpy 中对 3 个向量进行外积来创建 3d 矩阵? (与 nd 相同)

python - 如何将 boolean 子数组相交以获得 True 值?

python - Pandas 在将所有日期转换为一周的开始日期时出错

python - Pandas:将了解列类型的函数应用于数据框的每一列