Цикл Python, необходимо/не удается сохранить значение из исходного фрейма данных

Я пытаюсь перебрать группы фраз, чтобы сопоставить их и подсчитать среди всех членов каждой группы. Даже если некоторые фразы совпадают, у них могут быть разные коды, которые я вырезаю из входных данных цикла, но их нужно сохранить в финале 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
...
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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})

Другие вопросы по теме