如何在Pandas的列中遍历列表以查找匹配项?
问题描述
现有如下Pandas数据:
| meta |
|---|
| ['Home', 'grocery', 'cake'] |
| ['Home', 'grocery', 'Biscuit', 'Oreo'] |
需要从术语列表 ['cake', 'biscuit'] 中查找匹配,判断每行meta列的列表是否包含任意一个术语(不区分大小写),最终输出新增Column B列的结果:
| meta | Column B |
|---|---|
| ['Home', 'grocery', 'cake'] | True |
| ['Home', 'grocery', 'Biscuit', 'Oreo'] | True |
解决方案
可以通过apply结合集合的交集操作实现,同时统一大小写忽略大小写差异:
import pandas as pd # 构造原始数据 data = { 'meta': [['Home', 'grocery', 'cake'], ['Home', 'grocery', 'Biscuit', 'Oreo']] } df = pd.DataFrame(data) # 定义术语集合,统一转为小写提升查找效率 terms = {'cake', 'biscuit'} # 新增Column B列,判断是否存在匹配项 df['Column B'] = df['meta'].apply(lambda x: any(item.lower() in terms for item in x)) print(df)
代码说明
- 将术语列表转为小写集合,集合的成员查找效率远高于列表;
- 用
apply遍历每行的meta列表,对每个元素转小写后检查是否在术语集合内; any()函数只要有一个元素匹配就返回True,无匹配则返回False。
运行代码后即可得到期望的结果。
内容的提问来源于stack exchange,提问作者pheonix
相关产品推荐
相关产品推荐

