применить все возможные комбинации в коде для расчета баллов - PullRequest
0 голосов
/ 06 августа 2020

У меня есть следующее, чтобы вычислить возможные комбинации взвешивания:

from itertools import product
for i in product(range(40,105,5), repeat=2): 
    #print(i)

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

ngram_thresh = 65
leven_thresh = 95

def f(x):
    if x['Name_ngram'] == x['Name_fuzz'] : return x['Name_ngram']
    elif x['Score_ngram'] >= ngram_thresh : return x['Name_ngram']
    elif x['Score_leven'] >= leven_thresh : return x['Name_Leven']
    else: return 0

df['Name_Clean_65_95'] = df.apply(f, axis=1)

прогон через этот df:

data = {'Name_Raw':['AECOM TECHNICAL SERVICES', 'AECOM_*', 'AECOM- Amentum', 'AECOM GOVERNMENT SERVICES (Inactive)', 'ADT LLC dba ADT Security Services', 'ADT', 'AAA Call Center', 'AAA of Northern California, Nevada', 'ANHEUSER BUSCH InBev'], 'Name_CleanCorrect':['AECOM', 'AECOM', 'AECOM', 'AECOM', 'ADT SECURITY CORPORATION', 'ADT SECURITY CORPORATION', 'AAA', 'AAA', 'AB InBev'], 'Name_ngram':['AECOM', 'AECOM', 'AECOM', 'AECOM', 'ADT SECURITY CORPORATION', 'ADT SECURITY CORPORATION', 'AAA', 'State Bar of California', 'Ivanhoe Cambridge USA'], 'Score_ngram':[0.38, 1, 0.51, 0.33, 0.64, 0.41, 0.36, 0.30, 0.16], 'Name_Leven':['AECOM', 'AECOM', 'AECOM', 'AECOM', 'ADT SECURITY CORPORATION', 'ADT SECURITY CORPORATION', 'AAA', 'State Bar of California', 'AB InBev'], 'Score_leven':[0.23, 1, 1, 0.21, 0.65, 0.85, 0.85, 0.37, 0.65], 'ngram_correct':[1, 1, 1, 1, 1, 1, 1, 0, 0], 'leven_correct':[1, 1, 1, 1, 1, 1, 1, 0, 1]}

df = pd.DataFrame(data)

Возможно ли это?

1 Ответ

0 голосов
/ 06 августа 2020

Передайте пороговые значения в качестве аргументов в f и l oop поверх них в ваших комбинациях. Вы можете передать значения из комбинаций в f, используя аргументы ключевого слова в DataFrame.apply:

from itertools import product
import pandas as pd

def f(x, ngram_thresh, leven_thresh):
    if x['Name_ngram'] == x['Name_fuzz'] : return x['Name_ngram']
    elif x['Score_ngram'] >= ngram_thresh : return x['Name_ngram']
    elif x['Score_leven'] >= leven_thresh : return x['Name_Leven']
    else: return 0

for ngram_t, leven_t in product(range(40,105,5), repeat=2):
    df[f'Name_Clean_{ngram_t}_{leven_t}'] = df.apply(f, ngram_thresh=ngram_t, leven_thresh=leven_t, axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...