在第二个数据帧的列中查找字符串的所有匹配项并返回相邻行中的匹配项

时间:2020-12-19 20:29:39

标签: python python-3.x pandas dataframe

我有两个数据框,df1['Keyword']df2['Description'] 我试图找到在列中找到的每个字符串实例在 df1['Keyword'] 中出现在 df2['Description'] 中,并返回 df2 中相邻列中匹配的字符串。

期望输出

df1['Keyword']      df2['Description']               df2['Match1']    df2['Match 2']   df3['Match 3']
apples              apples are tasty                 apples
bananas             apples and bananas are tasty     apples           bananas
oranges             oranges, lemons, apples          oranges          lemons           apples
lemons              cucumber

(我在此处标记了匹配列,但它们可以命名为任何名称)。

我尝试过的:

df2['Match'] = df2['Description'].apply(lambda x: lookup(x, df1['Keyword']))

这让我完成了大部分工作,但它只提取了它在 df2['Description'] 中匹配的第一个关键字,并将其放置在一个名为 ['Match'] 的新列中,而我需要找到每一个匹配(最好是完全匹配)。

感谢您的帮助,刚开始学习。

1 个答案:

答案 0 :(得分:1)

你可以这样做:

regex = r'|'.join(df1.Keyword)
df = pd.concat([df1, df2,
                (pd.DataFrame(df2.Description
                                 .str.findall(regex).to_list()))],
               axis='columns').fillna('')

结果:

   Keyword                   Description        0        1       2
0   apples              apples are tasty   apples                 
1  bananas  apples and bananas are tasty   apples  bananas        
2  oranges       oranges, lemons, apples  oranges   lemons  apples
3   lemons                      cucumber