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

Pandas.merge多键合并的布尔运算符及内连接匹配逻辑确认

Pandas多键Merge的布尔运算符及特性说明

嘿,你的直觉完全正确!我来给你把这个问题讲得明明白白:

1. 多键合并时的布尔运算符

当使用pd.merge()进行多键合并时,采用的是AND布尔运算符——也就是说,只有当所有指定的键(比如你例子里的key1和key2)同时满足left[key] == right[key]的条件时,对应的行才会被匹配并保留到结果中。

2. 结合示例的具体解释

先看你给出的两个DataFrame:

import pandas as pd

left = pd.DataFrame({'key1': ['K0', 'K0', 'K1', 'K2'], 'key2': ['K0', 'K1', 'K0', 'K1'], 'A': ['A0', 'A1', 'A2', 'A3'], 'B': ['B0', 'B1', 'B2', 'B3']})
right = pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K2'], 'key2': ['K0', 'K0', 'K0', 'K0'], 'C': ['C0', 'C1', 'C2', 'C3'], 'D': ['D0', 'D1', 'D2', 'D3']})

当执行pd.merge(left, right, how='inner', on=['key1','key2'])时,只会保留同时满足left['key1'] == right['key1'] 且 left['key2'] == right['key2']的行。运行这段代码得到的结果是:

key1 key2   A   B   C   D
0   K0   K0  A0  B0  C0  D0
1   K1   K0  A2  B2  C1  D1
2   K1   K0  A2  B2  C2  D2

能看到,left里的第0行(key1=K0, key2=K0)匹配上right的第0行;left里的第2行(key1=K1, key2=K0)匹配上right的第1、2行,而其他行因为要么key1不匹配,要么key2不匹配,都被inner连接过滤掉了。

3. 特性的决定因素

这个多键匹配使用AND逻辑的特性,是由Pandas中连接操作的核心逻辑决定的,和语言特性无关。不管你选择how='inner'、outer、left还是right,多键之间的匹配逻辑始终是“所有键同时相等”(AND)——不同的连接类型只是决定是否保留那些键不匹配的行:

  • inner:只保留全匹配的行
  • outer:保留所有行,不匹配的地方用NaN填充
  • left:保留左表所有行,右表匹配不上的用NaN填充
  • right:保留右表所有行,左表匹配不上的用NaN填充

简单说,连接类型决定的是“哪些行被保留”,而多键之间的匹配逻辑(AND)是固定的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:30:50