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

如何用Pandas返回小于1的最高相关系数值?

问题:移除相关系数结果中的自相关1.0值,返回小于1的最高相关系数

用户编写了如下Pandas函数用于计算DataFrame的相关系数并排序返回:

def highest_correlation(dataframe):
    corr_table = dataframe.corr().unstack()
    df_corrvalues = corr_table.sort_values(ascending=False)
    
    return df_corrvalues 

correlation = highest_correlation(heart)
correlation

执行后输出包含变量自身的1.0相关值,示例输出如下:

age      age        1.000000
sex      sex        1.000000
thall    thall      1.000000
caa      caa        1.000000
slp      slp        1.000000
                      ...   
output   oldpeak   -0.429146
         exng      -0.435601
exng     output    -0.435601
slp      oldpeak   -0.576314
oldpeak  slp       -0.576314
Length: 196, dtype: float64

需求:修改函数,移除排序后顶部的1值,返回小于1的最高相关系数值。


解决方法

只需在展开相关系数后,先过滤掉值为1的条目,再进行排序即可。修改后的函数如下:

def highest_correlation(dataframe):
    corr_table = dataframe.corr().unstack()
    # 过滤掉变量自相关的1.0值
    filtered_corr = corr_table[corr_table != 1.0]
    # 对剩余相关系数降序排序
    df_corrvalues = filtered_corr.sort_values(ascending=False)
    
    return df_corrvalues 

correlation = highest_correlation(heart)
correlation

说明

  1. corr_table != 1.0 生成布尔索引,筛选出所有非自相关的系数值
  2. 对筛选后的结果降序排序,最终返回的结果不再包含变量自身的1.0相关值,直接展示从高到低的非自相关系数。

如果需要进一步去除重复配对(比如A-B和B-A的相关系数完全相同),可添加额外过滤逻辑:

def highest_correlation(dataframe):
    corr_table = dataframe.corr().unstack()
    # 过滤自相关值 + 去重配对
    filtered_corr = corr_table[(corr_table != 1.0) & (corr_table.index.get_level_values(0) < corr_table.index.get_level_values(1))]
    df_corrvalues = filtered_corr.sort_values(ascending=False)
    
    return df_corrvalues 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 22:48:17