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

如何在Pandas中按自定义列表规则对DataFrame多列进行排序

Pandas 按多个自定义列表对多列排序的实现方法

核心思路有两种可选,分别适配不同使用场景:

方法1:转换为有序分类类型(推荐固定排序规则长期使用)

将需要自定义排序的列设置为有序Categorical类型,指定分类顺序为你的自定义列表后,直接按列名排序即可:

import pandas as pd
sort_a=['a','d','e']
sort_b=['s1','s3','s6']
sort_c=['t1','t2','t3']
df=pd.DataFrame(zip(['a', 'e', 'd','a','a','d','e'], ['s3', 's1', 's6','s6','s3','s3','s1'], ['t3', 't2', 't1','t2','t2','t3','t3']),columns=["a", "b", "c"])

# 给对应列绑定自定义排序顺序
df['a'] = pd.Categorical(df['a'], categories=sort_a, ordered=True)
df['c'] = pd.Categorical(df['c'], categories=sort_c, ordered=True)
df['b'] = pd.Categorical(df['b'], categories=sort_b, ordered=True)

# 按要求的列顺序排序,ignore_index用来重置行索引
df_sorted = df.sort_values(by=['a', 'c', 'b'], ignore_index=True)

输出结果和期望完全一致:

a   b   c
0  a  s3  t2
1  a  s3  t3
2  a  s6  t2
3  d  s3  t3
4  d  s6  t1
5  e  s1  t2
6  e  s1  t3

方法2:使用sort_values的key参数(适合临时排序,不修改原数据)

如果不想改动原DataFrame的列类型,可以用排序的key参数自定义排序映射:

# 存储列名和对应排序规则的映射
sort_rules = {
    'a': sort_a,
    'c': sort_c,
    'b': sort_b
}

df_sorted = df.sort_values(
    by=['a', 'c', 'b'],
    key=lambda col: col.map({val: idx for idx, val in enumerate(sort_rules[col.name])}),
    ignore_index=True
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 15:30:03