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

Pandas技术问询:列结构不同的多个DataFrame求和合并方法

嘿,我来帮你搞定这个不同列结构DataFrame的合并问题!根据咱们日常处理数据的常见场景,我整理了几种实用的方案,你可以按需挑选:

方案1:按行合并(保留所有列,缺失值补NaN)

如果你只是想把两个DataFrame的行从头到尾拼在一起,不管列有没有重叠,这个方案最适合。用pandas的concat()方法就能搞定:

import pandas as pd

# 假设你的两个目标DataFrame是df_a和df_b
df_ab = pd.concat([df_a, df_b], axis=0, ignore_index=True)
  • axis=0:指定按行方向合并
  • ignore_index=True:重置合并后新DataFrame的索引,避免出现重复索引的问题
  • 效果:某个列只在其中一个DataFrame存在时,另一个DataFrame对应的位置会自动填充NaN,最终得到包含所有列的A+B。
方案2:按共同键合并(类似数据库JOIN)

如果两个DataFrame有共同的标识列(比如用户ID、订单号),想把对应行的信息匹配合并,就用merge()方法,这也是最常用的关联合并方式:

# 基础操作:按共同列'id'做内连接(只保留两边都存在的键对应的行)
df_ab = pd.merge(df_a, df_b, on='id')

# 要是想保留所有行,哪怕其中一个DataFrame没有对应键,就用外连接
df_ab = pd.merge(df_a, df_b, on='id', how='outer')

# 如果两个DataFrame的键列名不一样(比如df_a是'user_id',df_b是'id')
df_ab = pd.merge(df_a, df_b, left_on='user_id', right_on='id')
  • how参数可选值:
    • 'inner':默认,只保留两边键都存在的行
    • 'left':保留左边df_a的所有行,右边没有对应键的位置补NaN
    • 'right':保留右边df_b的所有行,左边没有对应键的位置补NaN
    • 'outer':保留两边所有行,缺失的位置补NaN
  • 小技巧:如果有重复列名,用suffixes参数加后缀区分,比如pd.merge(df_a, df_b, on='id', suffixes=('_from_a', '_from_b'))
方案3:按列合并(横向拼接,对齐索引)

如果想把两个DataFrame的列横向拼在一起,按行索引对齐,同样用concat()但指定axis=1:

df_ab = pd.concat([df_a, df_b], axis=1)
  • 注意:这个方案要求两个DataFrame的行索引是对应的,不然会出现大量NaN;如果只想保留索引重叠的行,可以加join='inner'参数,比如pd.concat([df_a, df_b], axis=1, join='inner')
额外提醒

合并前可以先打印df_a.columns和df_b.columns,明确列的差异,这样能更精准地选择合并方式哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:20:16