Как классифицировать данные с наибольшим количеством совпадающих ключевых слов, используя два фрейма данных в Python Pandas - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть два кадра данных

df1 - столбец категорий со списком столбцов ключевых слов категории

кадр данных1

другой кадр данных со столбцом описания и извлеченными ключевыми словами из столбца описания, используя rake

Фрейм данных 2

Теперь я хочу назначить категорию для расшифровки с самыми подходящими ключевыми словами. Например, рассмотрим последнюю строку описания несмотря на то, что все ключевые слова доступны в категории 1, 2, 3, категории 7, но в категории 5 есть дополнительные ключевые слова ('i.ve Vue), следовательно, назначьте категорию этому описанию как Категория 5, поскольку она имеет наибольшее количество подходящих ключевых слов. и создайте новый столбец как назначенную категорию и заполните категорию, если категория не доступна, затем установите его в значение по умолчанию. Пожалуйста, найдите ниже Ожидаемый результат вывода

Пожалуйста, помогите мне, как я могу достичь нижеприведенного результата

Ожидаемый результат

MyCode:

import pandas as pd

A = pd.DataFrame({'keywords': [['user got trained', 'python'],
                           ['strong knowledge', 'user', 'trained', 'python', 'java'],
                               ['strong knowledge', 'user', 'python', 'oracle', 'java'],
                               ['strong knowledge', 'vue', 'user', 'python', 'oracle', 'javascript', 'java']]})
print(A)
B = pd.DataFrame({'category': ['categ1', 'categ2', 'catge3', 'catge4'],
                  'words': ['user,python', 'user,Javascript','user,python,Java,Oracle','user,python,Java,Oracle,javascript,Vue']})
print(B)
def match_category_to_keywords(kws):
    ret = []
    for kw in kws:
        m = B['words'].transform(lambda words: any([kw in w for w in words.split(',')]))
        ret.extend(B['category'].loc[m].tolist())
    return pd.np.unique(ret)

A['matched_category'] = A['keywords'].transform(lambda kws: match_category_to_keywords(kws))
print(A)
...