Создать новый столбец с нечеткой оценкой для двух строковых столбцов в одном фрейме данных

Я пытаюсь рассчитать нечеткую оценку (предпочтительно оценку partial_ratio) по двум столбцам в одном кадре данных.

| column1 | column2|
| -------- | -------------- |
| emmett holt| holt
| greenwald| christopher

Это должно выглядеть примерно так:

| column1 | column2|partial_ratio|
| -------- | -------------- |-----------|
| emmett holt| holt|100|
| greenwald| christopher|22|
|schaefer|schaefer|100|

С помощью другого вопроса на этом веб-сайте я разработал следующий код:

compare=pd.MultiIndex.from_product([ dataframe['column1'],dataframe ['column2'] ]).to_series()

def metrics (tup):
   return pd.Series([fuzz.partial_ratio(*tup)], ['partial_ratio'])

df['partial_ratio'] = df.apply(lambda x: fuzz.partial_ratio(x['original_title'], x['title']), axis=1)

Но проблема уже начинается с первой строки кода, которая возвращает следующее уведомление об ошибке:

Невозможно преобразовать столбец в bool: используйте '&' вместо ',' | ' for 'or', '~' for 'not' при построении логических выражений DataFrame.

Вы можете сказать, что я застрял здесь, поэтому мы будем благодарны за любые советы по этому поводу!


person Antonius    schedule 16.12.2020    source источник
comment
как появляется schaefer?   -  person mck    schedule 16.12.2020


Ответы (1)


Для использования fuzzywuzzy вам понадобится UDF:

from fuzzywuzzy import fuzz
import pyspark.sql.functions as F

@F.udf
def fuzzyudf(original_title, title):
    return fuzz.partial_ratio(original_title, title)

df2 = df.withColumn('partial_ratio', fuzzyudf('column1', 'column2'))
df2.show()

+-----------+-----------+-------------+
|    column1|    column2|partial_ratio|
+-----------+-----------+-------------+
|emmett holt|       holt|          100|
|  greenwald|christopher|           22|
+-----------+-----------+-------------+
person mck    schedule 16.12.2020