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

Python使用pd.concat合并DataFrame无重复ID缺省值补None的参数设置

实现代码

你需要的是按ID对齐的横向外连接效果,使用pd.concat实现的完整代码如下:

import pandas as pd

df1 = pd.DataFrame(
    {
        "ID": ["ID0", "ID1", "ID2", "ID3"],
        "A": ["A0", "A1", "A2", "A3"],
        "B": ["B0", "B1", "B2", "B3"],
    },
)

df2 = pd.DataFrame(
    {
        "ID": ["ID0", "ID1", "ID2", "ID4"],
        "C": ["C0", "C1", "C2", "C4"],
        "D": ["D0", "D1", "D2", "D4"],
    },
)

# 核心合并逻辑
result = pd.concat(
    # 先将两个表的ID设为行索引,用于匹配对齐
    [df1.set_index("ID"), df2.set_index("ID")],
    axis=1,  # 沿列方向横向拼接
    join="outer"  # 保留两个表所有ID,无匹配位置填充缺失值
).reset_index()  # 把ID从索引恢复为普通列

# 可选:将默认的NaN替换为你需要的None
result = result.where(result.notna(), None)

运行后输出结果和你要求的完全一致:

ID     A     B     C     D
0  ID0    A0    B0    C0    D0
1  ID1    A1    B1    C1    D1
2  ID2    A2    B2    C2    D2
3  ID3    A3    B3  None  None
4  ID4  None  None    C4    D4

pd.concat核心参数说明

  • axis=1:指定拼接方向为横向,默认值axis=0是纵向堆叠行,完全不符合你的需求
  • join="outer":保留两个输入表的所有索引(也就是所有ID),如果设置为join="inner"只会保留两个表共有的ID,会丢失ID3和ID4

补充说明:这类按指定列匹配的合并场景,其实用pd.merge写法更简洁,不需要提前设置索引:pd.merge(df1, df2, on="ID", how="outer").where(lambda x: x.notna(), None),最终效果和concat实现完全相同。

内容的提问来源于stack exchange,提问作者Carlos Filipe Novais

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:45:07