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

如何用子串DataFrame对字符串DataFrame分类并生成布尔列?

Pandas多子串批量匹配解决方案

核心思路

把第二个DataFrame里的所有子串整合成可批量匹配的规则,要么用正则一次性匹配,要么逐行检查子串存在性,最终生成布尔结果列。

方法一:正则合并匹配(高效推荐)

通过正则表达式的|逻辑实现多子串同时匹配,适合大数据量场景:

  • 提取子串列并拼接成正则匹配模式
  • 调用str.contains()完成批量检查
import pandas as pd

# 构造示例数据
df1 = pd.DataFrame({"a": ["a", "abcd", "dabcd", "qwerty", "oppoupou"]})
df2 = pd.DataFrame({"substrings": ["abc", "qw", "qaz"]})

# 生成匹配模式:用|分隔所有子串
match_pattern = "|".join(df2["substrings"])

# 添加布尔结果列
df1["contains_any_sub"] = df1["a"].str.contains(match_pattern)

执行后df1的结果:

acontains_any_sub
aFalse
abcdTrue
dabcdTrue
qwertyTrue
oppoupouFalse

方法二:逐行遍历匹配(直观无正则干扰)

如果子串包含正则特殊字符(如.、*),或者不想用正则,可通过逐行检查实现:

import pandas as pd

df1 = pd.DataFrame({"a": ["a", "abcd", "dabcd", "qwerty", "oppoupou"]})
df2 = pd.DataFrame({"substrings": ["abc", "qw", "qaz"]})

# 定义检查函数
def has_any_substring(text, substr_list):
    return any(sub in text for sub in substr_list)

# 应用函数生成布尔列
df1["contains_any_sub"] = df1["a"].apply(has_any_substring, substr_list=df2["substrings"].tolist())

特殊场景处理

如果子串包含正则特殊字符(如$、.),方法一需要先转义字符,避免匹配异常:

import re
import pandas as pd

df2 = pd.DataFrame({"substrings": ["abc.", "qw*", "qaz"]})
# 转义每个子串的特殊正则字符
match_pattern = "|".join(re.escape(sub) for sub in df2["substrings"])
df1["contains_any_sub"] = df1["a"].str.contains(match_pattern)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 09:15:59