如何用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
相关产品推荐
相关产品推荐

