Python pandas判断字符串是否包含全部指定子串 支持AND/OR逻辑查询
文本多匹配需求实现方案
OR匹配(任意子串存在即返回True)
你当前写的代码本身就满足OR逻辑,只要文本中包含任意一个指定子串就返回True:
df['D'] = df['CT'].str.contains("X|Y|Z|A", case = False)
AND匹配(所有子串都存在才返回True)
要实现全包含的逻辑,可以用以下两种写法:
- 写法1:子串数量少的场景,直接拼接条件
df['D'] = (df['CT'].str.contains("X", case=False) & df['CT'].str.contains("Y", case=False) & df['CT'].str.contains("Z", case=False) & df['CT'].str.contains("A", case=False))
- 写法2:子串数量多或需要动态传参的场景,用通用封装
# 定义要匹配的关键词列表 required_keywords = ["X", "Y", "Z", "A"] # 逐个判断所有关键词是否都存在于文本中 df['D'] = df['CT'].apply(lambda s: all(keyword.lower() in s.lower() for keyword in required_keywords))
分类需求实现示例
针对你提到的同时匹配Issue、internet、speed后归类到指定分组的需求,实现代码如下:
def classify_text(text): text_lower = text.lower() # 匹配互联网速度问题分组 if all(k in text_lower for k in ["issue", "internet", "speed"]): return "internet speed issue" # 可在此处扩展其他分组的判断逻辑 else: return "其他" df['group'] = df['CT'].apply(classify_text)
内容的提问来源于stack exchange,提问作者DarshanC
相关产品推荐
相关产品推荐

