如何将一个数据框的每一行与另一数据框的所有行进行比较,并计算距离度量?

Raj*_*Raj 2 python string comparison dataframe pandas

我有两个不同的客户数据框,我想根据Jaccard距离矩阵或任何其他方法来匹配它们。

df1

 Name     country            cost
    0    raj  Kazakhstan     23
    1    sam      Russia     243
    2  kanan     Belarus     2
    3    Nan         Nan     0
Run Code Online (Sandbox Code Playgroud)

df2

   Name     country   DOB
0   rak  Kazakhstan   12-12-1903
1   sim      russia   03-04-1994
2   raj     Belarus   21-09-2003
3  kane     Belarus   23-12-1999
Run Code Online (Sandbox Code Playgroud)

输出:

如果字符串比较值大于> 0.6,我想合并新数据框中的两行。

Df3

    Name     country   Name  country     cost   DOB
0    raj  Kazakhstan   rak   Kazakhstan  23     12-12-1903
1    sam      Russia   sim   russia      243    03-04-1994
2  kanan     Belarus   Kane  Belarus     2      23-12-1999
Run Code Online (Sandbox Code Playgroud)

我曾尝试对每一行进行每一行的计算,但不比较每一行与另一行中的整个行之间的比较吗?

WeN*_*Ben 6

我想用 fuzzywuzzy

from fuzzywuzzy import process

df1['key'] = df1.sum(1)
df2['key'] = df2.sum(1)


def yoursource(x):
    if [process.extract(x, df2.key.tolist(), limit=1)][0][0][1]>60:
        return [process.extract(x, df2.key.tolist(), limit=1)][0][0][0]
    else :
        return 'notmatch'

df1['key'] = df1.key.apply(yoursource)
Run Code Online (Sandbox Code Playgroud)

之后,我们使用 merge

df = df1.merge(df2, on='key', how='inner').drop('key',1)
df
  Name_x   country_x Name_y   country_y
0    raj  Kazakhstan    rak  Kazakhstan
1    sam      Russia    sim      russia
2  kanan     Belarus   kane     Belarus
Run Code Online (Sandbox Code Playgroud)