Mam dwie ramki danych, z których każda ma inną liczbę wierszy. Poniżej jest kilka wierszy z każdego zestawu danychZastosuj dopasowanie rozmytą w kolumnie danych i zapisz wyniki w nowej kolumnie
df1 =
Company City State ZIP
FREDDIE LEES AMERICAN GOURMET SAUCE St. Louis MO 63101
CITYARCHRIVER 2015 FOUNDATION St. Louis MO 63102
GLAXOSMITHKLINE CONSUMER HEALTHCARE St. Louis MO 63102
LACKEY SHEET METAL St. Louis MO 63102
i
df2 =
FDA Company FDA City FDA State FDA ZIP
LACKEY SHEET METAL St. Louis MO 63102
PRIMUS STERILIZER COMPANY LLC Great Bend KS 67530
HELGET GAS PRODUCTS INC Omaha NE 68127
ORTHOQUEST LLC La Vista NE 68128
dołączyłem je obok siebie przy użyciu combined_data = pandas.concat([df1, df2], axis = 1)
. Moim następnym celem jest porównanie każdego ciągu pod numerem df1['Company']
z każdym ciągiem pod numerem df2['FDA Company']
przy użyciu kilku różnych poleceń dopasowujących z modułu fuzzy wuzzy
i zwrócenie wartości najlepszego dopasowania i jego nazwy. Chcę to zapisać w nowej kolumnie. Na przykład, jeśli zrobiłem fuzz.ratio
i fuzz.token_sort_ratio
na LACKY SHEET METAL
w df1['Company']
do df2['FDA Company']
byłoby powrócić że najlepszy mecz był LACKY SHEET METAL
z wynikiem 100
a to wtedy być zapisany pod nową kolumnę w combined data
. Wynika to będzie wyglądać
combined_data =
Company City State ZIP FDA Company FDA City FDA State FDA ZIP fuzzy.token_sort_ratio match fuzzy.ratio match
FREDDIE LEES AMERICAN GOURMET SAUCE St. Louis MO 63101 LACKEY SHEET METAL St. Louis MO 63102 LACKEY SHEET METAL 100 LACKEY SHEET METAL 100
CITYARCHRIVER 2015 FOUNDATION St. Louis MO 63102 PRIMUS STERILIZER COMPANY LLC Great Bend KS 67530
GLAXOSMITHKLINE CONSUMER HEALTHCARE St. Louis MO 63102 HELGET GAS PRODUCTS INC Omaha NE 68127
LACKEY SHEET METAL St. Louis MO 63102 ORTHOQUEST LLC La Vista NE 68128
Próbowałem robić
combined_data['name_ratio'] = combined_data.apply(lambda x: fuzz.ratio(x['Company'], x['FDA Company']), axis = 1)
Ale masz błąd, ponieważ długości kolumn są różne.
Jestem zaskoczony. Jak mogę to osiągnąć?
Jest to świetna odpowiedź! Ale w przypadku dużych plików (~ lakhs) dostaję błąd pamięci – user1930402