如何基于列表迭代使用Series.str.contains实现AND条件判断
动态生成Pandas Series多字符串包含检查条件
问题场景
给定Pandas Series:
import pandas as pd series = pd.Series(['ABC', 'AAABBB', 'BBBCCSSS', 'AABBCC'])
手动检查每个字符串是否同时包含A、B、C的代码是:
x = (series.str.contains('A')) & (series.str.contains('B')) & (series.str.contains('C'))
需求:通过动态列表(如items = ['A', 'B', 'C']或items = ['D', 'E', 'F', 'G'])自动生成上述布尔条件x,无需手动拼接每个contains语句。
解决方案
方法1:用DataFrame+all()批量判断
把每个字符的检查结果转成DataFrame,再逐行判断是否全部满足:
items = ['A', 'B', 'C'] # 生成每个字符对应的布尔Series,转成DataFrame后转置,每行对应原Series的一个元素 x = pd.DataFrame([series.str.contains(item) for item in items]).T.all(axis=1)
运行后x的结果和手动拼接的完全一致,且支持任意长度的items列表。
方法2:用reduce累积逻辑与操作
借助functools.reduce把多个布尔Series依次做逻辑与,模拟手动拼接&的过程:
from functools import reduce items = ['A', 'B', 'C'] # 初始值设为全True的Series,依次和每个字符的检查结果做逻辑与 x = reduce(lambda acc, char: acc & series.str.contains(char), items, pd.Series([True]*len(series)))
这种方法无需转DataFrame,直接在Series层面操作,效率更高。
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

