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

如何在Pandas GroupBy后按自定义值排序列并导出Excel

实现自定义排序并导出Excel的解决方案

步骤说明

  1. 先清理color列的多余空格(你的数据里存在' orange'带前导空格的情况,会被识别为与'orange'不同的值)
  2. 给id和color列指定自定义分类顺序,让Pandas按照该规则排序
  3. 分组后基于自定义顺序排序,再导出到Excel

修改后的完整代码

import pandas as pd

data = {'color': ['green', 'red', ' orange', 'red','blue',' orange', 'red','blue', 'red', ' orange', 'red','red','green'],
        'Name': ['Tom', 'nick', 'krish', 'jack','bob','Tom', 'nick', 'krish', 'nick', 'krish', 'jack','nick','Tom'],
        'form': [ 'a', 'b', 'c', 'd','e','b', 'c', 'd','d','e','b', 'c', 'b'],
        'id': [ 'an', 'bv', 'cl', 'cl','an','bv', 'an', 'cl','cl', 'an','bv','bv','an'],
        }

df = pd.DataFrame(data)

# 清理color列的前导空格
df['color'] = df['color'].str.strip()

# 定义自定义排序规则
id_order = ['bv', 'cl', 'an']
color_order = ['blue', 'red', 'orange', 'green']

# 将id和color转为有序分类类型,指定排序优先级
df['id'] = pd.Categorical(df['id'], categories=id_order, ordered=True)
df['color'] = pd.Categorical(df['color'], categories=color_order, ordered=True)

# 分组后按自定义索引顺序排序
df_1 = df.groupby(['color','Name','id'])['form'].agg('count').sort_index()

# 导出到Excel(新版本Pandas推荐用close代替save)
writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter')    
df_1.to_excel(writer, sheet_name='Sheet1')
writer.close()

print("已按自定义顺序导出到test.xlsx")

关键细节解释

  • pd.Categorical是实现自定义排序的核心,ordered=True标记该列为有序分类,排序时会严格遵循设定的分类顺序
  • GroupBy后的结果是多级索引,调用sort_index()会按照索引层级(color→Name→id)的自定义顺序完成排序
  • 清理color列的空格是必要操作,否则带空格的' orange'会被单独分组,无法纳入预期的排序规则中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 13:52:49