Сгруппируйте по одному столбцу и сравните схожесть текста pandas - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть фрейм данных с почти 1 миллионом строк и столбцов, как показано ниже:

  VIN                  Complaints                                  Repairs  Key
 12234          Customer states engine issues                        yes     1
 12234          Car wont start. Engine broke down                    no      2
 12234          Vehicle battery was replaced                         yes     3
 12231          Car shut down, battery problem                       no      4
 12231          Cool and hot air coming from ac                      yes     5
 12231          Issue with temperature moderator, ac replaced        yes     6
 12231          air conditioner not working fine                     no      7

Я хочу сгруппировать df по 'VIN' и сравнить попарно сходство текста 'Complaints' с первым 'yes' из 'Repairs'.

Например, группа 12234 VIN с первым значением Repairs в качестве «Yes» в этом примере «Проблемы с состоянием клиента» должна сравниваться с двумя другими жалобами той же группы VIN. (1,1) (1,2) (1,3) для группы VIN 12234 и (5,4) (5,5) (5,6) (5,7) для группы VIN 12231.

Желаемый вывод

  VIN                  Complaints                                  Repairs  Key   Text_distance
 12234          Customer states engine issues                        yes     1       1
 12234          Car wont start. Engine broke down                    no      2       1
 12234          Vehicle battery was replaced                         yes     3       0 
 12231          Car shut down, battery problem                       no      4       0
 12231          Cool and hot air coming from ac                      yes     5       1
 12231          Issue with temperature moderator, ac replaced        yes     6       1
 12231          air conditioner not working fine                     no      7       1

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

from sklearn.metrics.pairwise import cosine_similarity
vectorizer = TfidfVectorizer()
trsfm = vectorizer.fit_transform(df['Complaints'])
df['Text_distance']= df.groupby('VIN').apply(lambda x: x.cosine_similarity(trsfm.values, trsfm.values[:, None]))

Как обойти это? Также, пожалуйста, предложите в моем сценарии, если Jaccard / jaro_distance / cosine / что-то еще более эффективно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...