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

如何按指定列表顺序对Pandas DataFrame排序(不将COL3设为索引)

按指定列表顺序对DataFrame排序(不设COL3为索引)

现有如下pd.DataFrame:

COL1COL2COL3
xsomethingAL
yinCA
zplaceFL

另有一个列表['FL', 'CA', 'AL'](顺序为FL开头、AL结尾)。请问能否按照该列表的顺序对上述DataFrame进行排序?要求不将COL3设为索引,仅使DataFrame的行顺序与列表一致。


可以实现,以下是两种简洁的实现方法:

方法1:通过分类类型指定排序规则

将COL3列转为分类类型并自定义排序顺序,之后直接按该列排序即可,无需修改索引:

import pandas as pd

# 构造示例DataFrame
df = pd.DataFrame({
    'COL1': ['x', 'y', 'z'],
    'COL2': ['something', 'in', 'place'],
    'COL3': ['AL', 'CA', 'FL']
})

# 目标排序顺序
target_order = ['FL', 'CA', 'AL']

# 将COL3转为带自定义顺序的分类列
df['COL3'] = pd.Categorical(df['COL3'], categories=target_order, ordered=True)

# 按COL3排序得到结果
sorted_df = df.sort_values('COL3')
print(sorted_df)

输出结果:

COL1     COL2 COL3
2    z    place   FL
1    y       in   CA
0    x something   AL

方法2:通过索引映射重新排列

先建立COL3值与行索引的映射,再按目标顺序提取对应索引重新排列DataFrame:

import pandas as pd

df = pd.DataFrame({
    'COL1': ['x', 'y', 'z'],
    'COL2': ['something', 'in', 'place'],
    'COL3': ['AL', 'CA', 'FL']
})

target_order = ['FL', 'CA', 'AL']

# 构建COL3值到行索引的映射字典
value_to_idx = {v: idx for idx, v in df['COL3'].items()}
# 按目标顺序生成对应的索引列表
target_idx = [value_to_idx[v] for v in target_order]
# 重新排列DataFrame
sorted_df = df.loc[target_idx]
print(sorted_df)

输出结果与方法1完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 02:25:44