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

如何基于最后一列排序Pandas相关矩阵并解决pd.sort_values()调用报错

错误原因

你调用sort_values()时传入了by参数,但corr.unstack()返回的是MultiIndex索引的Series对象,只有DataFrame的sort_values()方法才支持by参数指定排序列,Series本身仅存储单组值不需要指定排序字段,因此会触发参数不存在的报错。

解决方法

根据你的需求可以选择对应实现方案:

  • 如果仅需要按相关矩阵最后一列的数值对所有特征排序,无需做unstack处理,直接取相关矩阵最后一列排序即可:
import pandas as pd
import seaborn as sns; sns.set(style="ticks", color_codes=True)

# 定位并加载数据文件
df = pd.read_csv('C:/Users/User/Downloads/suicide_rates.csv')

# 生成相关矩阵
corr = df.corr().abs()
# 取最后一列按数值排序,可加ascending=False改为降序
last_col_sorted = corr.iloc[:, -1].sort_values(kind="mergesort")
print(last_col_sorted)
  • 如果需要获取所有两两相关系数,按最后一列对应的相关值排序,可以将unstack后的Series转为DataFrame再做排序:
# 生成所有两两相关系数的Series
corr_series = corr.unstack()
# 重置索引转为DataFrame,设置相关值列名
corr_df = corr_series.reset_index(name='corr_value')
# 获取最后一列的列名
last_col_name = corr.columns[-1]
# 筛选出最后一列对应的所有相关系数后排序
so = corr_df[corr_df['level_1'] == last_col_name].sort_values(by='corr_value', kind="mergesort")
print(so)
  • 如果后续需要可视化排序后的相关矩阵,直接用排序后的索引重排原相关矩阵即可:
# 用排序好的特征索引重排整个相关矩阵的行和列
sorted_corr = corr.reindex(index=last_col_sorted.index, columns=last_col_sorted.index)
# 热力图可视化
sns.heatmap(sorted_corr, annot=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:42:00