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

Pandas不同行数DataFrame沿轴1拼接失败求助

嘿,我来帮你搞定这个DataFrame合并的问题~

你遇到的核心问题是两个DataFrame用来对齐行的列(Myidx和idx)没被正确设置为合并依据,之前用的join和pd.concat(axis=1)都是默认按DataFrame的自带整数索引(不是你表格里的Myidx/idx列)来合并,所以才会出现df2内容没显示的情况。

下面给你两种能实现你期望效果的方法:

方法一:先把匹配列设为索引再合并

如果Myidx和idx是你用来对齐行的标识列,可以先把它们设置成两个DataFrame的索引,并且统一索引名称,再做合并:

# 把df1的Myidx列设为索引,并改名为idx,和df2的索引名统一
df1 = df1.set_index('Myidx')
df1.index.name = 'idx'

# 把df2的idx列设为索引
df2 = df2.set_index('idx')

# 左连接合并,保留df1的所有行
result = df1.join(df2, how='left')

方法二:直接用merge按指定列匹配

要是不想改动索引,也可以用pd.merge直接指定用来匹配的列,选择左连接来保留df1的全部行:

# 按Myidx和idx列的值匹配,左连接保留df1所有行
result = pd.merge(df1, df2, left_on='Myidx', right_on='idx', how='left')
# 删除重复的idx列(因为df1已经有Myidx了)
result = result.drop('idx', axis=1)
# 把Myidx重命名为idx,和你期望的结果一致
result = result.rename(columns={'Myidx': 'idx'})

运行上面任意一种方法后,你都会得到想要的结果:

idx col1 col2 col3 col4 col5 col6
0    0    a    b    c    m    n    p
1    1    d    e    f  NaN  NaN  NaN
2    2    g    h    i  NaN  NaN  NaN
3    3    j    k    l  NaN  NaN  NaN

顺便解释下之前的方法为啥失败:

  • df1.join(df2):默认按两个DataFrame的自带整数索引合并,而不是你表格里的Myidx/idx列,df2只有索引0的行,其他行的df2列会是NaN,如果你的CSV工具没显示空值,就会看起来像df2没合并进去;另外索引名称不一致也会影响合并逻辑。
  • pd.concat([df1,df2], axis=1):同样是按自带整数索引合并,df2只有一行,所以只有df1的第0行能匹配到内容,其他行的df2列都是空值,容易被误以为没合并成功。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:18:01