如何在Pandas GroupBy后按自定义值排序列并导出Excel
实现自定义排序并导出Excel的解决方案
步骤说明
- 先清理
color列的多余空格(你的数据里存在' orange'带前导空格的情况,会被识别为与'orange'不同的值) - 给
id和color列指定自定义分类顺序,让Pandas按照该规则排序 - 分组后基于自定义顺序排序,再导出到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
相关产品推荐
相关产品推荐

