如何筛选DataFrame中列值包含给定列表所有元素的行?
问题原因
你原有代码的逻辑错误在于:n in df['Column_To_Filter']是判断关键词是否存在于整个列的取值集合中,而非逐行校验关键词是否出现在当前行的文本里,因此无法实现需求。
实现方案
方案1:apply逐行校验(可读性最高)
直接对目标列的每行内容执行全关键词匹配校验:
list_to_check = ['yellow', 'sneaker'] # 逐行判断所有关键词都在当前行文本中 df_filtered = df[df['Column_To_Filter'].apply(lambda x: all(keyword in x for keyword in list_to_check))]
如果需要兼容大小写不敏感、非字符串值的场景,可以调整校验逻辑:
df_filtered = df[df['Column_To_Filter'].apply( lambda x: isinstance(x, str) and all(keyword.lower() in x.lower() for keyword in list_to_check) )]
方案2:str.contains拼接条件(性能更高,适合大数据量)
通过逐个生成关键词匹配掩码,再做逻辑与合并:
list_to_check = ['yellow', 'sneaker'] # 初始化第一个关键词的匹配掩码 match_mask = df['Column_To_Filter'].str.contains(list_to_check[0]) for keyword in list_to_check[1:]: # 叠加后续关键词的匹配要求,必须全部命中 match_mask &= df['Column_To_Filter'].str.contains(keyword) df_filtered = df[match_mask]
内容的提问来源于stack exchange,提问作者andre.fonta90
相关产品推荐
相关产品推荐

