在同一数据框中的两个字符串列中创建具有模糊分数的新列

Create new column with fuzzy-score across two string columns in the same dataframe

我正在尝试计算同一数据框中两列的模糊分数(最好是 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)

但是问题已经从代码的第一行开始 returns 以下错误通知:

Cannot convert column into bool: please use '&' for 'and', '|' for 'or', '~' for 'not' when building DataFrame boolean expressions.

你可以说我有点被困在这里,所以任何关于这方面的建议都将不胜感激!

您需要一个 UDF 才能使用 fuzzywuzzy:

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|
+-----------+-----------+-------------+