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

Python Pandas/SQL实现横向对比两系统交易商品并筛选无交集行

解决方案:筛选两系统商品无交集的交易行

我们需要筛选出系统A的商品集合与系统B的商品集合完全无交集的交易行,包含其中一方未捕获任何商品的场景。以下分别提供SQL和Python Pandas两种实现方案:

SQL 实现

思路

  1. 对每个交易行,分别提取系统A、B的非空商品集合
  2. 检查两个集合是否无交集(含其中一个集合为空的情况)
  3. 筛选出符合条件的交易记录

代码示例

假设数据表名为transaction_items,字段包含transaction_id, A_Item1, A_Item2, A_Item3, B_Item1, B_Item2, B_Item3:

SELECT transaction_id,
       A_Item1, A_Item2, A_Item3,
       B_Item1, B_Item2, B_Item3
FROM transaction_items
WHERE 
  -- 判断两系统非空商品无交集
  NOT EXISTS (
    SELECT item
    FROM (VALUES (A_Item1), (A_Item2), (A_Item3)) AS a_items(item)
    WHERE a_items.item IS NOT NULL
    INTERSECT
    SELECT item
    FROM (VALUES (B_Item1), (B_Item2), (B_Item3)) AS b_items(item)
    WHERE b_items.item IS NOT NULL
  );

逻辑说明

  • 用VALUES子句将各系统的3个商品列转为行数据,过滤空值后做交集运算
  • 若交集为空(NOT EXISTS),说明两系统无共同商品,自动覆盖以下场景:
    • 交易ID2:A的商品(bread)与B的商品(soup、egg)无重叠
    • 交易ID5:B系统无任何商品,交集为空
  • 交易ID1因两系统都有coffee,交集存在,会被排除

Python Pandas 实现

思路

  1. 对每行数据,分别收集系统A、B的非空商品,转化为集合
  2. 计算两个集合的交集,若交集为空则保留该行
  3. 输出符合条件的交易记录

代码示例

import pandas as pd

# 模拟测试数据
data = {
    'transaction_id': [1, 2, 5],
    'A_Item1': ['coffee', 'bread', None],
    'A_Item2': ['milk', None, None],
    'A_Item3': [None, None, None],
    'B_Item1': ['coffee', 'soup', None],
    'B_Item2': ['tea', 'egg', None],
    'B_Item3': [None, None, None]
}
df = pd.DataFrame(data)

def check_no_intersection(row):
    # 提取系统A的非空商品集合
    a_items = set(row[['A_Item1', 'A_Item2', 'A_Item3']].dropna())
    # 提取系统B的非空商品集合
    b_items = set(row[['B_Item1', 'B_Item2', 'B_Item3']].dropna())
    # 判断交集是否为空
    return len(a_items & b_items) == 0

# 筛选符合条件的行
result_df = df[df.apply(check_no_intersection, axis=1)]
print(result_df)

输出结果

transaction_id A_Item1 A_Item2 A_Item3 B_Item1 B_Item2 B_Item3
1               2   bread    None    None    soup     egg    None
2               5    None    None    None    None    None    None

逻辑说明

  • 用dropna()过滤空值后转成集合,通过集合交集运算判断是否有共同商品
  • 交集长度为0时,说明两系统无重叠商品,自动覆盖一方无商品的场景
  • 交易ID1因集合交集包含coffee,会被过滤

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 08:15:32