Pandas实现双DataFrame字符串子串匹配并返回匹配值至新列
Pandas 长文本匹配子串实现方案
核心思路是将df1中所有待匹配的子串拼接为正则或匹配模式,直接从df2的长文本列中提取命中的子串,同时自动处理未匹配场景返回空值。
完整实现代码
import pandas as pd import re # 示例数据构造 df1 = {'subst': ['LONDON BRIDGE', 'TRUE GRIT', 'FIVE TIMES FIVE', 'THREE TIME DEAD', 'TRUE IS NOT', 'OH NO', 'LEBRON JAMES']} df2 = {'strng': ['LEBRON JAMES SCORED 20', 'THREE TIMES DEAD JOHNY WAS HELL OF THE COOK', 'TRUE IS NOT WHAT YOU THINK', 'FIVE TIMES FIVE IS NOT WHAT LEBRON SCORED']} df1 = pd.DataFrame(df1) df2 = pd.DataFrame(df2) # 构造正则匹配模式,re.escape处理子串中的特殊正则字符避免匹配异常 match_pattern = '|'.join(map(re.escape, df1['subst'])) # 提取匹配结果到新列,expand=False返回Series直接赋值 df2['match_df1'] = df2['strng'].str.extract(f'({match_pattern})', expand=False)
注意事项
你提供的示例中df1的THREE TIME DEAD为单数形式,而df2对应长文本中为THREE TIMES DEAD复数形式,如需要该条匹配成功,修改df1中的子串为复数形式即可得到你给出的预期结果。
执行代码后输出df2即可得到符合要求的结果。
内容的提问来源于stack exchange,提问作者Raganosis
相关产品推荐
相关产品推荐

