您可以为每个大陆构造列表并apply函数:In [35]:
asia = ['Thailand','Indonesia','China','Japan','Bangladesh']
south_america = ['Boliva' , 'Guatemala' , 'Venezuela' , 'Mexico' , 'Argentinia']
africa = [ 'Guinea Bissau' , 'Egypt' , 'Zaire' , 'Kenya']
def find_continent(x):
if x in asia:
return 'Asia'
elif x in south_america:
return 'South America'
elif x in africa:
return 'Africa'
else:
return 'Unknown'
df['Continent'] = df['Origin'].apply(find_continent)
df
Out[35]:
Origin X Continent
0 Guatemala x South America
1 China x Asia
2 Kenya x Africa
3 Venezuela x South America
4 Bangladesh x Asia
或者,如果df要大得多,那么可以使用isin进行连续调用,并使用loc屏蔽行:
^{pr2}$
至于为什么你的尝试没有成功:if x['Origin']== 'Thailand' or 'Indonesia' or 'China' or 'Japan' or 'Bangladesh'
这将返回True,因为or 'Indonesia'总是True,所以所有行都设置为Asia。在
你应该改成这样:if x['Origin'] in ('Thailand' , 'Indonesia' , 'China' , 'Japan' , 'Bangladesh'):
使用np.where可以,但是您没有屏蔽行,所以您不断地覆盖这些行,所以只有最后一个操作继续存在。在