Как удалить всю строку, если в строковых значениях столбца не найдено совпадений ни с одним объектом из данного списка? - PullRequest
1 голос
/ 13 июля 2020

Пожалуйста, помогите мне завершить этот фрагмент кода. Сообщите мне, если потребуется дополнительная информация.

Заранее спасибо!

Дано: столбец 'PROD_NAME' из pandas фрейма данных строкового типа (например, Smiths Crinkle Cut Chips Chicken g), список определенных слов (['Chip', 'Chips' и т. Д.])

Сделать: если ни одно из слов из списка не содержится в строки объектов фрейма данных, мы отбрасываем всю строку. По сути, мы удаляем ненужные продукты из фрейма данных.

Вот как выглядят данные:

введите описание изображения здесь

Вот мой код:

# create a function to Keep only those products which have 
# chip, chips, doritos, dorito, pringle, Pringles, Chps, chp, in their name
def onlyChips(df, *cols):
    temp = []
    chips = ['Chip', 'Chips', 'Doritos', 'Dorito', 'Pringle', 'Pringles', 'Chps', 'Chp']
    copy = cp.deepcopy(df)
    for col in [*cols]:
        for i in range(len(copy[col])):
            for item in chips:
                if item not in copy[col][i]:
                    flag = False
                else: 
                    flag = True
                    break;
                # drop only those string which doesn't have any match from chips list, if flag never became True
                if not flag:
                    # drop the whole row
    return <new created dataframe>

new = onlyChips(df_txn, 'PROD_NAME')

1 Ответ

2 голосов
/ 13 июля 2020

Отфильтруйте строки вместо их удаления. Создайте булеву маску для каждой строки. Используйте str.contains в каждом столбце, который вам нужен для поиска, и посмотрите, соответствует ли какой-либо из столбцов заданным критериям построчно. Если нет, отфильтруйте строки.

search_cols = ['PROD_NAME']
mask = df[search_cols].apply(lambda x: x.str.contains('|'.join(chips))).any(axis=1)
df = df[mask]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...