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

使用Pandas根据指定列取值自定义重排DataFrame行顺序

解决方法

错误原因

你之前的写法存在两个问题:

  1. 只选择了df['id']单列,最终输出只会保留id列,不会保留status等其他列
  2. 你没有将id列设置为DataFrame的索引,直接传入id取值调用reindex是匹配默认的数字索引,自然匹配不到对应行。

实现方案

下面给三种常用的实现方式,你可以根据场景选择:

方法1:和你思路最接近的set_index + reindex方案

先将id列设为索引,按自定义顺序重排后再恢复id为普通列:

custom_order = ['bb','dd','aa','ai','di', 'bc']
df = df.set_index('id').reindex(custom_order).reset_index()

方法2:使用分类类型指定排序规则

将id列转为带自定义顺序的分类类型,后续排序会默认按你指定的规则执行:

custom_order = ['bb','dd','aa','ai','di', 'bc']
# 将id列转为指定顺序的分类类型
df['id'] = df['id'].astype('category').cat.set_categories(custom_order)
# 按id列排序,重置索引删除原有数字索引
df = df.sort_values('id').reset_index(drop=True)

方法3:使用sort_values的key参数(无需修改原列类型)

通过映射字典将id值映射为排序权重,直接按权重排序:

custom_order = ['bb','dd','aa','ai','di', 'bc']
order_map = {val: idx for idx, val in enumerate(custom_order)}
df = df.sort_values('id', key=lambda x: x.map(order_map)).reset_index(drop=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 13:45:10