首页 > 解决方案 > 如何测试字符串包含列表中的元素并通过 Pandas 将目标元素分配给另一列

问题描述

我有一个列出一些公司名称的单列列表。其中一些名称包含国家名称(例如,“China A1”中的“China”,“C1 in Finland”中的“Finland”)。我想根据公司名称和由国家名称组成的预定义列表来提取他们所属的国家。

原始数据框df显示如下

    Company name    Country
0   China A1        
1   Australia-A2        
2   Belgium_C1      
3   C1  in  Finland
4   D1  of  Greece
5   E2  for Pakistan

目前,我只能想出一个低效的方法。这是我的代码:

country_list = ['China','America','Greece','Pakistan','Finland','Belgium','Japan','British','Australia']
for t in country_list:
    df.loc[df['company name'].contains(t),'country']=t

结果显示像

    Company name    Country
0   China A1        China
1   Australia-A2    Australia   
2   Belgium_C1      Belgium
3   C1  in  Finland Finland
4   D1  of  Greece  Greece
5   E2  for Pakistan Pakistan

我认为当 country_list 包含大量元素时,即国家,通过循环方法会很耗时。有没有更简单的方法来解决我的问题?

标签: pythonstringpandaspython-2.7dataframe

解决方案


这是一种使用方法str.extract

df['Country'] = df['Company name'].str.extract('('+'|'.join(country_list)+')')

       Company name    Country
0          China A1      China
1      Australia-A2  Australia
2        Belgium_C1    Belgium
3   C1  in  Finland    Finland
4    D1  of  Greece     Greece
5  E2  for Pakistan   Pakistan

推荐阅读