如何按DataFrame首行值从大到小对列进行排序?
解决DataFrame列排序问题
你用df.sort_values()报错是因为这个方法是用来对行排序的,不是调整列顺序的,所以用错工具了。要按首行值排列顺序,得这么做:
方法一:严格按首行值从大到小排序
先提取首行数据,对列按首行值降序排列,NaN自动排到后面:
# 获取首行数据 first_row = df.loc['2019'] # 按首行值降序排序,NaN放最后 sorted_columns = first_row.sort_values(ascending=False, na_position='last').index.tolist() # 重新排列DataFrame的列 df = df[sorted_columns]
这样得到的列顺序就是:Mercedes → Audi → Volvo → Hyundai → Kia → Tesla → VW,完全符合首行值从大到小的要求。
方法二:手动固定核心列顺序,其余列在后
如果想强制把Audi和Volvo放在Mercedes之后(不管首行排序结果),可以手动构造列顺序:
# 定义优先级高的列 priority_cols = ['Mercedes', 'Audi', 'Volvo'] # 筛选出剩下的列 remaining_cols = [col for col in df.columns if col not in priority_cols] # 合并成新的列顺序 new_col_order = priority_cols + remaining_cols # 重新排列列 df = df[new_col_order]
这个方法更灵活,能完全匹配你想要的列顺序规则。
为什么df.sort_values()会报错?
df.sort_values(by=...)的by参数是用来指定按哪些列的值对行排序,比如你想按Mercedes列的值把行从大到小排,才用这个方法。而你要调整列的顺序,本质是重新排列DataFrame的列索引,直接操作列名列表再重新索引才是正确的方式。
内容的提问来源于stack exchange,提问作者Xtiaan
相关产品推荐
相关产品推荐

