计算数据帧行之间的相似性(通用计数值)

2024-03-29 10:36:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我想计算数据帧行之间的相似性。我有一些关于一些人的专栏。一排就是一个人。看起来是这样的:

 print(df)
        id  name      firstname  email                town    age
    0    1  martin    pierre     truc@machin.com      Paris   na
    1    2  dupond    sarah      bidule@machin.com    London  32
    2    3  dupond    sarah      bidule@machin.com    Berlin  32
    3    4  dupond    john       na                   Madrid  45
    4    5  smith     na         something@thing.com  Paris   28

如果至少完成了3列,我想为每行计算与其他行相同的值数除以列数。 例如,在索引为1的行和索引为2的行之间,共有4个变量。因此,我的相似度将是4/5(id不计算)=相似度的80%。 我的结果必须是一个相似性矩阵,因为在这之后我想找到相似性高于0.6的行来构建一个新的数据帧。 可能是这样的:

 print(similarity)
        0    1    2    3    4
    0   1    0    0    0    0.2
    1   0.2  1    0.8  0.2  0
    2   0    0.8  1    0.2  0
    3   0    0.2  0.2  1    0
    4   0.2  0    0    0    1

因为结果是重复的,所以一半就足够了:

 print(similarity)
        0    1    2    3    4
    0        0    0    0    0.2
    1             0.8  0.2  0
    2                  0.2  0
    3                       0
    4 

我正在寻找一个功能,将自动化,但我找不到。这样的事情存在吗? 感谢阅读,欢迎您提出任何建议或想法


Tags: 数据namecomiddf相似性printparis
1条回答
网友
1楼 · 发布于 2024-03-29 10:36:24

可以将^{}与自定义距离函数一起使用

from scipy.spatial.distance import pdist, squareform
pd.DataFrame(1 - squareform(pdist(df.set_index('id'), lambda u,v: (u != v).mean())))

输出:

     0    1    2    3    4
0  1.0  0.0  0.0  0.0  0.2
1  0.0  1.0  0.8  0.2  0.0
2  0.0  0.8  1.0  0.2  0.0
3  0.0  0.2  0.2  1.0  0.0
4  0.2  0.0  0.0  0.0  1.0

相关问题 更多 >