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

如何按照另一DataFrame的行顺序对目标DataFrame进行排序?

解决DataFrame行顺序匹配问题

错误原因

你用sort_values(by=eval_df['id'])报错是因为sort_values的by参数只接受列名字符串/列名列表,而你传入的是一整列Series,程序无法识别对应的列,因此触发KeyError。

正确解决方法

以下是三种可靠的实现方式,可根据你的数据情况选择:

方法1:reindex(适用于id完全匹配、无重复的场景)

通过设置id为索引,再按目标顺序重新索引:

# 将uneval_df的id设为索引
uneval_df = uneval_df.set_index('id')
# 按照eval_df的id顺序重新排列,最后恢复原索引结构
uneval_df = uneval_df.reindex(eval_df['id']).reset_index(drop=False)

方法2:分类排序(适用于可能存在id不匹配的场景)

把id转为分类类型并指定顺序,再排序:

import pandas as pd

# 将uneval_df的id转为分类,强制指定顺序为eval_df的id序列
uneval_df['id'] = pd.Categorical(uneval_df['id'], categories=eval_df['id'], ordered=True)
# 按id列排序,自动遵循指定的顺序
uneval_df = uneval_df.sort_values('id')

方法3:左连接合并(适用于需要保留eval_df所有行的场景)

利用merge的左连接特性,自动保留左表(eval_df)的行顺序:

# 仅用eval_df的id列做左连接,匹配uneval_df的所有对应列
uneval_df = eval_df[['id']].merge(uneval_df, on='id', how='left')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 14:05:17