You need to enable JavaScript to run this app. 使用pandas按指定顺序重排带有序下标的重复行列名DataFrame
优惠活动
大模型
产品
解决方案
定价
更多

使用pandas按指定顺序重排带有序下标的重复行列名DataFrame

解决方案

核心思路是将行/列标签拆分为「类别前缀」和「数字下标」两个维度,先按照自定义的类别优先级排序,同类别再按下标升序排列,最终用排序后的结果重排DataFrame的行和列。

实现代码

import pandas as pd
import re

# --------------- 原始测试数据构造 ---------------
df = pd.DataFrame({0: [11, 3, 10, 9, 6, 9],
                   1: [12, 4, 11, 8, 5, 8],
                   2: [13, 5, 12, 7, 4, 7],
                   3: [14, 6, 13, 6, 3, 6],
                   4: [15, 7, 14, 5, 2, 5],
                   5: [16, 8, 15, 4, 1, 4]})
df = df.rename({0:"apple1", 1:"apple2",2:"banana1",3:"banana2",4:"pear1",5:"pear2"}, axis='columns')
df = df.rename({0:"apple1", 1:"apple2",2:"banana1",3:"banana2",4:"pear1",5:"pear2"}, axis='index')
order = ["banana", "pear", "apple" ]

# --------------- 通用排序逻辑 ---------------
def get_sort_key(label):
    # 拆分标签为非数字的类别前缀和数字后缀
    prefix, num_part = re.match(r'^(\D+)(\d+)$', label).groups()
    # 排序规则:先按自定义的类别顺序权重,再按下标数值升序
    return (order.index(prefix), int(num_part))

# 分别对列和行执行排序
sorted_columns = sorted(df.columns, key=get_sort_key)
sorted_index = sorted(df.index, key=get_sort_key)

# 重排得到目标DataFrame
df_new = df.loc[sorted_index, sorted_columns]

说明

  • 该方法适配所有符合「非数字类别前缀+数字下标」命名规则的行/列标签,同类别下的下标数量不限制
  • 只需修改order列表即可自定义类别优先级,无需调整其他逻辑
  • 如果行和列的排序规则不同,单独编写两个排序key函数分别传入行、列的sorted方法即可
  • 注意:请确保所有行/列标签的类别前缀都存在于order列表中,否则会抛出索引错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 00:36:04