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

如何调整Pandas GroupBy后的DataFrame输出顺序与格式?

解决Pandas分组后索引转列并调整排序的问题

你遇到的其实是分组后多级索引转普通列的问题,而且还希望结果按month和指定的day顺序排列对吧?很简单,用reset_index()加上排序就能搞定!

首先,先看最基础的解决方法:你分组后得到的结果里,day和month是作为**多级索引(MultiIndex)**存在的,不是普通列。只需要在分组代码后面加上.reset_index(),就能把这两个索引变回DataFrame的列:

import pandas as pd
d = {'day': ["t", "m", "m", "w", "t", "m","w"], 'month': ["01", "01", "01", "01", "02","02","02"], 'count': [1, 1, 1, 1,1,1,1]}
df = pd.DataFrame(data=d)

# 分组后重置索引,把day和month转为列
grouped_df = df.groupby(by=['day','month']).count().reset_index()
print(grouped_df)

这时候输出会是:

day month  count
0   m    01      2
1   m    02      1
2   t    01      1
3   t    02      1
4   w    01      1
5   w    02      1

不过你想要的是先展示month=01的所有day,再展示month=02的,而且day顺序是m→t→w。这时候只需要对结果按month和day排序就行,因为m、t、w刚好是字母顺序,直接排序就符合你的要求:

# 重置索引后按month和day排序,并且去掉临时的排序索引
final_df = grouped_df.sort_values(by=['month', 'day']).reset_index(drop=True)
print(final_df)

这样就能得到你想要的目标输出:

day month  count
0   m    01      2
1   t    01      1
2   w    01      1
3   m    02      1
4   t    02      1
5   w    02      1

如果你的day顺序不是字母顺序(比如想要t→m→w),还可以通过分类类型来指定自定义排序:

# 指定day的自定义顺序
day_order = ['m', 't', 'w']
# 将day列转为分类类型,指定顺序
grouped_df['day'] = pd.Categorical(grouped_df['day'], categories=day_order, ordered=True)
# 再排序
final_df = grouped_df.sort_values(by=['month', 'day']).reset_index(drop=True)

这样不管day的字母顺序如何,都能按照你指定的顺序排列啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:40:11