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

使用Pandas .concat(axis=1)合并DataFrame未对齐问题求助

解决pd.concat(axis=1)合并DataFrame未对齐的问题

先修正代码中的语法错误

你的代码存在三处语法问题,先纠正:

# 错误点:pd.conat拼写错误→pd.concat;括号不匹配;变量名不能有空格
result_df = pd.concat([df1, df2], axis=1)

数据未对齐的核心原因

从你给出的合并结果看,最终出现了4行,说明df1和df2的行索引标签不匹配(比如df1的索引是[0,1],而df2的索引实际是[2,3])。pd.concat(axis=1)是严格按行索引标签对齐的,当索引不重叠时,会保留所有行并填充缺失值,导致出现错位结果。

匹配你期望结果的解决方案

你需要按行位置对齐,同时让df2的a列覆盖df1的a列,保留df1的b、c列和df2的d、e列,以下两种方法都可以实现:

方法1:重置索引合并+去重列

先统一两个DataFrame的索引,确保按行位置对齐,再合并并保留重复列中来自df2的内容:

# 重置索引,丢弃原有索引,统一使用连续的0、1索引
df1_reset = df1.reset_index(drop=True)
df2_reset = df2.reset_index(drop=True)

# 横向合并
combined = pd.concat([df1_reset, df2_reset], axis=1)

# 处理重复列:保留最后出现的列(即df2的列)
result_df = combined.loc[:, ~combined.columns.duplicated(keep='last')]

方法2:用combine_first直接合并填充

combine_first会用右侧DataFrame的非空值填充左侧的缺失值,正好匹配你的需求:

# 用df2的非空值覆盖df1,同时合并所有列
result_df = df2.combine_first(df1)

执行任意一种方法后,就能得到你期望的结果:

a   b    c    d   e 
0     8   3    4    9   10
1     11  6    7   12   13

内容的提问来源于stack exchange,提问作者TheMcFloyd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 11:22:55