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

Pandas问题:Categorical未按自定义顺序排序,反而按字母序排列

问题:按自定义subgroup顺序排序DataFrame

原始DataFrame

import pandas as pd

df = pd.DataFrame({
    'maingroup': ['Citrus']*8,
    'subgroup': ['Mandarin', 'Lemon', 'Kiwi', 'Lemon', 'Mandarin', 'Kiwi', 'Mandarin', 'Mandarin'],
    'item': ['aa', 'bb', 'cc', 'dd', 'ee', 'ff', 'gg', 'hh'],
    'itemrank': [12, 22, 32, 35, 33, 42, 98, 99]
})

需求

希望按照由itemrank升序推导的subgroup顺序对DataFrame排序,同时组内按itemrank升序排列。

尝试的代码(未达预期)

grp_list = df.sort_values(by=['itemrank'], ascending=True)['subgroup'].unique().tolist()    # ['Mandarin', 'Lemon', 'Kiwi']
df['subgroup'] = pd.Categorical(df.subgroup, categories=grp_list, ordered=True)

错误输出

maingroup   subgroup    item    itemrank
Citrus      Kiwi        cc      32
Citrus      Kiwi        ff      42
Citrus      Lemon       dd      22
Citrus      Lemon       bb      35
Citrus      Mandarin    ee      12
Citrus      Mandarin    aa      33
Citrus      Mandarin    gg      98
Citrus      Mandarin    hh      99

期望输出

maingroup   subgroup    item    itemrank
Citrus      Mandarin    ee      12
Citrus      Mandarin    aa      33
Citrus      Mandarin    gg      98
Citrus      Mandarin    hh      99
Citrus      Lemon       dd      22
Citrus      Lemon       bb      35
Citrus      Kiwi        cc      32
Citrus      Kiwi        ff      42  

解决方案

问题根源

  1. 仅将subgroup转为有序分类,但未执行主动排序操作,DataFrame不会自动重排。
  2. 原grp_list生成逻辑依赖行排序后的唯一值提取,若数据波动可能导致分组顺序错误,更稳妥的方式是按每个subgroup的最小itemrank确定顺序。

修正代码

# 按每个subgroup的最小itemrank升序,确定分组顺序
grp_list = df.groupby('subgroup')['itemrank'].min().sort_values().index.tolist()
# 将subgroup转为有序分类
df['subgroup'] = pd.Categorical(df['subgroup'], categories=grp_list, ordered=True)
# 执行排序:先按subgroup(自定义顺序),再按itemrank升序
df_sorted = df.sort_values(by=['subgroup', 'itemrank'], ascending=[True, True])
print(df_sorted)

说明

  • 用groupby提取每个分组的最小itemrank再排序,能稳定得到符合需求的分组顺序,避免数据波动带来的错误。
  • 转为分类后必须调用sort_values(),指定按subgroup和itemrank排序,才能得到期望的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 15:17:44