基于字符串条件筛选含列表列的DataFrame行
解决方案
直接用下面的代码实现你的需求,一行搞定核心筛选逻辑:
rez = dataframe[dataframe[column].apply(lambda x: ("garlic" in x) and ("peas" in x) and any("onion" in item for item in x))]
要是需要更灵活的规则配置(比如后续要加更多配料或调整匹配方式),可以把条件拆出来维护:
# 定义每个配料的匹配规则 match_rules = [ lambda ingredients: "garlic" in ingredients, # 精确匹配garlic lambda ingredients: "peas" in ingredients, # 精确匹配peas lambda ingredients: any("onion" in ing for ing in ingredients) # 匹配含onion子串的配料 ] # 筛选满足所有规则的行 rez = dataframe[dataframe[column].apply(lambda x: all(rule(x) for rule in match_rules))]
逻辑解释
- 用
all替代原代码的any:保证只有满足所有配料要求的行才会被保留,而不是只要沾到一个配料就选上 - 针对"onion"的特殊处理:遍历当前行的所有配料,只要有一个配料包含"onion"子串就符合条件
- 其他配料用精确匹配,确保行里确实存在该配料
内容的提问来源于stack exchange,提问作者LCh
相关产品推荐
相关产品推荐

