如何根据另一DataFrame的列值对目标DataFrame进行排序
错误原因
- 直接触发报错的原因是
reindex方法传入了df1['TestCaseName']这个带索引的Series对象,而非纯索引值列表。Pandas处理Series类型的index参数时会自动对齐两边的索引,而非直接使用Series的取值作为新索引,索引冲突时就会抛出ValueError: cannot reindex from a duplicate axis。 - 额外注意示例代码里
pd.dataframe拼写错误,正确写法是首字母大写的pd.DataFrame。
修复及更优实现方案
方案1:修复原有reindex写法
把传入的索引参数转为纯列表,避免索引对齐问题:
df2 = df2.set_index('TestCaseName') df2 = df2.reindex(index=df1['TestCaseName'].tolist()) df2 = df2.reset_index()
方案2:用merge直接实现(最简洁)
直接基于df1做左连接,天然保留df1的TestCaseName顺序:
df2 = df1.merge(df2, on='TestCaseName', how='left')
方案3:用分类变量排序(适合需要长期保留该排序逻辑的场景)
将TestCaseName列设置为有序分类类型,后续排序都会按照指定顺序执行:
df2['TestCaseName'] = pd.Categorical( df2['TestCaseName'], categories=df1['TestCaseName'], ordered=True ) df2 = df2.sort_values('TestCaseName').reset_index(drop=True)
以上三种方案都可以得到预期输出结果。
内容的提问来源于stack exchange,提问作者Jforpython
相关产品推荐
相关产品推荐

