如何在Pandas列中获取与指定列表的匹配值?
解决方案
完整代码实现
import pandas as pd # 构造示例数据 df = pd.DataFrame({ 'meta': [ ['Home', 'grocery', 'cake'], ['Home', 'grocery', 'Biscuit', 'Oreo'] ] }) # 指定匹配列表 terms = ['cake', 'biscuit'] # 定义匹配函数:提取meta列表中与terms匹配的元素(不区分大小写) def get_matches(lst, target_terms): # 将目标列表转为小写集合,提升匹配效率 term_set = set(t.lower() for t in target_terms) # 遍历meta元素,筛选匹配项并统一为小写,去重后返回 return list({item.lower() for item in lst if item.lower() in term_set}) # 生成match value列 df['match value'] = df['meta'].apply(get_matches, target_terms=terms) # 生成result列:判断是否存在匹配值 df['result'] = df['match value'].apply(lambda x: len(x) > 0)
运行结果
| meta | result | match value |
|---|---|---|
| ['Home', 'grocery', 'cake'] | True | ['cake'] |
| ['Home', 'grocery', 'Biscuit', 'Oreo'] | True | ['biscuit'] |
关键逻辑说明
- 大小写兼容:通过将
terms转为小写集合,同时把meta中的元素转小写后匹配,解决原数据大小写不一致的问题,且返回结果统一为小写(符合需求示例)。 - 高效匹配:使用集合的
in操作(时间复杂度O(1))替代列表匹配(O(n)),在terms列表较大时性能更优。 - 去重处理:通过集合推导式自动去重,避免
meta列表中重复出现同一匹配项导致结果冗余。
内容的提问来源于stack exchange,提问作者pheonix
相关产品推荐
相关产品推荐

