У меня есть кадр данных pandas, который выглядит следующим образом:
Type Keywords
---- --------
Animal [Pigeon, Bird, Raccoon, Dog, Cat]
Pet [Dog, Cat, Hamster]
Pest [Rat, Mouse, Raccoon, Pigeon]
Farm [Chicken, Horse, Cow, Sheep]
Predator [Wolf, Fox, Raccoon]
Допустим, у меня есть следующая строка:
input = "There is a dead rat and raccoon in my pool"
Учитывая, что я токенизирую строку и удаляю стоп-words так, чтобы он стал
input = [Dead, Rat, Raccoon, Pool]
Мне нужно пройти через каждую строку и найти строки, которые имеют наибольшее количество совпадений ключевых слов.В данном примере результаты будут выглядеть следующим образом:
Type Keywords Matches
---- -------- -------
Animal [Pigeon, Bird, Raccoon, Dog, Cat] 1
Pet [Dog, Cat, Hamster] 0
Pest [Rat, Mouse, Raccoon, Pigeon] 2
Farm [Chicken, Horse, Cow, Sheep] 0
Predator [Wolf, Fox, Raccoon] 1
Выходными данными будут первые три типа имен с наибольшим количеством совпадений.
В приведенном выше случаеТак как в категории «Пешт» наибольшее количество совпадений, она будет выбрана в качестве наибольшего совпадения.Дополнительно будут выбраны категории животных и хищников.Таким образом, порядок вывода будет таким:
output = [Pest, Animal, Predator]
Выполнить эту задачу с помощью вложенных циклов for легко, но, поскольку у меня есть тысячи таких строк, я ищу лучшее решение.(Кроме того, по какой-то причине я столкнулся с множеством ошибок при использовании не встроенных функций с пандами, возможно, это связано с векторизацией?)
Я посмотрел на функции groupby и isin, встроенные в пандах, нонасколько я могу судить, они не смогут получить меня к выводу, который я хочу (я не удивлюсь, если я ошибусь в этом предположении).
Затем я исследовал использование наборов и хэш-карт с пандами, но, к сожалению, мои знания в области кодирования и текущие способности еще не достаточны для создания твердого решения. Эта ссылка на StackOverflow , в частности, значительно приблизила меня к тому, что я хотел, хотя и не нашла имена трех самых подходящих строк.
Я был бы очень признателен за любую помощь или совет.