Python pandas合并DataFrame时如何保留原df1的行顺序
解决方案
pandas默认的merge在按索引关联时会自动对匹配到的索引值做排序,因此会打乱左表原始行顺序。要保留df1的原有行序,推荐以下两种实现方式:
方法1:用join替代merge(最优方案)
join默认以左表为基准做关联,会完整保留左表的原始行顺序,直接替换原有合并代码即可:
# 原merge代码替换为这行 df1 = df1.join(df)
执行后得到的df1行序和原始df1完全一致,Rating序列保持['AA','AA','AA','AA','A','A'],值匹配逻辑和merge完全一致,代码最简洁、性能也更好。
方法2:必须使用merge时的兼容写法
如果场景要求必须用merge实现,可以先给df1增加一列存储原始行号,合并完成后按该行号还原顺序,代码如下:
# 暂存原始行序,重置索引把Rating转为普通列 df1 = df1.reset_index().assign(raw_sort_id=range(len(df1))) # 执行合并 df1 = df1.merge(df, left_on='Rating', right_index=True) # 还原原始行序、清理临时字段、恢复索引 df1 = df1.sort_values('raw_sort_id')\ .drop(columns='raw_sort_id')\ .set_index('Rating')
注意:两种方法最终得到的结果完全一致,日常使用优先选方法1即可。
内容的提问来源于stack exchange,提问作者user13412850
相关产品推荐
相关产品推荐

