создание нового столбца на основе нескольких значений другого столбца - PullRequest
0 голосов
/ 09 июля 2019

У меня есть фрейм данных, который имеет эти значения в одном из своих столбцов:

In:

df.line.unique()

Out:

array(['Line71A', 'Line71B', 'Line75B', 'Line79A', 'Line79B', 'Line75A', 'Line74A', 'Line74B',
       'Line70A', 'Line70B', 'Line58B', 'Line70', 'Line71', 'Line74', 'Line75', 'Line79', 'Line58'],
      dtype=object)

И я хотел бысоздать новый столбец с 2 значениями на основе того, содержит ли строка значений LineXX, например:

if (df.line.str.contains("Line70")  or (df.line.str.contains("Line71") or (df.line.str.contains("Line79")):
   return 1
else:
   return 0

Таким образом, значение должно быть 1 в новом столбце, box_type, если значения в df.line содержит "Line70", "Line71", "Line79", а остальные должны быть 0

Я попытался сделать это с помощью этого кода:

df['box_type'] = df.line.apply(lambda x: 1 if x.contains('Line70') or x.contains('Line71') or x.contains('Line79') else 0)

Но я получаю эту ошибку:

AttributeError: 'str' object has no attribute 'contains'

И я попытался добавить .str между x и contains, как x.str.contains(), но это также дало ошибку.

Как я могу это сделать?

Спасибо!

1 Ответ

1 голос
/ 09 июля 2019

Как насчет:

df['box_type'] = df.line.str.contains('70|71|79')

Пример данных:

np.random.seed(1)
df = pd.DataFrame({'line':np.random.choice(a, 10)})

Выход:

      line  box_type
0  Line75A     False
1   Line70      True
2   Line71      True
3  Line70A      True
4  Line70B      True
5   Line70      True
6  Line75A     False
7   Line79      True
8  Line71A      True
9   Line58     False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...