python-3.x - 如何将函数应用于包含字符串的熊猫数据框列?
问题描述
我打开一个包含国家/地区列的 CSV 文件。
我想创建一个包含该国家 ISO3 代码的新列。
我可以通过安装来做到这一点
import country_converter as coco
它的工作方式如下:
coco.convert('Afghanistan')
返回
AFG
我现在想创建一个新列并将该功能应用于我所有的国家/地区以获得相应的 ISO3 代码。
我尝试通过以下方式执行此操作:
df['CODE'] = coco.convert(df['Country'])
所有这一切都是转换第一个国家代码 AFG 并将其添加到所有国家。
例子:
Country Date Value CODE
0 Afghanistan 2020-03-12 7 AFG
1 Afghanistan 2020-03-11 7 AFG
2 Afghanistan 2020-03-10 5 AFG
3 Afghanistan 2020-03-09 4 AFG
4 Afghanistan 2020-03-08 4 AFG
5 Afghanistan 2020-03-07 1 AFG
6 Afghanistan 2020-03-06 1 AFG
7 Afghanistan 2020-03-05 1 AFG
8 Afghanistan 2020-03-04 1 AFG
9 Afghanistan 2020-03-03 1 AFG
10 Afghanistan 2020-03-02 1 AFG
11 Afghanistan 2020-03-01 1 AFG
12 Afghanistan 2020-02-29 1 AFG
13 Afghanistan 2020-02-28 1 AFG
14 Afghanistan 2020-02-27 1 AFG
15 Afghanistan 2020-02-26 1 AFG
16 Afghanistan 2020-02-25 1 AFG
17 Afghanistan 2020-02-24 1 AFG
18 Afghanistan 2020-02-23 0 AFG
19 Afghanistan 2020-02-22 0 AFG
20 Afghanistan 2020-02-21 0 AFG
21 Afghanistan 2020-02-20 0 AFG
22 Afghanistan 2020-02-19 0 AFG
23 Afghanistan 2020-02-18 0 AFG
24 Afghanistan 2020-02-17 0 AFG
25 Afghanistan 2020-02-16 0 AFG
26 Afghanistan 2020-02-15 0 AFG
27 Afghanistan 2020-02-14 0 AFG
28 Afghanistan 2020-02-13 0 AFG
29 Afghanistan 2020-02-12 0 AFG
... ... ... ... ...
20676 Vietnam 2020-02-20 16 AFG
20677 Vietnam 2020-02-19 16 AFG
20678 Vietnam 2020-02-18 16 AFG
20679 Vietnam 2020-02-17 16 AFG
20680 Vietnam 2020-02-16 16 AFG
20681 Vietnam 2020-02-15 16 AFG
20682 Vietnam 2020-02-14 16 AFG
20683 Vietnam 2020-02-13 16 AFG
20684 Vietnam 2020-02-12 15 AFG
20685 Vietnam 2020-02-11 15 AFG
20686 Vietnam 2020-02-10 14 AFG
20687 Vietnam 2020-02-09 13 AFG
20688 Vietnam 2020-02-08 13 AFG
20689 Vietnam 2020-02-07 10 AFG
20690 Vietnam 2020-02-06 10 AFG
20691 Vietnam 2020-02-05 8 AFG
20692 Vietnam 2020-02-04 8 AFG
20693 Vietnam 2020-02-03 8 AFG
20694 Vietnam 2020-02-02 6 AFG
20695 Vietnam 2020-02-01 6 AFG
20696 Vietnam 2020-01-31 2 AFG
20697 Vietnam 2020-01-30 2 AFG
20698 Vietnam 2020-01-29 2 AFG
20699 Vietnam 2020-01-28 2 AFG
20700 Vietnam 2020-01-27 2 AFG
20701 Vietnam 2020-01-26 2 AFG
20702 Vietnam 2020-01-25 2 AFG
20703 Vietnam 2020-01-24 2 AFG
20704 Vietnam 2020-01-23 2 AFG
20705 Vietnam 2020-01-22 0 AFG
[20706 行 x 4 列]
我也试过:
df['CODE'] = df['Country'].apply(coco.convert)
但这只是关闭了我的内核。
我该怎么做呢?
解决方案
您可以尝试GroupBy.transform
为每组应用功能Country
,想法是每组只运行一次功能以提高速度:
df['CODE'] = df.groupby('Country')['Country'].transform(coco.convert)
您apply
为我工作的解决方案也很慢:
df['CODE'] = df['Country'].apply(coco.convert)
性能:
In [19]: %timeit df.groupby('Country')['Country'].transform(coco.convert)
60.2 ms ± 4.08 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
In [20]: %timeit df['Country'].apply(coco.convert)
1.2 s ± 6.05 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)