Python 3.x 如何基于str.contains()合并两个不同的数据框列

Python 3.x 如何基于str.contains()合并两个不同的数据框列,python-3.x,pandas,dataframe,comparison,Python 3.x,Pandas,Dataframe,Comparison,我有一个叫做df_公司的数据框架 Òutput: company brand 0 VW-Konzern volkswagen 1 VW-Konzern audi 2 VW-Konzern bentley 3 VW-Konzern bugatti 4 VW-Konzern lamborghini 在下一步中,我通过一些字符串格式在for循环中接收两个字符串。之后,我尝试检查“companyName”字符串是否包含在数据框“df_companys”

我有一个叫做df_公司的数据框架

Òutput: 
    company     brand 
0   VW-Konzern  volkswagen
1   VW-Konzern  audi
2   VW-Konzern  bentley
3   VW-Konzern  bugatti
4   VW-Konzern  lamborghini
在下一步中,我通过一些字符串格式在for循环中接收两个字符串。之后,我尝试检查“companyName”字符串是否包含在数据框“df_companys”的“brand”列中

如果是,则将数据框中的logo_url字符串添加到“image_url”列中

for image in images:
    companyName = image['alt'].lower().split(' ', 1)[0]
    logo_url = image['src']

    df_companies['image_url'] = np.where(df_companies['brand'].str.contains(companyName), logo_url, 'other')
到目前为止,这适用于第一行。对于其余行,它只输入上面定义的字符串“other”

Output: 
        company     brand       image_url
0       VW-Konzern  volkswagen  https://imgr.volkswagen.png
1       VW-Konzern  audi        Other
2       VW-Konzern  bentley     Other
3       VW-Konzern  bugatti     Other
4       VW-Konzern  lamborghini Other
我希望实现以下输出:

Output: 
        company     brand       image_url
0       VW-Konzern  volkswagen  https://imgr.volkswagen.png
1       VW-Konzern  audi        https://imgr.audi.png
2       VW-Konzern  bentley     https://imgr.bentley.png
3       VW-Konzern  bugatti     https://imgr.audi.png
4       VW-Konzern  lamborghini https://imgr.audi.png
问题是“companyName”字符串和数据框“df_companys”的“brand”列中的字符串仅部分匹配,因此我无法使用公共合并函数

有没有办法解决这个问题

提前感谢您的帮助

您可以在str.contains方法中使用regex=True&即使部分名称也应该匹配。举例如下

df['image_url'] = np.where(df['brand'].str.contains('au' , regex=True), 'logo_url', 'other')
输出我只是使用了文本logo\uURL而不是url

company     brand           image_url
VW-Konzern  volkswagen      other
VW-Konzern  audi            logo_url
VW-Konzern  bentley         other
VW-Konzern  bugatti         other
VW-Konzern  lamborghini     other

我可以找到解决办法。我不得不把df_companys['image_url']放入np的else条件中,而不是'other'

之后,我得到了预期的输出:

Output:
    company     brand       image_url
0   VW-Konzern  volkswagen  https://imgr1.auto-motor-und-sport.de/Volkswagen-Logo-brandtreeIndexSmall-f4ae98d2-941118.jpg
1   VW-Konzern  audi        https://imgr1.auto-motor-und-sport.de/Audi-Logo-Neu-02-2019-brandtreeIndexSmall-44d434cb-1430808.jpg
2   VW-Konzern  bentley     https://imgr1.auto-motor-und-sport.de/Bentley-Logo-brandtreeIndexSmall-41a61902-702423.jpg
3   VW-Konzern  bugatti     https://imgr1.auto-motor-und-sport.de/Bugatti-Logo-brandtreeIndexSmall-252888c-946200.jpg
4   VW-Konzern  lamborghini https://imgr1.auto-motor-und-sport.de/Lamborghini-Logo-brandtreeIndexSmall-df88a8a3-945695.jpg 

您的示例不清楚,在您的预期输出中,我在品牌名称中没有看到公司名称,除了vw,这部分只做了一次:df_companys['image_url']=np.wheredf_companys['brand'].str.containscompanyName,logo_url,'other',我想知道如何为我收到的每个'companyName'字符串执行此操作。另一个例子:companyName=mercedes“品牌”列中的原始数据框中的值是:mercedes-benz,那么如何将其合并在一起?这不起作用,因为最后一家公司将覆盖其他公司不属于该公司的所有徽标网站。您可以尝试按公司对数据帧进行子集划分,应用更改,然后将其连接回新的数据帧。如果您可以提供您拥有的所有companyName值,我们可以对其进行双重检查。
Output:
    company     brand       image_url
0   VW-Konzern  volkswagen  https://imgr1.auto-motor-und-sport.de/Volkswagen-Logo-brandtreeIndexSmall-f4ae98d2-941118.jpg
1   VW-Konzern  audi        https://imgr1.auto-motor-und-sport.de/Audi-Logo-Neu-02-2019-brandtreeIndexSmall-44d434cb-1430808.jpg
2   VW-Konzern  bentley     https://imgr1.auto-motor-und-sport.de/Bentley-Logo-brandtreeIndexSmall-41a61902-702423.jpg
3   VW-Konzern  bugatti     https://imgr1.auto-motor-und-sport.de/Bugatti-Logo-brandtreeIndexSmall-252888c-946200.jpg
4   VW-Konzern  lamborghini https://imgr1.auto-motor-und-sport.de/Lamborghini-Logo-brandtreeIndexSmall-df88a8a3-945695.jpg