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

如何在Pandas中对DataFrame进行多列自定义排序?

Pandas多列自定义排序实现方案

我有如下结构的Pandas DataFrame:

+-----------+-----------------+---------+
| JOB-NAME  |  Status         | SLA     |
+-----------+-----------------+---------+
| job_1     | YET_TO_START    | ---     |
| job_3     | COMPLETED       | MET     |
| job_4     | RUNNING         | MET     |
| job_2     | YET_TO_START    | LATE    |
| job_6     | RUNNING         | LATE    |
| job_5     | FAILED          | LATE    |
| job_7     | YET_TO_START    | ---     |
| job_8     | COMPLETED       | NOT_MET |
+-----------+-----------------+---------+

需要按Status和SLA列进行自定义排序,规则如下:

  • Status优先级:FAILED > YET_TO_START > RUNNING > COMPLETED
  • SLA优先级:LATE > --- > NOT_MET > MET

期望得到的排序结果:

+-----------+-----------------+---------+
| JOB-NAME  |  Status         | SLA     |
+-----------+-----------------+---------+
| job_5     | FAILED          | LATE    |
| job_2     | YET_TO_START    | LATE    |
| job_1     | YET_TO_START    | ---     |
| job_7     | YET_TO_START    | ---     |
| job_6     | RUNNING         | LATE    |
| job_4     | RUNNING         | MET     |
| job_8     | COMPLETED       | NOT_MET |
| job_3     | COMPLETED       | MET     |
+-----------+-----------------+---------+

我已经实现了单列(Status)的自定义排序,代码如下:

sort_order_dict = {"FAILED":0, "YET_TO_START":1, "RUNNING":2, "COMPLETED":3}
joined_df = joined_df.sort_values(by=['status'], key=lambda x: x.map(sort_order_dict))

但无法实现多列的自定义排序,现有的方案仅支持单列,寻求多列自定义排序的解决方法。


解决方案

你可以为每一列分别定义排序优先级字典,然后在sort_values的key参数中生成对应每一列的排序键值列表,同时指定排序的列顺序即可实现多列自定义排序。

实现代码

# 定义各列的自定义排序优先级字典
status_sort_order = {"FAILED": 0, "YET_TO_START": 1, "RUNNING": 2, "COMPLETED": 3}
sla_sort_order = {"LATE": 0, "---": 1, "NOT_MET": 2, "MET": 3}

# 执行多列自定义排序
joined_df = joined_df.sort_values(
    by=['Status', 'SLA'],
    key=lambda df: [
        df['Status'].map(status_sort_order),
        df['SLA'].map(sla_sort_order)
    ]
)

代码说明

  1. 为Status和SLA列分别创建排序字典,字典值越小代表该类别优先级越高;
  2. sort_values的by参数指定排序的层级顺序:先按Status排序,同Status的行再按SLA排序;
  3. key参数通过列表返回每一列对应的排序键值,Pandas会按照这个列表的顺序依次进行排序;
  4. 执行后即可得到符合预期的排序结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 04:45:29