我做到了:
import pandas as pd
data = pd.read_csv(...
在这个data
文件(数据帧(中,我现在有一个列Country
,列出了世界上所有(或几乎(的国家。
除此之外,我还有一个名为eu
的列表(我的意思是type(eu)==list
就是True
(,列出了所有欧洲国家:eu = ["Albania","Andorra",...]
现在,我想遍历我的data
文件的Country
列的元素,每次我找到一个欧洲国家(我的列表eu
中的一个元素(时,在相应的行中插入值"YES",一个新列,比如Europe
,首先在数据帧data
中创建。
我浏览了一些包含关键字iterrows
的帖子,但我不明白它在我的情况下是如何工作的。我从Python开始,肯定有一个简单的解决方案,但我找不到。
如有任何提示,不胜感激。
您只需要np.where
:
import numpy as np
data['IsEuropeanCountry'] = np.where(data['Country'].isin(eu), 'Yes', 'No')
例如,
>>> import pandas as pd
>>> import numpy as np
>>>
>>> eu = ['Greece', 'Germany']
>>>
>>> data = pd.DataFrame(
... [
... [1, 'Greece'],
... [2, 'Angola'],
... [3, 'Germany'],
... [4, 'USA']
... ],
... columns=['id', 'Country']
... )
>>> data
id Country
0 1 Greece
1 2 Angola
2 3 Germany
3 4 USA
>>>
>>> data['IsEuropeanCountry'] = np.where(data['Country'].isin(eu), 'Yes', 'No')
>>>
>>> data
id Country IsEuropeanCountry
0 1 Greece Yes
1 2 Angola No
2 3 Germany Yes
3 4 USA No
定义一个方法,然后将其与apply:一起使用
def check_for_eu(row):
country = row['country']
if country in eu:
row['europe']='yes'
else:
row['europe']='no'
return row
df = df.apply(check_for_eu,axis=1)