你几乎就在那里,你只是没有正确的语法,它应该是:
df[(df.str.contains("b") == True) & (df.str.contains("a") == False)]
如果您有很多条件要应用,那么另一种可能更清洁的方法是将过滤器与reduce或循环链接在一起:
from functools import reduce filters = [("a", False), ("b", True)] reduce(lambda df, f: df[df.str.contains(f[0]) == f[1]], filters, df) #outputs b2
或者:
>>> ts.str.contains('b') & ~ts.str.contains('a') 0 False 1 False 2 True 3 False dtype: bool
或使用正则表达式:
>>> ts.str.contains('^[^a]*b[^a]*$') 0 False 1 False 2 True 3 False dtype: bool