如何从df.corr()生成的相关矩阵中筛选相关系数大于0.75的列名
Pandas筛选相关系数大于0.75的列名实现方法
首先需排除相关系数矩阵中自身与自身的相关系数(固定为1)、以及上下三角重复的列对,再做阈值筛选即可,具体实现如下:
基础实现(含去重,推荐)
依赖numpy完成高效去重,每对列仅出现一次:
- 完整可运行代码:
import pandas as pd import numpy as np # 1. 生成原始相关系数矩阵 corr_matrix = df.corr() # 2. 屏蔽对角线(自身相关)和下三角的重复值,仅保留上三角非重复列对 corr_matrix = corr_matrix.where(np.triu(np.ones(corr_matrix.shape), k=1).astype(bool)) # 3. 筛选相关系数大于0.75的结果 high_corr = corr_matrix.stack().reset_index() high_corr.columns = ['列名1', '列名2', '相关系数'] high_corr = high_corr[high_corr['相关系数'] > 0.75] # 输出符合条件的列对与对应相关系数 print(high_corr) # 如需提取所有涉及到的唯一列名,执行以下代码 unique_high_corr_cols = pd.unique(high_corr[['列名1', '列名2']].values.ravel()) print(unique_high_corr_cols)
无numpy依赖实现
如果不想引入numpy,可通过列名比较去重:
import pandas as pd corr_matrix = df.corr() # 展开矩阵并过滤重复对、自身对 corr_pairs = corr_matrix.unstack().reset_index() corr_pairs.columns = ['列名1', '列名2', '相关系数'] corr_pairs = corr_pairs[corr_pairs['列名1'] < corr_pairs['列名2']] # 筛选阈值 high_corr = corr_pairs[corr_pairs['相关系数'] > 0.75] print(high_corr)
说明
- 若不需要去重,可跳过上述去重步骤,直接执行
corr_matrix.unstack()[corr_matrix.unstack() > 0.75]即可得到所有两两组合的结果(包含(A,B)和(B,A)、以及自身和自身的匹配项) - 可根据需求修改阈值
0.75为其他数值
内容的提问来源于stack exchange,提问作者user17051608
相关产品推荐
相关产品推荐

