我有数据框:
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
但是我得到了关键错误。谷歌也没有帮助我。 :/
答案 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是对数据帧进行过滤,而不返回分配位置,所以可能导致失败,并且是index
和columns
< / p>