使用 np.where 的循环

For loop using np.where

我正在尝试在数据框中创建一个新列,用 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

您在上一次循环迭代中将所有非沙鼠设置为 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)

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

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

  creature  domesticated
0      dog             1
1      cat             1
2   gerbil             1
3    mouse             0
4   donkey             0