在Python中根据另一列的内容添加一个新列
我有一个国家名称的数据框,我想添加一个列,表明这是否是穆斯林禁令的一部分。因此,理想情况下,我希望:在Python中根据另一列的内容添加一个新列,python,function,pandas,Python,Function,Pandas,我有一个国家名称的数据框,我想添加一个列,表明这是否是穆斯林禁令的一部分。因此,理想情况下,我希望: Country Name Ban Indonesia non_muslim_ban Iran, Islamic Rep. muslim_ban Iraq non_muslim_ban Ireland non_muslim_ban Libya muslim_
Country Name Ban
Indonesia non_muslim_ban
Iran, Islamic Rep. muslim_ban
Iraq non_muslim_ban
Ireland non_muslim_ban
Libya muslim_ban
Liechtenstein non_muslim_ban
Somalia muslim_ban
South Africa non_muslim_ban
Sudan muslim_ban
Syrian Arab Republic muslim_ban
West Bank and Gaza non_muslim_ban
Yemen, Rep. muslim_ban
Zambia non_muslim_ban
Zimbabwe non_muslim_ban
我尝试了此函数,但出现了一个错误:
def muslim_ban(Country_Name):
if df['Country Name'] in ['Iran', 'Libya', 'Somalia', 'Sudan', 'Syria', 'Yemen']:
return 'muslim_ban'
elif df['Country Name'] not in ['Iran', 'Libya', 'Somalia', 'Sudan', 'Syria', 'Yemen']:
return 'non_muslim_ban'
`df['muslim_ban'] = df['Country Name'].apply(muslim_ban)
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
有人能帮忙吗
已更新以包含修订的代码是否确实可以按如下方式拆分函数参数:
国家名称
?也许这是你的语法错误。顺便说一句,语法错误应该告诉您遇到错误的地方。您的代码几乎没有问题
首先,在函数定义中有空格分隔的变量名。因此,将“国家名称”替换为类似“国家名称”
其次,您可以将多个字符串放入列表中的if条件中,然后使用in
和not in
操作符检查是否存在
def muslim_ban(Country_Name):
if Country_Name in ['Iran', 'Libya', 'Somalia', 'Sudan', 'Syria', 'Yemen']:
return 'muslim_ban'
elif Country_Name not in ['Iran', 'Libya', 'Somalia', 'Sudan', 'Syria', 'Yemen']:
return 'non_muslim_ban'
df['muslim_ban'] = df['Country_Name'].apply(muslim_ban)
以下是一些可能有用的东西
ban_muslim=[“也门”、“阿拉伯叙利亚共和国”、“苏丹”、“索马里”、“利比亚”、“伊朗”]
非穆斯林国家=[“印度尼西亚”、“伊拉克”、“爱尔兰”、“列支敦士登”、“南非”、“加沙”、“赞比亚”、“津巴布韦”]
country_name=str(输入(“请输入您的国家名称:”)
如果国家名称为班尤穆斯林:
打印(“您输入了被禁止的穆斯林国家”,国家名称)
elif国家名称为ban_非穆斯林:
打印(“您输入了被禁止的穆斯林国家”,国家名称)
其他:
打印(“您输入了不可用的名称”)
第一行:文件“”,第1行定义穆斯林(国家/地区名称):^SyntaxError:在e处的语法无效(国家/地区名称):谢谢!这是有效的…但当我这样做时:df_details_by_country['sullm_ban']=df_details_by_country.country Name.apply(穆斯林_ban),我在apply附近收到了另一个语法错误。你知道发生了什么吗?我想问题是=
而不是问题代码第二行的=
。这里的代码解决了这个问题。我仍然认为,elif
是没有必要的。我在最后一行看到了一个“字符和国家名称。很抱歉,我不明白这是你发布的代码中的最后一行:*df['sullm_-ban']=df.Country Name.apply(穆斯林_-ban)**。请注意,该行以“
”字符开头。