如何高效匹配pandas DataFrame列关键词并批量填充分类值
高效实现方案
核心采用pandas向量化操作替代逐行遍历,针对你提到的5000行主表、2000行唯一表的量级,可以实现毫秒级运算返回。
步骤1:生成有效关键词-分类映射
首先过滤df_unique中find列为空的无效条目,生成关键词到分类的映射字典:
import pandas as pd import numpy as np import re # 关键词含正则特殊字符时需要导入 # 过滤非空的关键词映射关系 keyword_map = df_unique.dropna(subset=['find']).set_index('find')['category'].to_dict()
步骤2:批量匹配填充分类
有两种常用的高效实现方式,按需选择即可:
方式1:逐关键词匹配(兼容性更强)
# 初始化分类列为空 df_master['category'] = np.nan # 遍历所有有效关键词做向量化匹配 for keyword, cate in keyword_map.items(): # case=False 表示不区分大小写,不需要可以删掉 df_master.loc[df_master['sentence'].str.contains(keyword, case=False, na=False), 'category'] = cate
方式2:正则一次匹配(效率更高)
如果不会出现多个关键词同时匹配同一句子的场景,可以用正则扫描一次完成匹配,效率更高:
# 按关键词长度倒序排列,避免短关键词被长关键词覆盖的问题 # 如果关键词含正则特殊字符,需要替换为:re.escape(k) for k in sorted(...) sorted_keywords = sorted(keyword_map.keys(), key=len, reverse=True) pattern = '|'.join(sorted_keywords) # 提取匹配到的关键词后映射为分类 df_master['category'] = df_master['sentence'].str.extract(f'({pattern})', expand=False).map(keyword_map)
两种方式输出的结果都和你需求的df_master_final完全一致。
内容的提问来源于stack exchange,提问作者Sunil
相关产品推荐
相关产品推荐

