Перебирать список ключей и добавлять в Pandas DF, если ключ присутствует в данной строке / столбце

#python #pandas #list #iteration

#python #pandas #Список #итерация

Вопрос:

У меня есть довольно большой (57 тыс. строк) файл данных, к которому я регулярно обращаюсь, содержащий списки персонала и их наборы навыков. Я хотел бы передать список ключевых слов и вывести DF только со строками, в которых присутствовали эти ключи, например:

 key_list = ('LEAN', 'SIGMA', 'Toyota')

for key in key_list:
    df1 = df[df[col_key].str.contains(key, case=False)]

# col_key previously defined.
 

В приведенном выше случае я получу результаты только с Toyota. Чтобы захватить все ключи, мне нужно указать:

 df1 = df[df[col_key].str.contains('sigma', case=False) |
    df[col_key].str.contains('LEAN', case=False) |
    df[col_key].str.contains('SIGMA', case=False) |
    df[col_key].str.contains('Toyota', case=False)]
 

Создание его модульным для любой длины предоставленных ключей позволит быстрее обрабатывать запросы данных. Мне кажется, что я упускаю что-то глупое. Если есть более эффективный / питонический подход, я весь внимание. Спасибо!

Ответ №1:

Вы можете проверить каждое значение, содержит ли оно какое-либо из слов в списке ключей, вот пример:

 df[df[col_key].apply(lambda x: any([word.lower() in x.lower() for word in key_list]))]
 

Комментарии:

1. Это сработало отлично! Большое вам спасибо. Честно говоря, мне нужно разбить это, чтобы по-настоящему понять, что происходит по пунктам, но я знаю достаточно, чтобы добавить его, и мои тестовые данные дали мне результаты, которые я ожидал.