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

Python 如何将一个数据帧中的每一行与另一个数据帧中的所有行进行比较,并计算距离度量?,python,string,pandas,dataframe,comparison,Python,String,Pandas,Dataframe,Comparison,我有两个不同的客户数据帧,我想根据Jaccard距离矩阵或任何其他方法匹配它们 df1 df2 输出: 如果字符串比较值大于>0.6, 我想在新的数据框中合并这两行 Df3 我试着根据每一行计算每一行,但不知道如何将每一行与另一个数据帧中的整行进行比较?我想使用fuzzyfuzzy from fuzzywuzzy import process df1['key'] = df1.sum(1) df2['key'] = df2.sum(1) def yoursource(x): if

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

df1

df2

输出:

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

Df3


我试着根据每一行计算每一行,但不知道如何将每一行与另一个数据帧中的整行进行比较?

我想使用
fuzzyfuzzy

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)

之后,我们使用
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

您能告诉我如何合并不同数据帧中显示的不同列吗?例如,我在df1中有3列,在df2中有5列。我只想比较两列,但我想在新列表中添加所有列dataframe@Raj将此部分更改为df1['key']=df1[['col1','col2']]。总和(1)df2['key']=df2[['col1','col2']]。总和(1)是否有可能计算并比较一个数据帧中的行数据的每个单元格值与另一个数据帧中的行数据的每个单元格值,并找出平均大于0.6的行值?您希望从这笔奖金中得到什么?具体来说,您不满意当前接受的答案是什么?比较表1的第1列与表2的第1列之间的距离,以及表1的第2列与表2的第2列之间的距离,依此类推。最后从两次比较中取平均分。如果你问我的话,似乎有点太宽泛了。你的尝试在哪里?最好就你的后续问题提出一个新问题
    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
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)
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