Python 如何从另一个dataframe列的名称列表中检测dataframe列中的字符串
我试图找出一篇新闻文章是否包含我已经建立了一个列表作为数据框列的公司的特定名称。我有一个数据框,其中包含文章的文本作为一列,另一个数据框包含公司的名称。我希望搜索每篇文章文本,以检测列表中是否存在任何名称,并创建包含在文本中找到的公司名称的单独变量。有人建议我使用“合并”,但因为我没有公共标识符,所以不可能。我希望下面的例子能说明这个想法 第一个数据帧(文章): 指数 正文 1. 苹果决定推出新产品。。。。 2. 特斯拉是。。。 3. IBM正在派息。。。。。。 4. 亚马逊正在搬迁。。。。。 ...... ........ 你想要这个->Python 如何从另一个dataframe列的名称列表中检测dataframe列中的字符串,python,pandas,string,dataframe,Python,Pandas,String,Dataframe,我试图找出一篇新闻文章是否包含我已经建立了一个列表作为数据框列的公司的特定名称。我有一个数据框,其中包含文章的文本作为一列,另一个数据框包含公司的名称。我希望搜索每篇文章文本,以检测列表中是否存在任何名称,并创建包含在文本中找到的公司名称的单独变量。有人建议我使用“合并”,但因为我没有公共标识符,所以不可能。我希望下面的例子能说明这个想法 第一个数据帧(文章): 指数 正文 1. 苹果决定推出新产品。。。。 2. 特斯拉是。。。 3. IBM正在派息。。。。。。 4. 亚马逊正在搬迁。。。。。
pattern = r'(' + '|'.join(df1['Name'].to_list()) + ')'
df2['Text'] = df2['Text'].str.extract(pat= pattern)
print(df2)
我们的想法是创建一个具有多个or条件的正则表达式模式——在这里,对于这种情况,模式将如下所示-
'(BP|Tesla|Bank of America|Amazon|JP Morgan|Apple)'
输出->
Index Text
0 1 Apple
1 2 Tesla
2 3 NaN
3 4 Amazon
谢谢有没有一种方法可以搜索/提取特定的模式而不是一般的表达式?例如,我希望看到“苹果”中有大写字母,而不仅仅是一个“苹果”或“摩根大通”,而不仅仅是一个人的名字“摩根”。