Python实现DataFrame一对多合并:按df1字符串包含df2关键词规则匹配
解决方案
问题原因
你之前使用的str.extract()方法仅会返回每个字符串第一个匹配的捕获组结果,因此单个行匹配到多个关键词时只能保留一条记录,无法实现需要的一对多展开效果。
调整后完整代码
import pandas as pd import re import numpy as np # 统一转小写 df1['words'] = df1['words'].str.lower() df2['keywords'] = df2['keywords'].str.lower() # 构建匹配规则 pat = '|'.join([re.escape(x) for x in df2.keywords]) # 提取所有匹配的关键词,返回列表,空列表替换为[np.nan]避免炸行丢失无匹配的记录 df1['keywords'] = df1['words'].str.findall(pat).apply(lambda x: x if x else [np.nan]) # 把关键词列表拆分为多行,每个关键词对应一条独立记录 df1_exploded = df1.explode('keywords', ignore_index=True) # 左连接df2获取对应code字段 result = pd.merge(df1_exploded, df2, on='keywords', how='left')
运行上述代码得到的result和你预期的输出完全一致。
内容的提问来源于stack exchange,提问作者ah bon
相关产品推荐
相关产品推荐

