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

如何对包含相同日期前缀的Pandas DataFrame列进行重新排序

如何对包含相同日期前缀的Pandas DataFrame列进行重新排序

我完全get到你的需求啦——就是想把原来按物品类别分组的列,改成按日期归类,同一日期下再按物品名称排序,同时把Branch列固定在最前面对吧?其实用简单的列名拆分和排序就能搞定,下面是具体的解决方法:

实现思路

  1. 先把Branch列单独拎出来,剩下的列我们按规则排序
  2. 对非Branch列,按下划线_拆分成「日期前缀」和「物品名称」两部分,排序时先按日期升序,同一日期下再按物品名称升序
  3. 把Branch列放在排序后的列最前面,重新排列DataFrame的列顺序

完整代码实现

import pandas as pd

# 初始化原始DataFrame
df = pd.DataFrame({
    'Branch': ['Hanoi'],
    '20241201_Candy': [3], '20241202_Candy': [4], '20241203_Candy': [5],
    '20241201_Candle': [3], '20241202_Candle': [4], '20241203_Candle': [5],
    '20241201_Biscuit': [3], '20241202_Biscuit': [4], '20241203_Biscuit': [5]})

# 构造新的列顺序:先保留Branch,再对其他列按(日期, 物品)排序
sorted_columns = ['Branch'] + sorted(
    [col for col in df.columns if col != 'Branch'],
    key=lambda x: (x.split('_')[0], x.split('_')[1])
)

# 重新排列DataFrame的列
df2 = df[sorted_columns]

# 查看结果列名
print(df2.columns)
# 输出:Index(['Branch', '20241201_Biscuit', '20241201_Candle', '20241201_Candy',
#        '20241202_Biscuit', '20241202_Candle', '20241202_Candy',
#        '20241203_Biscuit', '20241203_Candle', '20241203_Candy'],
#       dtype='object')

代码细节解释

  • [col for col in df.columns if col != 'Branch']:先筛选出所有非Branch的列,只对这些列做排序处理
  • sorted(..., key=lambda x: (x.split('_')[0], x.split('_')[1])):用split('_')拆分列名,排序时先以日期前缀为第一优先级,再以物品名称为第二优先级,这样就能完美实现你要的「同日期下物品按名排序」的效果
  • 最后把Branch列放在最前面,组合成新的列顺序,用这个顺序重新索引DataFrame,就得到了符合预期的结果

这个方法还很灵活,哪怕后续新增更多日期或物品类别,都能自动适配排序规则哦~

备注:内容来源于stack exchange,提问作者hoa tran

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 12:10:26