#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. У кого-нибудь есть идея, как это сделать?