Как сопоставить и извлечь текст из кадра данных в пандах, используя нечеткую логику? - PullRequest
0 голосов
/ 05 июля 2018

У меня есть два кадра данных следующим образом: DF1:

Name                     Value
buying fish hook         240
arrange lunch            75
repair equipment         800
purchase air condition   1400
buying fish              66

DF 2:

Name
fish
lunch
equipemt
air condition
hair condition
fish hook

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

Name                     Value    item
buying fish hook         240      fish hook
arrange lunch            75       lunch
repair equipment         800      equipment
purchase air condition   1400     air condition

не все имена имеют точное совпадение. У Df 2 есть несколько имен, и у некоторых есть соответствующие слова, например: состояние воздуха и состояние волос. Разделение значений из DF 1 вызывает несоответствие, когда рыболовный крючок соответствует только рыбе

Ответы [ 2 ]

0 голосов
/ 06 июля 2018
from fuzzywuzzy import process
i = 0
scorethreshold = 70
df1["fuzzy"] = 0
for x in df1.Name:
    noun,score,record = process.extractOne(x,df2.Name)
    if score > scorethreshold:     
        df1.loc[i,'fuzzy'] = noun
    else:
        df1.loc[i,'fuzzy'] = None
    i = i + 1

Этот код будет сравнивать и сопоставлять текст. Возвращает значение df2 или None согласно пороговому значению. Вы можете изменить порог в соответствии с точностью df2. Вы также можете выполнить некоторую обработку текста, чтобы получить лучший результат.

0 голосов
/ 05 июля 2018

Вы можете использовать pd.Series.apply с next и выражением генератора. Этот метод даст приоритет, в случае нескольких совпадений, порядку строк в df2. Если совпадений не найдено, find_key вернет None.

def find_key(x):
    return next((i for i in df2['Name'].values if x in i), None)

df1['item'] = df1['Name'].apply(find_key)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...