如何根据panda中现有列和列表之间的比较添加列



我做到了:

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)

最新更新