使用 np.where 的循环
For loop using np.where
我正在尝试在数据框中创建一个新列,用 1 标记驯化的动物。我使用的是 for 循环,但出于某种原因,该循环仅选取pets
列表。 dog
、cat
和 gerbil
都应在 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
。这包括 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
我正在尝试在数据框中创建一个新列,用 1 标记驯化的动物。我使用的是 for 循环,但出于某种原因,该循环仅选取pets
列表。 dog
、cat
和 gerbil
都应在 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
。这包括 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