如何基于DataFrame2的词库为DataFrame1新增单词匹配布尔值列
实现方案
前置说明
我们先统一约定列名,你可以根据自己的实际表结构替换:
- DataFrame1(简称df1)中存储逗号分隔单词的列名为
word_str - DataFrame2(简称df2)中存储单个单词的列名为
single_word - 新增的结果列名为
has_target
核心实现代码
两种方案可选,优先推荐向量化方案,大数据量下性能优势明显:
方案1:向量化操作(推荐,适合万级以上数据量)
import pandas as pd # 1. 把df2的单词转成集合,成员查询效率比列表高数十倍 target_words = set(df2['single_word']) # 2. 拆分字符串匹配,直接生成1/0结果列 df1['has_target'] = df1['word_str'].str.split(',\s*', expand=True)\ .isin(target_words)\ .any(axis=1)\ .astype(int)
方案2:apply遍历(写法直观,适合中小数据量)
target_words = set(df2['single_word']) df1['has_target'] = df1['word_str'].apply( lambda s: 1 if any(word.strip() in target_words for word in s.split(',')) else 0 )
逻辑说明
- 转集合的目的是把单词查询的时间复杂度从O(n)降到O(1),数据量越大性能收益越高
- 拆分字符串时用
,\s*匹配逗号加任意数量空格,兼容示例中逗号后带空格的格式,避免空格导致匹配失败 any(axis=1)只要该行有任意一个单词匹配成功就返回True,转成int后自动变为1,无匹配则为0,完全符合需求规则
注意事项
如果df1的word_str列存在空值,需要先做空值处理避免报错,在执行上述代码前加一行:df1['word_str'] = df1['word_str'].fillna('')
内容的提问来源于stack exchange,提问作者ramjfb
相关产品推荐
相关产品推荐

