使用pandas.cut分箱后value_counts区间排序错误如何解决
解决pandas.cut分箱后统计结果的区间排序异常问题
pd.value_counts()方法默认按照统计值的降序排列,你看到的顺序异常是因为不同区间的样本量不同,优先展示了样本量最高的区间。pd.cut()返回的结果本身是有序分类(Categorical)类型,自带正确的区间顺序属性,只要调整排序规则即可。
方法1:调用value_counts时关闭排序
直接在统计时传入sort=False,就会按照分类本身的区间顺序输出:
ages_cut.value_counts(sort=False)
输出效果:
(0, 20] 268 (20, 40] 379 (40, 60] 233 (60, 80] 56 (80, 100] 3 (100, 120] 0 dtype: int64
方法2:对已生成的统计结果重排索引
如果已经拿到了乱序的统计结果,可以通过分箱结果自带的有序分类属性重排索引:
# 先拿到统计结果 count_result = ages_cut.value_counts() # 用分箱自带的有序分类重排索引 count_result_sorted = count_result.reindex(ages_cut.cat.categories)
注意:如果执行pd.cut时主动设置了ordered=False,返回结果会是无序分类类型,此时需要手动指定区间顺序再重排:
custom_order = pd.IntervalIndex.from_tuples([(0,20),(20,40),(40,60),(60,80),(80,100),(100,120)]) count_result_sorted = count_result.reindex(custom_order)
内容的提问来源于stack exchange,提问作者Ohm
相关产品推荐
相关产品推荐

