使用df.loc []和In

时间:2017-03-15 07:41:25

标签: python pandas

我正在尝试执行以下代码:

df.loc[df['Column'] in list]=1
df.loc[df['Column'] not in list]=2

但我有一个着名的错误

  

系列的真值是模棱两可的。使用a.empty,a.bool(),a.item(),a.any()或a.all()。

因此,根据我对此错误的理解,我已经得到了它与逻辑相关联。我想知道的是,是否有一个特定的拼写错误来做我要对列表做的事情,或者我必须像那样扩展我的整个列表(在我的情况下会非常难看和长):

df.loc[df[('Column']=='a') & (df['Column']=='b')]=1
df.loc[df[('Column']!='a') & (df['Column']!='b')]=2 

2 个答案:

答案 0 :(得分:2)

我使用np.where。但是,您需要一个列名。

df['new_column'] = np.where(df['Column'].isin(lst), 1, 2)

考虑列表lst和数据框df

lst = [1, 2, 3]
df = pd.DataFrame(dict(Column=[0, 1, 2, 3, 4]))

然后

df['new_column'] = np.where(df['Column'].isin(lst), 1, 2)

print(df)

   Column  new_column
0       0           2
1       1           1
2       2           1
3       3           1
4       4           2

答案 1 :(得分:1)

您正在寻找的功能是

df.loc[df['Column'].isin(list)] = 1