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

Python判断df2取值是否存在于df1字符串列并生成匹配标记

解决方案

依赖说明

使用Pandas库完成DataFrame处理,首先导入依赖:

import pandas as pd
import re # 查找值包含正则特殊字符时做转义需要

示例数据构造

# 构造df1
df1 = pd.DataFrame({
    'some text': ['hello', 'world', 'my name is', 'nick']
})
# 构造df2
df2 = pd.DataFrame({
    'text to find': ['d', 'z', 'x', 'h']
})

场景1:按行对齐匹配(同序号行一一匹配)

仅判断df2第i行的查找值是否存在于df1第i行的文本中,适合两个DataFrame行数完全一致、按行对应匹配的场景:

df1['flag'] = df1.apply(
    lambda row: 1 if df2.loc[row.name, 'text to find'] in row['some text'] else 0,
    axis=1
)

场景2:全局匹配(df1每行匹配df2所有查找值)

只要df2的所有查找值中任意一个存在于df1当前行文本中就标记为1,是高频使用场景,推荐优先使用矢量化操作提高运行效率:

小数据量写法

find_list = df2['text to find'].tolist()
df1['flag'] = df1['some text'].apply(
    lambda x: 1 if any(key in x for key in find_list) else 0
)

大数据量高性能写法(推荐)

通过正则矢量化匹配,避免逐行apply,性能提升明显:

# 拼接正则匹配规则,re.escape避免查找值包含.、*、+等正则特殊字符时报错
pattern = '|'.join(re.escape(key) for key in df2['text to find'])
# 布尔匹配结果直接转0/1数值
df1['flag'] = df1['some text'].str.contains(pattern).astype(int)

示例运行结果

该场景下得到的df1如下:

some textflag
hello1
world1
my name is0
nick0

拓展:忽略大小写匹配

如果需要不区分大小写匹配,修改正则匹配参数即可:

pattern = '|'.join(re.escape(key) for key in df2['text to find'])
df1['flag'] = df1['some text'].str.contains(pattern, case=False).astype(int)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:24:02