如何计算 pandas 数据框上基于字母的相似度
How to count letter based similarity on pandas dataframe
这是我的第一个数据框df1
Id Text
1 dFn
2 fiqe
3 raUw
这是我的第二个数据框df2
Id Text
1 yuw
2 dnag
相似度矩阵,列是 Id
来自 df1
,行是 Id
来自 df2
1 2 3
1 0 0 0.66
2 0.5 0 0.25
注:
0
值在 (1,1), (2,1) 和 (3,2) 因为没有字母相似
0.25
(3,1) 中的值是因为只有来自 raUw
的 1 个字母在 4 个字母“dnag”中可用(1/4 等于 0.25)
0.5
4个字母中有2个相似
0.66
是因为 3 个词中有 2 个相似
IIUC,一种选择是在嵌套列表理解中使用 set.intersection
:
out = pd.DataFrame([[len(set(x.lower()) & set(y.lower())) / len(x) for y in df1['Text'].tolist()] for x in df2['Text'].tolist()])
输出:
0 1 2
0 0.0 0.0 0.666667
1 0.5 0.0 0.250000
这是我的第一个数据框df1
Id Text
1 dFn
2 fiqe
3 raUw
这是我的第二个数据框df2
Id Text
1 yuw
2 dnag
相似度矩阵,列是 Id
来自 df1
,行是 Id
来自 df2
1 2 3
1 0 0 0.66
2 0.5 0 0.25
注:
0
值在 (1,1), (2,1) 和 (3,2) 因为没有字母相似
0.25
(3,1) 中的值是因为只有来自 raUw
的 1 个字母在 4 个字母“dnag”中可用(1/4 等于 0.25)
0.5
4个字母中有2个相似
0.66
是因为 3 个词中有 2 个相似
IIUC,一种选择是在嵌套列表理解中使用 set.intersection
:
out = pd.DataFrame([[len(set(x.lower()) & set(y.lower())) / len(x) for y in df1['Text'].tolist()] for x in df2['Text'].tolist()])
输出:
0 1 2
0 0.0 0.0 0.666667
1 0.5 0.0 0.250000