создавать метки в новом столбце фрейма данных на основе частичного совпадения строк другого столбца - PullRequest
0 голосов
/ 10 октября 2018

Во-первых, я рассмотрел множество SO-потоков по этому поводу, и ни один из них не работал в make-случае. Создание нового столбца на основе условия if-elif-else казалось наиболее близким к тому, что я пытаюсь сделать.

В моем df у меня есть столбец с названиями продуктов.Я пытаюсь создать функцию, которая ищет частичное совпадение строк в каждой строке этого столбца и на основе совпадения создаст метку для каждой строки в новом столбце df.Я хотел использовать функцию, потому что мне нужно сопоставить около 5 или 6 шаблонов.

Я использую функцию contains () для поиска частичного совпадения названий продуктов.Это возвращает bool, который я затем проверяю с помощью else / if в функции:

def label_sub_cat():
    if data['product'].str.contains('Proceedings', case=False) is True:
        return 'Proceedings'
    elif data['product'].str.contains('DVD', case=False) is True:
        return 'DVD'
    else:
        return 'Other'

data['product_sub_cat'] = data.apply(label_sub_cat(), axis=1)

Я получаю следующую ошибку:

AttributeError: 'DataFrame' object has no attribute 'other'

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Просто измените свою функцию

def label_sub_cat(row):
    if row.product.str.contains('Proceedings', case=False) is True:
        return 'Proceedings'
    elif row.product.str.contains('DVD', case=False) is True:
        return 'DVD'
    else:
        return 'Other'

data['product_sub_cat'] = data.apply(label_sub_cat, axis=1)
0 голосов
/ 10 октября 2018

функция в df.apply () должна применяться к каждой строке df, а не ко всей df.

In [37]: df = pd.DataFrame({'product':['aProcedings', 'aDVD','vcd']})
In [38]: def label_sub_cat(row):
...:     if 'Procedings' in row['product']:
...:         return 'Proceedings'
...:     elif 'DVD' in row['product']:
...:         return 'DVD'
...:     else:
...:         return 'Other'
...:
...:

In [39]: df['product_sub_cat'] = df.apply(label_sub_cat, axis=1)

In [40]: df
Out[40]:
       product product_sub_cat
0  aProcedings     Proceedings
1         aDVD             DVD
2          vcd           Other
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...