Pandas判断DataFrame列表类型列的所有元素是否均存在于指定列表中
解法
首先把参考列表itemset转为集合类型,利用集合O(1)的查询效率提升整体性能,有两种常用实现方式:
方式1:搭配all()函数(性能更优)
all()遇到不符合条件的元素会提前终止校验,不需要遍历整个列表,适合antecedent元素较多的场景:
# 先转集合,避免每次遍历列表查询,大幅提升性能 itemset_set = set(itemset) # 逐行做全包含校验 df_itemset['is_all_in'] = df_itemset['antecedent'].map(lambda x: all(item in itemset_set for item in x))
方式2:集合子集判断(写法更简洁)
直接调用集合内置的子集校验方法,代码可读性更高:
itemset_set = set(itemset) df_itemset['is_all_in'] = df_itemset['antecedent'].map(lambda x: set(x).issubset(itemset_set))
效果验证
两种写法对你给出的示例返回结果完全符合预期:
- 输入
['Investimento Fundos_commodities', 'Investimento Fundos']→ 返回False - 输入
['Investimento Fundos_commodities', 'Investimento CDB']→ 返回True
内容的提问来源于stack exchange,提问作者gustavolq
相关产品推荐
相关产品推荐

