python - 如何向 pandas df 添加条件列

标签 python if-statement pandas conditional-statements dataframe

我想在数据框中创建一个有条件地填充值的列。基本上我的数据框是这样的

  Origin     X
0 Guatemala  x
1 China      x
2 Kenya      x
3 Venezuela  x
4 Bangladesh x

我现在想做的是创建一个附加列“大陆”,它添加依赖于国家/地区的大陆。我的结果将如下所示:

 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

我尝试了以下代码来实现我想要的:

def GetContinents(x):
    if x['Origin']== 'Thailand' or 'Indonesia' or 'China' or 'Japan' or 'Bangladesh':
        return 'Asia'
    elif x['Origin']== 'Boliva' or 'Guatemala' or 'Venezuela' or 'Mexico' or 'Argentinia':
        return 'South America'
    elif x['Origin']== 'Guinea Bissau' or 'Egypt' or 'Zaire' or 'Kenya':
        return 'Africa'
    else:
        return 'unknown'

df['Continent']= df.apply(GetContinents, axis=1)

这个神秘地用“亚洲”填满了“大陆”的所有栏目。

df['Continent'] = np.where(df['Origin'] == 'Bangladesh', 'Asia', 'unknown')

这个效果很好,它将“亚洲”填充到正确的列中,而其他所有列中都未知,但是当我尝试制作类似 df['Continent'] = np.where(df[' Origin'] == '孟加拉国' 或 '中国', '亚洲', '未知') 我收到错误。

所以基本上我的问题是:如何用不同的值来满足我的 if 条件?

最佳答案

您可以为每个大陆构建列表并应用函数:

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 屏蔽行:

In [38]:
df.loc[df['Origin'].isin(asia),'Continent'] = 'Asia'
df.loc[df['Origin'].isin(south_america),'Continent'] = 'South America'
df.loc[df['Origin'].isin(africa),'Continent'] = 'Africa'
df['Continent'] = df['Continent'].fillna('Unknown')
df

Out[38]:
       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

至于为什么你的尝试没有成功:

if x['Origin']== 'Thailand' or 'Indonesia' or 'China' or 'Japan' or 'Bangladesh'

这将返回 True,因为 或 'Indonesia' 始终为 True,因此所有行都设置为亚洲。

你应该将其更改为这样:

if x['Origin'] in ('Thailand' , 'Indonesia' , 'China' , 'Japan' , 'Bangladesh'):

查看相关:How do I test one variable against multiple values?

使用 np.where 就可以了,但是您没有屏蔽行,因此您不断覆盖行,因此只有最后一个操作保留。

关于python - 如何向 pandas df 添加条件列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33344359/

相关文章:

arrays - Google Sheets QUERY 从选项卡名称列表中提取,这将在添加新选项卡时提取新选项卡数据

jquery - 在 jQuery 中使用 If/Else 语句

javascript - 具有多个 OR 的 IF 语句的替代方法

python - 条形或标签之间的间距

python - 为什么 Pandas 将日期时间转换为聚合函数中的 float

python - twisted - 获取操作系统选择的监听端口

python - 使用 Python 请求发送 SOAP 请求

python - 使用 Django 和 AngularJS 的虚拟主机的 Apache2 和上下文路径

具有空第二维的数组/向量的 Python/numpy 问题

python - 如何根据另外两个数据帧的值填充 Pandas 数据帧