Pandas如何按EMAIL、PRODUCT_ID、POST_CODE多条件删除DataFrame指定行
解决方案
你之前的写法默认基于全部字段判断重复,只要调整参数或使用反连接即可实现按指定字段过滤的需求,两种常用实现方式如下:
方法1:带来源标记的concat去重
给两个DataFrame加来源标识后合并,按指定的三个字段判断重复,去重后筛选原属于A的行即可:
# 给两个表新增临时来源标记 A['source'] = 'A' B['source'] = 'B' # 合并后按指定字段判重,删除所有存在重复的行 combined = pd.concat([A, B]).drop_duplicates(subset=["EMAIL", "PRODUCT_ID", "POST_CODE"], keep=False) # 筛选原属于A的记录,删除临时标记列 result = combined[combined['source'] == 'A'].drop(columns='source')
方法2:左连接反选(逻辑更直观)
用pandas左连接标记匹配状态,直接筛选出A中未和B匹配的行:
# 按指定字段左连接,新增匹配状态标记 merged = A.merge(B, on=["EMAIL", "PRODUCT_ID", "POST_CODE"], how="left", indicator=True) # 筛选仅在A中存在的行,删除临时标记列,保留A的原始字段 result = merged[merged['_merge'] == 'left_only'][A.columns]
两种方法输出的结果一致,均符合需求:
| PRODUCT_ID | POST_CODE | STORE_NAME | STORE_ID | |
|---|---|---|---|---|
| abc@gmail.com | 4311 | 3000 | STR_2 | 1440 |
| pqr@gmail.com | 4311 | 3000 | STR_3 | 1300 |
内容的提问来源于stack exchange,提问作者Mithun Manohar
相关产品推荐
相关产品推荐

