当我尝试过滤熊猫中的行时出错

时间:2019-04-27 23:25:45

标签: pandas filter

我有数据框:

a1     a2   
4567   k
4565   k
4567   k
6325   p
4569   k
4564   k
4555   k
9567   k
9567   h

如果值以456开头,我想过滤第一列,并在第三列中添加值1,否则为0。 SO输出应如下所示:

a1    a2   a3
4567   k   1
4565   k   1
4567   k   1
6325   p   0
4569   k   1
4564   k   1
4555   k   0
9567   k   0
9567   h   0

我的代码是:

data['a3'] = 0
data.loc[data['a1'].filter(regex =r'456'), 'a3'] = 1

但是我得到了关键错误。谷歌也没有帮助我。 :/

1 个答案:

答案 0 :(得分:1)

IIUC使用np.where//(除数)

df['New'] = np.where(df.a1//10==456,1,0)

#           np.where((df.a1//10).isin([456,xxx,yyy]),1,0)

df
     a1 a2  New
0  4567  k    1
1  4565  k    1
2  4567  k    1
3  6325  p    0
4  4569  k    1
5  4564  k    1
6  4555  k    0
7  9567  k    0
8  9567  h    0

修正您的代码startswith

data['a3'] = 0
data.loc[data['a1'].astype(str).str.startswith('456'), 'a3'] = 1

为什么filter不起作用,因为filter是对数据帧进行过滤,而不返回分配位置,所以可能导致失败,并且是indexcolumns < / p>