如何按月份顺序而非字母序对Pandas分组结果排序?
按月份自然顺序排序分组结果
方案1:提前将月份设为有序分类
把month列定义为带指定顺序的分类类型,后续分组时会自动遵循这个自然顺序,不用额外排序:
import pandas as pd # 先定义好月份的自然顺序 month_order = ['January', 'February', 'March', 'April'] month = ['January','February','March','April','January','February','March','April'] sales = [10,100,130,145,13409,670,560,40] # 创建DataFrame时,将month转为有序分类 df = pd.DataFrame({ 'month': pd.Categorical(month, categories=month_order, ordered=True), 'sales': sales }) # 分组求均值,结果直接按月份顺序输出 result = df.groupby('month')['sales'].mean() print(result)
方案2:分组后重新索引排序
如果已经有现成的DataFrame,也可以在分组计算完成后,用reindex指定月份顺序来调整结果:
import pandas as pd month = ['January','February','March','April','January','February','March','April'] sales = [10,100,130,145,13409,670,560,40] df = pd.DataFrame({'month': month, 'sales': sales}) month_order = ['January', 'February', 'March', 'April'] # 分组后用reindex按指定顺序重排 result = df.groupby('month')['sales'].mean().reindex(month_order) print(result)
原代码问题说明
你原来用的sort_values()是按销售均值的数值大小排序,而默认字符串类型的月份会按字母顺序排列(比如April因A开头会排在最前),所以必须手动指定月份的自然顺序才能得到想要的结果。
内容的提问来源于stack exchange,提问作者zachi
相关产品推荐
相关产品推荐

