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

Python pandas 检查文本列是否含指定多字符串 生成对应取值的新列

正确实现代码

使用str.contains()方法配合正则的或逻辑,结合np.where逐行判断生成目标列:

import numpy as np

# 待匹配关键词列表
match_keys = ['LOB','LIFE','SHRINKER']
# 拼接为正则匹配模式,| 代表匹配任意一个关键词
match_pattern = '|'.join(match_keys)

# 生成新列,满足条件赋值999,否则赋值0
df['rule1'] = np.where(
    df['textcolumn'].str.contains(match_pattern, case=True, na=False),
    999,
    0
)

参数说明

  • case=True:匹配时区分大小写,如果你需要忽略大小写可修改为case=False
  • na=False:若文本列存在空值,空值默认按「不匹配」处理,避免返回NaN导致赋值异常

若你的匹配关键词包含.、*、?这类正则特殊字符,拼接pattern时需要对关键词做转义处理,写法为:

import re
match_pattern = '|'.join(re.escape(key) for key in match_keys)

原写法错误原因

你之前的代码使用any()是对整个文本列做全局判断,只会返回一个全局的True/False,最终整列要么全是999要么全是0,无法实现逐行判断的效果。

替代写法(无需引入numpy)

如果你不想额外引入numpy依赖,也可以用pandas自带的mask方法实现:

match_keys = ['LOB','LIFE','SHRINKER']
match_pattern = '|'.join(match_keys)

df['rule1'] = 0
df['rule1'] = df['rule1'].mask(df['textcolumn'].str.contains(match_pattern, case=True, na=False), 999)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:15:04