使用np.where的循环

时间:2019-03-20 23:17:59

标签: python pandas numpy dataframe where

我正在尝试在数据框中创建一个新列,以标记用1驯化的动物。我使用的是for循环,但由于某些原因,该循环仅拾取{{ 1}}列表。 petsdogcatgerbil列下都应分配为1。任何人都可以解决此问题或更好的方法吗?

domesticated

2 个答案:

答案 0 :(得分:1)

您正在上一次循环迭代中将所有非沙鼠设为0。也就是说,当您上次迭代中的petgerbil时,所有不等于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 :(得分: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