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

基于列表搜索DataFrame并添加存在性标识列的实现方案问询

解决DataFrame新增匹配标记列的问题

没问题,这个需求用Pandas的矢量化操作就能高效实现,尤其适合你说的20k元素的大规模列表场景,完全不用写低效的逐行循环。

实现步骤:

首先,我们先还原你的示例数据和目标列表:

import pandas as pd

# 构建你的示例DataFrame
df = pd.DataFrame({
    'utid': [12342, 2345, 2122],
    'description': [
        'my name is 123 amrud and nitesh',
        'my name is anil',
        'my name is 1234 mohan'
    ]
})

# 你的目标名称集合(实际规模20k+元素)
target_names = {"mohan", "nitesh"}

接下来是核心处理逻辑,这里兼顾了效率和匹配准确性:

import re

# 将目标列表转换为正则匹配模式,用|分隔每个名称,同时转义特殊字符避免正则语法冲突
# 比如如果名称里有.、*这类字符,re.escape会自动转义,防止匹配出错
pattern = '|'.join(re.escape(name) for name in target_names)

# 新增foundornot列:用str.contains做矢量化匹配,再映射为你需要的文本标签
df['foundornot'] = df['description'].str.contains(
    pattern, 
    case=False,  # 不区分大小写,不需要的话可以删掉这个参数
    na=False     # 把缺失值标记为not found,按需调整
).map({True: 'found', False: 'not found'})

最终输出结果:

运行上面的代码后,你的DataFrame就会变成:

utid                     description foundornot
0  12342  my name is 123 amrud and nitesh       found
1   2345                my name is anil   not found
2   2122          my name is 1234 mohan       found

为什么这么做?

  • 效率优先:str.contains是Pandas的矢量化操作,比逐行循环快几十倍,完全能hold住20k元素的列表和大规模DataFrame
  • 准确性保障:re.escape处理目标名称,避免因为名称里的特殊正则字符导致匹配错误
  • 灵活调整:可以通过修改case参数控制是否区分大小写,na参数处理缺失值情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:39:29