合并两个DataFrame并调整列顺序:以Fin为共同列构建目标表
解决DataFrame合并后列位置调整的问题
问题描述
我有两个DataFrame:
- DF1:

- DF2:

二者的共同列为Fin,要求保持DF1中Plo列的原有顺序,将DF2的数据插入到右侧,构建左为DF1、中间为Fin列、右为DF2的新DataFrame(预期输出:
)。
我尝试了以下代码:
new=pd.concat([i.set_index('Fin') for i in [pdadata1,pdadata2]],axis=1, join='outer')
但不确定如何调整列位置,使DF1在左侧、Fin列在中间,希望得到帮助。
解决方案
你的思路方向是对的,不过因为把Fin设为索引了,导致它不在列列表里,所以没法直接调整位置。我给你两种方案,一种是基于你原代码修改,另一种是用更直观的merge方法:
方案1:基于你原有的concat代码修改
先把合并后的索引(也就是Fin)转回普通列,再手动指定列的顺序:
# 执行你的合并操作,然后把Fin从索引转回列 new = pd.concat([i.set_index('Fin') for i in [pdadata1, pdadata2]], axis=1, join='outer').reset_index() # 定义想要的列顺序:先放DF1除了Fin之外的列,然后是Fin,最后放DF2除了Fin之外的列 column_order = [col for col in pdadata1.columns if col != 'Fin'] + ['Fin'] + [col for col in pdadata2.columns if col != 'Fin'] # 按指定顺序重新排列列 final_df = new[column_order]
方案2:用merge方法更直观实现
merge本身会保留左表(DF1)的行顺序,之后直接调整列顺序即可:
# 按Fin列合并两个DataFrame,how='left'确保DF1的行顺序完全保留 merged_df = pd.merge(pdadata1, pdadata2, on='Fin', how='left') # 同样定义列顺序 column_order = list(pdadata1.columns) + ['Fin'] + [col for col in pdadata2.columns if col != 'Fin'] # 调整列顺序得到最终结果 final_df = merged_df[column_order]
两种方法都能得到你想要的结构:左侧是DF1的所有列,中间是Fin,右侧是DF2的列,同时完美保留DF1中Plo列的原有顺序。
内容的提问来源于stack exchange,提问作者Python_newbie
相关产品推荐
相关产品推荐

