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

如何在Pandas中实现含多OR连接条件的左外连接(对应SQL逻辑)

在Pandas中实现带OR条件的左外连接

先明确你的需求:基于**table1.City = table2.City 或者 table1.Country = table2.Country**的条件对table1和table2做左外连接(推测你给出的SQL里的citycountry是笔误,结合数据结构来看应该是指table1的对应字段)。

Pandas的merge()方法默认不直接支持OR类型的连接条件,但我们可以通过以下两种方式实现需求:

方法一:两次Merge后合并去重(推荐,效率更高)

这种方法先分别按两个条件做左连接,再合并结果并去除重复行,确保保留table1的所有行,同时匹配到所有符合OR条件的table2记录。

步骤1:构造示例数据

先根据你给出的表结构创建DataFrame:

import pandas as pd

# 创建Table1
table1 = pd.DataFrame({
    'ID': [1, 2, 3, 4, 5],
    'City': ['', 'Delhi', '', 'New York', ''],
    'Country': ['India', '', 'America', '', 'Germany']
})

# 创建Table2
table2 = pd.DataFrame({
    'ID': [1, 2, 3, 4, 5],
    'Country': ['India', 'India', 'America', 'America', 'Germany'],
    'City': ['', 'Delhi', '', 'New York', '']
})

步骤2:分别按两个条件做左连接

# 按City匹配的左连接,添加后缀区分两个表的字段
merge_city = pd.merge(table1, table2, left_on='City', right_on='City', how='left', suffixes=('_t1', '_t2'))

# 按Country匹配的左连接
merge_country = pd.merge(table1, table2, left_on='Country', right_on='Country', how='left', suffixes=('_t1', '_t2'))

步骤3:合并两个结果并去重

将两个连接结果合并,然后通过drop_duplicates()去除重复的行,确保每个table1的记录只保留唯一匹配:

# 合并两个结果集
combined = pd.concat([merge_city, merge_country], ignore_index=True)

# 以table1的ID为基准去重,保留首次出现的匹配
final_result = combined.drop_duplicates(subset=['ID_t1']).reset_index(drop=True)

方法二:笛卡尔积+布尔过滤(适合小数据集)

如果你的数据集规模不大,可以先生成两个表的笛卡尔积,过滤出符合OR条件的行后,再左连接回table1确保所有原始行都被保留:

# 生成笛卡尔积(通过临时key字段关联)
cross_join = table1.assign(key=1).merge(table2.assign(key=1), on='key').drop('key', axis=1)

# 过滤符合City或Country匹配条件的行
filtered = cross_join[(cross_join['City_x'] == cross_join['City_y']) | (cross_join['Country_x'] == cross_join['Country_y'])]

# 左连接回table1,确保所有table1的行都被保留
final_result = table1.merge(filtered, left_on=['ID', 'City', 'Country'], right_on=['ID_x', 'City_x', 'Country_x'], how='left')

结果验证

最终的final_result会和你给出的SQL查询结果完全一致:保留table1的所有行,同时匹配到table2中符合City或Country相等条件的记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 22:42:43