Я пытаюсь пройтись по группам фраз, чтобы найти и оценить их среди всех участников в каждой группе.Даже если некоторые фразы одинаковы, они могут иметь разные коды, которые я и обрезаю на входах цикла - но их нужно сохранить в конечном df2
.Я должен сделать сравнение в цикле без кода, но проблема в том, чтобы связать его с исходным df, содержащим код, чтобы я мог определить, какие строки нужно пометить.
Приведенный ниже код работает, но янужно добавить оригинал DESCR
в df2.Добавление a и b содержит только усечение.
Я пробовал df.at[]
, но результаты были неверными.Спасибо.
import pandas as pd
from fuzzywuzzy import fuzz as fz
import itertools
data = [[1,'Oneab'],[1,'Onebc'],[1,'Twode'],[2,'Threegh'],[2,'Threehi'],[2,'Fourjk'],[3,'Fivekl'],[3,'Fivelm'],[3,'Fiveyz']]
df = pd.DataFrame(data,columns=['Ids','DESCR'])
n_list = []
a_list = []
b_list = []
pr_list = []
tsr_list = []
groups = df.groupby('Ids')
for n,g in groups:
for a, b in itertools.product(g['DESCR'].str[:-2],g['DESCR'].str[:-2]):
if str(a) < str(b):
try:
n_list.append(n)
a_list.append(a)
b_list.append(b)
pr_list.append(fz.partial_ratio(a,b))
tsr_list.append(fz.token_set_ratio(a,b))
except:
pass
df2 = pd.DataFrame({'Group': n_list, 'First Comparator': a_list, 'Second Comparator': b_list, 'Partial Ratio': pr_list, 'Token Set Ratio': tsr_list})
Вместо:
ab bc 50 50
ab de 0 0
bc de 0 0
gh hi 50 50
gh jk 0 0
hi jk 50 50
...
Я бы хотел увидеть:
Oneab Onebc 50 50
Oneab Twode 0 0
Onebc Twode 0 0
Threegh Threehi 50 50
Threegh Fourjk 0 0
Threehi Fourjk 50 50
...