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

如何按照自定义顺序列表对DataFrame的指定列进行排序

实现方案

方案1:使用map生成排序辅助列(灵活度高,适配42行量级数据无压力)

先建立col1值和排序权重的对应关系,再按自定义顺序排序即可:

import pandas as pd

# 示例数据构造,你可以替换为自己的DataFrame
df = pd.DataFrame({
    'col1': ['v_1', 'v_2', 'v_3'],
    'col2': [4, 3, 1]
})

# 1. 建立col1值到对应权重的映射(如果规则固定可以直接提取后缀数字,不需要手动写)
rank_map = {'v_1':1, 'v_2':2, 'v_3':3}
# 2. 传入你自定义的排序顺序列表
custom_order = [3,1,2]

# 3. 生成辅助排序列,排序后删除辅助列即可得到结果
df['sort_weight'] = df['col1'].map(rank_map)
result = df.sort_values(
    'sort_weight', 
    key=lambda x: x.map({v:i for i,v in enumerate(custom_order)})
).drop('sort_weight', axis=1)

方案2:使用有序Categorical类型(无需生成额外列)

直接将col1转为指定顺序的有序分类类型,再排序即可:

rank_map = {'v_1':1, 'v_2':2, 'v_3':3}
custom_order = [3,1,2]

# 按自定义顺序生成col1的分类顺序
cat_order = sorted(rank_map.keys(), key=lambda x: custom_order.index(rank_map[x]))
# 转为有序分类后排序
df['col1'] = pd.Categorical(df['col1'], categories=cat_order, ordered=True)
result = df.sort_values('col1')

如果你的col1值和权重的对应规则是固定的(比如v_后面的数字就是权重值),还可以简化映射逻辑,不用手动写rank_map:

# 直接提取col1后缀数字作为权重
df['sort_weight'] = df['col1'].str.split('_').str[1].astype(int)
custom_order = [3,1,2]
result = df.sort_values(
    'sort_weight', 
    key=lambda x: x.map({v:i for i,v in enumerate(custom_order)})
).drop('sort_weight', axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 00:39:02