我有一个数据帧,包含名称和已验证列的值,我想看看条件是否满足,它会根据条件生成一个具有不同值的新列,例如:
名称 | 已验证 |
---|---|
Mary | 是 |
Julie | 否 |
玛丽 | No |
你很接近。一旦你纠正了条件语句的结构,你就可以做一些类似map的事情,或者在中使用numpy
df['Identity'] = ((df['Name'].eq('Mary')) & (df['Verified'].eq('No'))).map({True:'Human',False:'Bot'})
或使用numpywhere
import numpy as np
df['Identity'] = np.where((df['Name'].eq('Mary')) & (df['Verified'].eq('No')),'Human','Bot')
这里有另一种使用np.where 的方法
df['Identify']=np.where(df['Name'].eq('Mary') & df['Verified'].eq('No'), 'Human', 'Bot')
df
Name Verified Identify
0 Mary Yes Bot
1 Julie No Bot
2 Mary No Human
您可以使用掩码,它比应用和映射方法更快:
mask = (df['name'] == 'Mary') & (df['Verified'] == 'No')
df.loc[mask,'Identity'] = 'Human'
df.loc[~mask,'Identity'] = 'Bot'
这个怎么样:
df['Identity'] = "Bot"
df.loc[(df['Name'] == "Mary") & (df['Verified'] == "No"), 'Identity'] = "Human"
类似于这个q:基于if-elif-else条件创建一个新列