Цикл Python, нужно / не удается сохранить значение из исходного кадра данных - PullRequest
0 голосов
/ 30 мая 2019

Я пытаюсь пройтись по группам фраз, чтобы найти и оценить их среди всех участников в каждой группе.Даже если некоторые фразы одинаковы, они могут иметь разные коды, которые я и обрезаю на входах цикла - но их нужно сохранить в конечном 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
...

1 Ответ

0 голосов
/ 30 мая 2019

В случае, если кто-то еще столкнется с подобной проблемой - выяснил это - вместо того, чтобы фильтровать входы в начале цикла второго уровня, я помещаю полное значение во второй цикл и очищаю его там:

a2 = a[6:]
b2 = b[6:]

Итак:

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'],g['DESCR']):
        if str(a) < str(b):
            try:
                a2 = a[:-2]
                b2 = b[:-2]
                n_list.append(n)
                a_list.append(a)
                b_list.append(b)
                pr_list.append(fz.partial_ratio(a2,b2))
                tsr_list.append(fz.token_set_ratio(a2,b2))
            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})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...