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

使用Pandas按前缀及季度规则排序DataFrame列名并保留ID列首位

解决DataFrame按前缀分组并按季度排序列的问题

问题场景

你有一个包含100+列的大型DataFrame,迷你示例如下:

ID  rev_Q1   rev_Q5     rev_Q4    rev_Q3   rev_Q2  tx_Q3   tx_Q5  tx_Q2  tx_Q1  tx_Q4
1     1        1         1         1        1       1       1      1       1       1
2     1        1         1         1        1       1       1      1       1       1

需求

  • 对每个前缀(下划线前的关键词,如rev、tx)下的列按季度(Q1、Q2…Qn)排序
  • 保持ID列在首位

你尝试过df = df.reindex(sorted(df.columns), axis=1),但该方法无效,还将ID列移到了末尾。期望输出如下:

ID  rev_Q1   rev_Q2     rev_Q3    rev_Q4   rev_Q5  tx_Q1   tx_Q2  tx_Q3  tx_Q4  tx_Q5
1     1        1         1         1        1       1       1      1       1       1
2     1        1         1         1        1       1       1      1       1       1

实际场景中有30+类似rev、tx的前缀。


解决方案

核心思路是:单独保留ID列,对剩余列按前缀+季度数字的规则排序,避免默认字符串排序的逻辑问题。

直接运行以下代码即可实现需求:

import pandas as pd

# (如果已有DataFrame可跳过这步,直接处理你的df)
data = {
    'ID': [1, 2],
    'rev_Q1': [1, 1],
    'rev_Q5': [1, 1],
    'rev_Q4': [1, 1],
    'rev_Q3': [1, 1],
    'rev_Q2': [1, 1],
    'tx_Q3': [1, 1],
    'tx_Q5': [1, 1],
    'tx_Q2': [1, 1],
    'tx_Q1': [1, 1],
    'tx_Q4': [1, 1]
}
df = pd.DataFrame(data)

# 定义排序键:拆分列名,按前缀+季度数字排序
def sort_col(col):
    prefix, quarter = col.split('_')
    # 提取Q后面的数字,转为整数用于排序
    q_num = int(quarter.strip('Q'))
    return (prefix, q_num)

# 拆分ID列和其他列,避免ID被排序
id_col = ['ID']
sorted_cols = id_col + sorted(df.columns.drop('ID'), key=sort_col)

# 重新排列DataFrame的列
df = df[sorted_cols]

# 查看结果
print(df)

说明

  • sort_col函数将列名拆分为前缀(如rev)和季度部分(如Q5),提取季度数字转为整数后排序,确保同一前缀下的列按Q1→Q2→…→Qn的顺序排列
  • 单独处理ID列,保证它始终在首位
  • 该方法自动适配所有前缀,无需手动指定30+个前缀,适合大型DataFrame场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 03:05:18