对于使用np.where的循环

问题描述 投票:0回答:2

我正在尝试在数据框中创建一个新列,用于标记用1进行驯化的动物。我正在使用for循环,但由于某种原因,循环只会获取pets列表中的最后一项。 dogcatgerbil都应该在domesticated列下分配1。任何人都有这个或更好的方法的解决方案?

df = pd.DataFrame(
    {'creature': ['dog', 'cat', 'gerbil', 'mouse', 'donkey']
    })

pets = ['dog', 'cat', 'gerbil']

for pet in pets:
    df['domesticated'] = np.where(df['creature']==pet, 1, 0)

df
python pandas numpy dataframe where
2个回答
1
投票

您在最后一次循环迭代中将所有非沙鼠设置为0。也就是说,当pet在你的最后一次迭代中是gerbil时,所有不等于gerbil的条目将对应于0。这包括dogcat的条目。您应该立即检查pets中的所有值。试试这个:

df['domesticated'] = df['creature'].apply(lambda x: 1 if x in pets else 0)

如果你想坚持使用np.where

df['domesticated'] = np.where(df['creature'].isin(pets), 1, 0)

1
投票

问题是每个循环都会重置您的结果。

df['domesticated'] = df.isin(pets).astype(int)

  creature  domesticated
0      dog             1
1      cat             1
2   gerbil             1
3    mouse             0
4   donkey             0
© www.soinside.com 2019 - 2024. All rights reserved.