Ошибка при попытке отфильтровать строки в пандах - PullRequest
0 голосов
/ 28 апреля 2019

У меня есть датафрейм:

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

Я хочу отфильтровать первый столбец и добавить значение 1 в третий столбец, если значение начинается с 456, и 0 в противном случае. ТАК вывод должен выглядеть так:

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 Ответ

1 голос
/ 28 апреля 2019

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 не работает, так как фильтр фильтрует информационный кадр и не возвращает позицию для назначения, так что это может привести к сбою, и это для index и columns

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...