You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在pandas中筛选相关系数绝对值高于threshold的唯一特征对

实现方案

核心思路是利用相关系数矩阵的对称性,仅保留上三角(排除对角线自相关)的数据,再按阈值筛选即可,完整实现代码如下:

import pandas as pd
import numpy as np

# 示例数据
foo = pd.DataFrame({'vars': ['col_a', 'col_b', 'col_c', 'col_d'],
                   'col_a': [1, 0.9, 0.04, 0.03],
                   'col_b': [0.9,1,0.05,0.03],
                   'col_c': [0.04, 0.05, 1, -0.04],
                   'col_d': [0.03, 0.03, -0.04,1]})

def get_high_corr_pairs(corr_df, threshold=0.8):
    # 将变量名列设为索引,保证行列变量对应
    corr_mat = corr_df.set_index('vars')
    # 生成上三角掩码,k=1表示跳过对角线(排除自相关)
    upper_mask = np.triu(np.ones(corr_mat.shape, dtype=bool), k=1)
    # 仅保留上三角的相关系数,其余位置置为空
    upper_corr = corr_mat.where(upper_mask)
    # 转为长格式并过滤空值
    corr_pairs = upper_corr.stack()
    # 筛选绝对值大于阈值的特征对
    filtered = corr_pairs[corr_pairs.abs() > threshold]
    # 转为元组列表返回
    return list(filtered.index)

# 测试调用
print(get_high_corr_pairs(foo, threshold=0.8))
# 输出结果:[('col_a', 'col_b')]

额外说明

  • 如果你的相关系数矩阵已经将变量名作为行索引,没有单独的vars列,直接将函数内的corr_mat = corr_df.set_index('vars')修改为corr_mat = corr_df即可使用。
  • 筛选时使用abs()可以同时匹配正相关和负相关的场景,符合需求。

内容的提问来源于stack exchange,提问作者quant

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 23:39:01