在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)

以下是一些可能有用的东西

  • 将国家名称更改为国家名称
  • 使用“==”进行比较,而不是赋值运算符“=”
  • 您不需要elif,因为您可以使用else返回“non-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)**。请注意,该行以“
    ”字符开头。