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

基于另一个DataFrame的多列匹配标记DataFrame行

为Pandas DataFrame添加存在性标记的高效实现方式

针对你的需求——给df1新增Paired列,标记该行的A、B列组合是否存在于df2中,这里提供几种简洁且高效的实现方案:

方案一:使用merge(最简洁的向量化实现)

利用Pandas的merge方法结合indicator参数,一步完成标记:

import pandas as pd

# 构造输入数据
df1 = pd.DataFrame({'A': [1,2,3,4], 'B': [9,8,7,6]})
df2 = pd.DataFrame({'A': [2,4], 'B': [8,6]})

# 左连接并生成标记列
df1 = df1.merge(df2, on=['A', 'B'], how='left', indicator='Paired')
# 将标记转换为布尔值:'both'表示组合同时存在于两个DataFrame
df1['Paired'] = df1['Paired'] == 'both'

执行后df1的结果如下:

ABPaired
19False
28True
37False
46True

这种方法是Pandas原生的向量化操作,效率极高,代码也最简洁,适合绝大多数场景。

方案二:利用集合查询(大数据量下更高效)

如果数据集规模极大,可先将df2的A、B组合转换为集合(集合查询时间复杂度为O(1)),再批量判断:

# 将df2的A、B组合转为集合
pair_set = set(df2.itertuples(index=False, name=None))
# 批量判断df1的每行组合是否在集合中
df1['Paired'] = df1.itertuples(index=False, name=None).isin(pair_set)

这种方法避免了DataFrame的连接操作,在超大规模数据下性能会略优于merge,代码也相对简洁。

补充说明

因为你提到两个DataFrame的A、B列组合均唯一,所以以上两种方案都不会出现重复匹配的问题,结果完全可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 20:03:21