python - 如何测试字符串包含列表中的元素并通过 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 包含大量元素时,即国家,通过循环方法会很耗时。有没有更简单的方法来解决我的问题?
解决方案
这是一种使用方法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
推荐阅读
- java - 如何使用 nginx 代理更改主机 URL
- flutter - Flutter mobile_number 包中的异常
- react-native - tfjs-models 通用句子编码器的 embed() 仅在物理设备上中断
- here-api - 无法使用 HERE 网络定位 v2 API(当 v1 工作时)
- reactjs - 当我使用 ReactQuery useMutation 创建新组时如何更新组数组
- javascript - 从孩子改变父母的状态,但孩子的道具不更新
- javascript - mongoose 中的自定义验证器由于某种原因未申请
- jekyll - Jekylls 相同日期的默认帖子顺序是什么?
- refactoring - clion在提取方法时可以使用箭头(->)而不是点(。)来访问结构成员吗?
- javascript - 如何通过 React JS 向 sweetalert2 的对话框添加加载方法?