执行left merge后如何保留old_2 DataFrame的原有索引?
解决Pandas左连接后保留原索引的问题
你遇到的问题是merge默认会重置索引,生成连续的新索引,要保留old_2的原有索引,有两种简单的实现方式:
方法一:直接赋值原索引
因为左连接(how='left')的结果行数和左表old_2完全一致,所以可以在merge后直接把old_2的索引赋值给结果的索引:
old_changed = old_2.merge(compare_old_df, how='left') # 直接复用old_2的原有索引 old_changed.index = old_2.index
执行后结果会保留old_2的[0,1,4]索引:
some_column key_column audit_column_1 audit_column_2 0 old_val_0 changed_0 foo bar 1 old_val_1 changed_1 foo bar 4 old_val_2 changed_2 foo bar
方法二:先保存原索引再恢复
如果需要更清晰的步骤(比如后续还要用到原索引列),可以先把old_2的索引转为普通列,merge后再恢复为索引:
# 将原索引转为名为original_index的列 old_2_temp = old_2.reset_index(names='original_index') # 执行左连接 old_changed_temp = old_2_temp.merge(compare_old_df, how='left') # 将临时列恢复为索引 old_changed = old_changed_temp.set_index('original_index')
最终结果和方法一一致,且如果需要的话可以保留original_index列(去掉set_index步骤即可)。
内容的提问来源于stack exchange,提问作者Seeker
相关产品推荐
相关产品推荐

