如何用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
说明
corr_table != 1.0生成布尔索引,筛选出所有非自相关的系数值- 对筛选后的结果降序排序,最终返回的结果不再包含变量自身的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
相关产品推荐
相关产品推荐

