如何基于最后一列排序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
相关产品推荐
相关产品推荐

