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

如何在GroupBy多索引对象中按月份顺序排序月份统计结果?

解决分组后月份按自然顺序排序的问题

方法一:将月份列转为有序分类(推荐)

value_counts()会遵循分类类型的定义顺序,所以先把month列设置为有序分类,后续分组统计会自动按自然月份顺序输出:

import pandas as pd

# 定义自然月份的顺序
month_order = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']

# 将month列转换为有序分类类型
df['month'] = pd.Categorical(df['month'], categories=month_order, ordered=True)

# 执行分组统计,此时每个年份下的月份已按自然顺序排列
sorted_result = df.groupby(['Year'])['month'].value_counts()

方法二:在统计结果上重新索引(不修改原数据)

如果不想改动原始DataFrame的列类型,可以在分组统计后,通过重新索引调整月份顺序:

month_order = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']

# 先执行分组统计,再通过格式转换+重排调整顺序
sorted_result = (
    df.groupby(['Year'])['month'].value_counts()
    .unstack(fill_value=0)  # 转为宽表,缺失月份填充0
    .reindex(columns=month_order)  # 按自定义顺序重排月份列
    .stack()  # 转回长表格式
    .loc[lambda x: x > 0]  # 过滤掉无数据的月份(可选,和原value_counts输出一致)
)

补充说明

  • 方法一的优势是一次设置后,后续所有涉及month列的排序、统计都会遵循自然顺序,适合需要多次使用该列的场景。
  • 方法二无需修改原数据,仅针对统计结果调整顺序,适合临时处理需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 14:56:02