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
相关产品推荐
相关产品推荐

