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

如何合并仅含单列的两个pandas DataFrame?merge是否适用?

合并单列Pandas DataFrame的实现方法

我需要合并两个仅含一列的Pandas DataFrame(df1和df2),期望得到如示例所示的df3。示例代码及输出如下:

import pandas as pd

data1 = [
    'A',
    'B',
    'C']
df1 = pd.DataFrame(data1,columns=['name'])
data2 = [
    'B',
    'C',
    'D']

df2 = pd.DataFrame(data2,columns=['name'])

data3 = [
    ['A',],
    ['B','B'],
    ['C','C'],
    [None,'D']]

df3 = pd.DataFrame(data3,columns=['name_x','name_y'])

print(df1)
print(df2)
print(df3)

输出结果:

name
0    A
1    B
2    C
  name
0    B
1    C
2    D
  name_x name_y
0      A   None
1      B      B
2      C      C
3   None      D

推荐方法:使用merge的全外连接

最直接的方式是用Pandas的merge方法,指定how='outer'(全外连接),保留两个DataFrame的所有元素,匹配项合并到同一行,不匹配项用NaN填充(可按需转换为None):

import pandas as pd

data1 = ['A', 'B', 'C']
df1 = pd.DataFrame(data1, columns=['name'])
data2 = ['B', 'C', 'D']
df2 = pd.DataFrame(data2, columns=['name'])

# 执行全外连接,指定列后缀区分来源
df3 = pd.merge(df1, df2, on='name', how='outer', suffixes=('_x', '_y'))
# 将NaN转换为None(可选操作)
df3 = df3.where(pd.notnull(df3), None)

print(df3)

输出结果与期望完全一致:

name_x name_y
0      A   None
1      B      B
2      C      C
3   None      D

其他可选方法:基于唯一值的分步连接

如果需要对中间流程做额外控制,可以先提取两个DataFrame的所有唯一值,再分别与原表做左连接:

import pandas as pd

data1 = ['A', 'B', 'C']
df1 = pd.DataFrame(data1, columns=['name'])
data2 = ['B', 'C', 'D']
df2 = pd.DataFrame(data2, columns=['name'])

# 获取所有唯一的name值
all_names = pd.DataFrame({'name': pd.concat([df1['name'], df2['name']]).unique()})
# 分别与df1、df2做左连接
df3 = all_names.merge(df1, on='name', how='left').merge(df2, on='name', how='left')
# 调整列名并转换NaN为None
df3.columns = ['name', 'name_x', 'name_y']
df3 = df3.drop('name', axis=1).where(pd.notnull(df3), None)

print(df3)

该方法效果与全外连接一致,步骤稍多,适合需要在中间环节添加自定义逻辑的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 14:37:09