Python 使用np.where的For循环
我正在尝试在数据框中创建一个新列,用1标记驯化的动物。我使用的是for循环,但出于某种原因,循环只拾取Python 使用np.where的For循环,python,pandas,numpy,dataframe,where,Python,Pandas,Numpy,Dataframe,Where,我正在尝试在数据框中创建一个新列,用1标记驯化的动物。我使用的是for循环,但出于某种原因,循环只拾取pets列表中的最后一项狗、猫和沙鼠都应在驯化列下分配1。有人对此有解决办法或更好的方法吗 df = pd.DataFrame( {'creature': ['dog', 'cat', 'gerbil', 'mouse', 'donkey'] }) pets = ['dog', 'cat', 'gerbil'] for pet in pets: df['domesti
pets
列表中的最后一项<代码>狗、猫
和沙鼠
都应在驯化
列下分配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
。这包括dog
或cat
的条目。您应该立即检查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)
在上一次循环迭代中将所有非沙鼠设置为
0
。也就是说,当上次迭代中pet
为gerbil
时,所有不等于gerbil
的条目将对应于0
。这包括dog
或cat
的条目。您应该立即检查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
问题是每个循环都会重置结果
df['domesticated'] = df.isin(pets).astype(int)
creature domesticated
0 dog 1
1 cat 1
2 gerbil 1
3 mouse 0
4 donkey 0
这太棒了。如果允许的话,我会勾选这个。你知道为什么for循环在这种情况下不起作用吗?我把
狗
、猫
和沙鼠
都包括在宠物
列表中,所以我认为反复浏览该列表会很好。我更新了我的帖子,提供了更多细节。想法是最后一次迭代覆盖了之前的所有内容,因此您基本上只需检查与沙鼠
相等的值。这很好。如果允许的话,我会勾选这个。你知道为什么for循环在这种情况下不起作用吗?我把狗
、猫
和沙鼠
都包括在宠物
列表中,所以我认为反复浏览该列表会很好。我更新了我的帖子,提供了更多细节。其思想是最后一次迭代覆盖了之前的所有内容,因此基本上只需检查与gerbil
相等的值。