求助:无法按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
相关产品推荐
相关产品推荐

