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

如何用Python Pandas实现Oracle MINUS逻辑,检查DataFrame指定列独有记录

Pandas实现Oracle MINUS逻辑:找出df2独有的A、B列组合

这里提供几种高效实现方式,对应你给出的Oracle MINUS 语句逻辑:

方法1:使用merge结合indicator标记

通过左连接并利用_merge列判断记录来源,筛选仅存在于df2的A、B组合:

# 仅取df1的A、B列做左连接,添加来源标记列
merged_df = df2.merge(df1[['A', 'B']], on=['A', 'B'], how='left', indicator=True)
# 筛选仅在df2中出现的记录,保留A、B列
result = merged_df[merged_df['_merge'] == 'left_only'][['A', 'B']]

方法2:利用元组集合+isin筛选

将df1的A、B组合转为元组集合,通过行级判断筛选df2中独有的组合:

# 提取df1的A、B列组合为不可变的元组集合
df1_ab_pairs = set(zip(df1['A'], df1['B']))
# 筛选df2中不在df1_ab_pairs里的记录
result = df2[~df2.apply(lambda row: (row['A'], row['B']) in df1_ab_pairs, axis=1)][['A', 'B']]

方法3:合并去重法(贴合MINUS的去重特性)

Oracle的MINUS会自动去重,这种方法模拟该特性:

# 合并两个DataFrame的A、B列并标记来源
combined = pd.concat([
    df1[['A', 'B']].assign(from_df='df1'),
    df2[['A', 'B']].assign(from_df='df2')
])
# 找出所有重复的A、B组合
duplicated_pairs = combined.duplicated(subset=['A', 'B'], keep=False)
# 筛选仅来自df2且未重复的组合
result = combined[(~duplicated_pairs) & (combined['from_df'] == 'df2')][['A', 'B']]

对应的Oracle SQL等价语句(中文翻译)

SELECT A, B FROM df2
MINUS
SELECT A, B FROM df1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 11:52:22