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

如何按指定RackID排列顺序对Pandas DataFrame进行排序?

Pandas按指定RackID顺序重新排序DataFrame

问题描述

我拥有如下结构的Pandas DataFrame:

RunIDRackIDPartIDHandIDUltra
01661424
122591133
231371817
3442811255
4534531246
565732926

希望按照RackID的指定排列顺序对该DataFrame重新排序,预期结果如下:

RunIDRackIDPartIDHandIDUltra
4534531246
3442811255
122591133
231371817
01661424
565732926

我曾尝试使用reindex和iloc方法,但未得到预期结果,请问如何在Pandas中实现这一需求?

解决方案

首先明确你需要的RackID自定义顺序为 [3,4,2,1,6,5],以下两种方法可以实现需求:

方法一:使用pd.Categorical指定排序规则

将RackID列转换为分类类型,明确指定自定义排序顺序,再通过sort_values完成排序,该方法会保留原始索引,且严格遵循指定顺序:

import pandas as pd

# 构造原始DataFrame
data = {
    'RunID': [1, 2, 3, 4, 5, 6],
    'RackID': [6, 2, 1, 4, 3, 5],
    'PartID': [61, 59, 37, 28, 45, 73],
    'HandID': [4, 11, 18, 112, 31, 29],
    'Ultra': [24, 33, 17, 55, 246, 26]
}
df = pd.DataFrame(data)

# 定义RackID的自定义排序顺序
custom_rack_order = [3, 4, 2, 1, 6, 5]

# 将RackID转为分类类型,设置有序规则
df['RackID'] = pd.Categorical(df['RackID'], categories=custom_rack_order, ordered=True)

# 按RackID排序
sorted_df = df.sort_values('RackID')

print(sorted_df)

方法二:通过映射生成排序键实现排序

创建一个映射字典,将每个RackID对应到其在自定义顺序中的位置,生成临时排序键列后完成排序,适合不想修改原列类型的场景:

import pandas as pd

# 构造原始DataFrame
data = {
    'RunID': [1, 2, 3, 4, 5, 6],
    'RackID': [6, 2, 1, 4, 3, 5],
    'PartID': [61, 59, 37, 28, 45, 73],
    'HandID': [4, 11, 18, 112, 31, 29],
    'Ultra': [24, 33, 17, 55, 246, 26]
}
df = pd.DataFrame(data)

# 定义RackID的自定义排序顺序
custom_rack_order = [3, 4, 2, 1, 6, 5]
# 创建RackID到排序位置的映射
order_map = {rack_id: idx for idx, rack_id in enumerate(custom_rack_order)}

# 添加临时排序键列
df['sort_key'] = df['RackID'].map(order_map)
# 按排序键排序后删除临时列
sorted_df = df.sort_values('sort_key').drop('sort_key', axis=1)

print(sorted_df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 15:33:16