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

求助:无法按Object类型月份列对数据集执行.sort_values排序

问题解决:按月份缩写排序无变化的问题

你的代码逻辑本身是对的,但**sort_values默认不会修改原DataFrame**,只是返回一个排序后的新对象,你没有保存这个结果,也没有开启原地修改,所以原数据集看起来毫无变化。

两种有效解决方法

方法1:使用inplace=True参数原地修改

直接在原DataFrame上完成排序操作:

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

Test_LM_Cboe.sort_values(
    by=['Month'], 
    key=lambda x: pd.Categorical(x, categories=List_Of_Months, ordered=True),
    inplace=True
)

方法2:将排序结果重新赋值给原变量

把排序后的新DataFrame替换原变量:

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

Test_LM_Cboe = Test_LM_Cboe.sort_values(
    by=['Month'], 
    key=lambda x: pd.Categorical(x, categories=List_Of_Months, ordered=True)
)

优化方案:提前将月份列转为分类类型

如果后续还要做透视表或多次排序,建议先把Month列转为有序分类类型,这样后续操作都会自动遵循月份顺序:

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

# 转换为有序分类
Test_LM_Cboe['Month'] = pd.Categorical(Test_LM_Cboe['Month'], categories=List_Of_Months, ordered=True)

# 后续直接排序即可
Test_LM_Cboe.sort_values(by='Month', inplace=True)

# 生成数据透视表时,也会自动按月份顺序排列
pivot_table = Test_LM_Cboe.pivot_table(...)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 23:50:32