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

#python #pandas

#python #pandas

Вопрос:

поэтому я думаю, что это можно прекрасно проработать на примере.

Допустим, у меня есть этот (упрощенный) набор данных:

 company_name  grouped_vals      
Apple         Apple       
Aplpe         Apple
Appel         Apple
Apple         Apple       
Microsoft     Microsoft     
Microsovt     Microsoft     
Amazon        Amazon    
Amazno        Amazon    
Amazon        Amazon     
Applez        Apple 
Microsoft     Microsoft
Microsoft,    Microsoft 
Appple        Apple 
Apple         Apple 
Appel         Apple 
Amazzon       Amazon  
Amazon inc    Amazon
Microsft      Microsoft
  

Я хочу использовать company_name в качестве входных данных и кластеризировать похожие значения на основе метрики difflib.SequenceMatcher. Который принимает две строки в качестве входных данных и возвращает значение подобия. Если они похожи по крайней мере на 85%, они должны получить значение наиболее часто встречающегося company_name для этой компании (которое должно быть правильным написанием), которое будет значением, помещенным в grouped_vals. В основном это делается для устранения некоторых проблем с опечаткой company_name и кластеризации одинаковых названий компаний, которые имеют орфографические ошибки или написаны альтернативно. Как вы можете видеть в примере, мы перешли от более чем 10 различных значений только к 3 в столбце grouped_vals (и grouped_vals имеет правильное написание для каждой компании, потому что правильное написание будет логически наиболее частым значением в company_name), что именно то, что я хочу.

Я предполагаю, что код для такой практики будет соответствовать:

 if difflib.SequenceMatcher(None, 'Apple', 'Appple').ratio() > 0.85:
    df.loc[df.company_name=='Appple', grouped_vals] = 'Apple'
  

Но я не могу заставить это работать систематически для каждого company_name в Pandas, также учитывая, что значение grouped_vals должно быть установлено в наиболее частое company_name для этого набора похожих значений company_names. У кого-нибудь есть идея, как это сделать?