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

Pandas绘制月度销量柱状图时月份无法按时间顺序排序如何解决

问题解决方法

根因

你当前的Month字段为object字符串类型,value_counts(sort=False)仅会按数据集中首次出现的月份顺序返回结果,不会自动识别时间先后,因此无法得到自然月份排序的统计结果。

解决方案

方案1:直接使用已有datetime类型的Date字段生成有序统计结果(更推荐,无需修改原字段)

该方案不需要依赖单独的Month字段,直接从日期字段提取月份信息,天然保证时间顺序:

import pandas as pd

# 按月份的数值顺序分组统计销量,索引为1-12代表1月到12月
monthly_count = sales.groupby(sales['Date'].dt.month)['Order_Quantity'].count()
# 可按需修改索引为月份名称,以下为英文月份缩写示例
monthly_count.index = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']
# 绘制柱状图
monthly_count.plot(kind='bar')

方案2:将原Month字段转为有序分类类型

如果你的数据中Month字段为固定格式的月份名称(如英文全称/缩写、中文月份),可以指定其顺序为自然时间顺序:

# 按自然时间定义月份顺序,按需替换为你数据中的月份格式
month_order = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
# 将Month字段转为有序分类类型
sales['Month'] = pd.Categorical(sales['Month'], categories=month_order, ordered=True)
# 此时统计结果默认按指定的分类顺序排列
sales['Month'].value_counts(sort=False).plot(kind='bar')

注意事项

如果你的数据集包含多个年份的销售数据,统计时需要先按年份+月份分组,避免不同年份的同月份数据合并:

# 按年+月分组统计示例
sales.groupby([sales['Date'].dt.year, sales['Date'].dt.month])['Order_Quantity'].count().plot(kind='bar')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 21:54:02