如何判断DataFrame列是否包含另一DataFrame列文本并新增匹配列?
解决方案:可扩展的DataFrame关键词匹配方案
这里提供两种无需修改核心代码、就能适配关键词新增/修改的实现方式:
方法1:正则提取+映射(高效推荐)
通过正则批量匹配所有关键词,再用映射表关联分类,适合数据量较大的场景:
import pandas as pd import re # 初始化示例数据 df1 = pd.DataFrame({ "Problem": ["我收到了错误的商品", "我支付超额了", "地址问题", "我的配送延迟了"], "Region": ["A", "A", "B", "C"] }) df2 = pd.DataFrame({ "Key": ["wrong", "pay", "delay"], "Category": ["Accuracy", "Pay related", "Delay related"] }) # 1. 生成关键词到分类的映射字典 key_to_category = df2.set_index("Key")["Category"].to_dict() # 2. 拼接所有关键词为正则匹配模式 pattern = "|".join(df2["Key"]) # 3. 提取匹配的关键词并映射到分类 df1["Category"] = df1["Problem"].str.extract(f"({pattern})", flags=re.IGNORECASE)[0].map(key_to_category) # 输出结果 print(df1)
说明:
- 新增/修改关键词时,直接更新DF2即可,无需改动代码逻辑
flags=re.IGNORECASE用于忽略大小写匹配,不需要可直接移除- 若单条Problem匹配多个关键词,会取DF2中先出现的关键词对应的分类
方法2:自定义函数+apply(灵活直观)
如果需要自定义匹配规则(比如模糊匹配、优先级排序),可以用这种方式:
import pandas as pd # 初始化示例数据(同上,省略) # 构建关键词-分类映射 key_category_map = df2.set_index("Key")["Category"].to_dict() def match_category(problem_text): for key, category in key_category_map.items(): if key in problem_text: return category return None # 给每条Problem匹配分类 df1["Category"] = df1["Problem"].apply(match_category) # 输出结果 print(df1)
说明:
- 可以在
match_category函数里扩展逻辑,比如用re.search实现复杂正则匹配 - 调整DF2的行顺序,就能改变关键词的匹配优先级
内容的提问来源于stack exchange,提问作者puja
相关产品推荐
相关产品推荐

