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

如何以ID和Dept为键对两个DataFrame执行Outer Join?

解决基于多键的DataFrame全外连接问题

嗨,我懂你想要的是基于ID和Dept两个字段的全外连接(Outer Join),但你用的append()方法其实做不到这个——它只是简单地把两个DataFrame的行拼在一起,不会根据指定的键去匹配对应的数据。要实现你要的效果,得用Pandas的merge()函数,专门处理这种基于键的表连接操作。

为什么append()不适用?

df1.append(df2)只是把df2的行直接追加到df1后面,完全不会考虑ID和Dept的匹配关系,最终会得到7行(4+3),但不会把匹配的行合并到同一行,这显然不是你要的外连接效果。

正确的解决方案:使用pd.merge()

我们可以用merge()函数,指定两个连接键['ID', 'Dept'],并设置连接方式为outer(全外连接),这样就能保留两个表中所有的行,匹配不上的列自动用NaN填充。

完整代码示例

import pandas as pd

# 构造你的原始DataFrame
df1 = pd.DataFrame({
    'Code': ['AA', 'AV', 'TG', 'DF'],
    'ID': [3456, 3467, 5437, 3487],
    'Dept': ['Marketing', 'Finance', 'Admin', 'Finance'],
    'Score': [5, 7, 8, 9],
    'Comp': [5, 8, 4, 9]
})

df2 = pd.DataFrame({
    'ID': [3467, 5437, 9537],
    'Dept': ['Finance', 'Admin', 'Operations'],
    'Pay': ['YES', 'NO', 'YES']
})

# 执行全外连接
result = pd.merge(df1, df2, on=['ID', 'Dept'], how='outer')
print(result)

输出结果

Code     ID       Dept  Score  Comp   Pay
0   AA  3456.0  Marketing    5.0   5.0   NaN
1   AV  3467.0    Finance    7.0   8.0   YES
2   TG  5437.0      Admin    8.0   4.0    NO
3   DF  3487.0    Finance    9.0   9.0   NaN
4  NaN  9537.0  Operations    NaN   NaN   YES

关于输出格式的说明

你期望的输出里重复了ID和Dept列,但实际上merge()会把作为连接键的列合并成一列,这是更规范的表连接结果,完全满足你的需求:

  • 所有来自df1和df2的行都被保留
  • 匹配上的行(比如ID=3467、Dept=Finance)会把两表的字段合并到同一行
  • 匹配不上的行(比如df1里的Marketing、df2里的Operations)对应的缺失字段用NaN填充

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:58:12