Проверка того, имеет ли столбец данных pandas (который имеет списки в качестве значений) один элемент другого списка

У меня есть следующий фрейм данных под названием «files_to_export»:

|Assignee                                                             |otherColumns...|
["Samsung", "Apple", "Apple Inc."]
["Honda Tech", "Honda Motors", "General Motors", "Huawei"]

У меня есть еще один список под названием «Компании», который содержит компании, которые мне интересны в моих данных, структура списка следующая:

 Companies=['Ford','General motors','Mazda',..........]

Итак, я хочу, чтобы в моих данных были строки, содержащие хотя бы одну компанию в моем списке компаний (под содержанием я подразумеваю смысл регулярного выражения, другими словами, если есть строка с «Ford global tech», тогда я хочу это включены в мои данные, потому что в нем есть слово Форд.

Я написал следующий код, но я не собираю никаких данных:

output = file_to_export[file_to_export['Assignee'].str.contains('|'.join(companies), case=False, na=False).count(True) > 0]

Фактический результат - пустой фрейм данных без строк в выходном фрейме данных.

Ожидаемый результат - получить фрейм данных со строками разных компаний в выходном кадре данных.

Какие-либо предложения? Спасибо за вашу помощь, и я хочу, чтобы я был ясен в своем вопросе!

Я только что отредактировал сообщение, пример - это однострочный код, с помощью которого я пытаюсь отфильтровать свои файлы dataframe files_to_export!

Monta 15.12.2020 15:02
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
579
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Настройка данных

files_to_export = pd.DataFrame({'Assignee':[['Samsung','Apple','Apple Inc.'],['Honda Tech','Honda Motors','General Motors']],
                                'other_col':[1,2]})

companies = ['Ford','General motors','Mazda']

# Filter df
# The pattern is a case of or where matching any of the individuals strings will work
pattern = '|'.join(companies) # 'Ford|General motors|Mazda'
# convert the column of lists to a column of comma separated strings
# then check for string containment
files_to_export[files_to_export.Assignee.apply(lambda x: ','.join(x)).str
                .contains(pattern,
                          case=False)]

Этот код генерирует следующее предупреждение: UserWarning: Этот шаблон имеет группы соответствия. Чтобы получить группы, используйте str.extract. функция возврата(я, *args, **kwargs)

Monta 15.12.2020 16:18

Я на самом деле не понимаю вашего шаблона, почему вы добавляете '()'

Monta 15.12.2020 16:21

Скобки нужны для группировки слов, но здесь они не нужны. Я только что отредактировал ответ, чтобы просто присоединиться к разделению |, которое работает так же, только без предупреждения.

cookesd 15.12.2020 16:31

Другие вопросы по теме