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

合并两个DataFrame并调整列顺序:以Fin为共同列构建目标表

解决DataFrame合并后列位置调整的问题

问题描述

我有两个DataFrame:

  • DF1:DF1表格
  • DF2: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:12:18