如何基于两个DataFrame共有的Date、About列匹配值过滤DataFrame A的行
实现方案
你可以通过以下两种高效方法实现双字段同时匹配的过滤需求:
方法1:使用merge内连接(推荐,大数据量下性能更优)
利用Pandas merge的内连接特性,直接取两个DataFrame中Date和About同时匹配的行,且会完整保留DataFrame A的所有原有字段:
# 仅取B的两个匹配字段做内连接,避免多余字段混入结果 df_A = df_A.merge(df_B[['Date', 'About']], on=['Date', 'About'], how='inner')
方法2:元组集合匹配
将两个字段组合为元组作为唯一匹配键,判断A的行键是否存在于B的键集合中:
# 先构建B的双字段匹配键集合 match_keys = set(zip(df_B['Date'], df_B['About'])) # 过滤A中符合条件的行 df_A = df_A[df_A.apply(lambda row: (row['Date'], row['About']) in match_keys, axis=1)]
原代码问题说明
你之前的写法仅校验了Date字段是否在B中存在,没有关联校验About字段,所以会出现Date匹配、但About不匹配的无效行被保留的问题,比如示例中24-10-2020对应的Mare行,Date存在于B中,但B对应日期的About为Koen,不符合要求所以会被上述两种方法正确过滤。
内容的提问来源于stack exchange,提问作者Suze Gort
相关产品推荐
相关产品推荐

