如何在Pandas中按指定顺序使用sort_index排序value_counts结果
自定义value_counts结果的索引排序顺序
嗨,这个问题很常见——默认的sort_index()是按字母顺序排序的,而你需要的是符合业务语义的自定义顺序:low → med → high → vhigh。下面给你两种简单的解决办法:
方法一:将列转为分类类型(推荐,适合后续多次使用)
先把目标列定义为有序分类,指定你想要的顺序,这样后续的统计和排序都会遵循这个规则:
import pandas as pd # 定义自定义排序顺序 custom_order = ['low', 'med', 'high', 'vhigh'] # 将a列转换为有序分类类型 df['a'] = pd.Categorical(df['a'], categories=custom_order, ordered=True) # 统计频次并排序,此时sort_index会按自定义顺序排列 result = df['a'].value_counts().sort_index() print(result)
输出结果会和你期望的一致:
low 10 med 20 high 30 vhigh 15 Name: a, dtype: int64
方法二:直接用reindex重排结果(无需修改原DataFrame)
如果不想改动原始数据,也可以直接对value_counts()的结果重新索引,按自定义顺序排列:
custom_order = ['low', 'med', 'high', 'vhigh'] # 先统计频次 counts = df['a'].value_counts() # 按自定义顺序重排索引 result = counts.reindex(custom_order) print(result)
这个方法同样能得到你想要的排序结果,而且不会影响原DataFrame的数据类型。
内容的提问来源于stack exchange,提问作者Haliris
相关产品推荐
相关产品推荐

