gpt4 book ai didi

python - 计算数据帧行之间的相似性(共同计数值)

转载 作者:行者123 更新时间:2023-12-04 01:11:37 26 4
gpt4 key购买 nike

我想计算数据框各行之间的相似度。我有一些专栏,其中包含有关某些人的信息。一排是一个人。看起来像这样:

 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

我正在寻找一个可以自动执行该操作的函数,但找不到。有这样的东西吗?感谢阅读,欢迎提出任何建议或想法。

最佳答案

您可以使用 scipy.spatial.distance.pdist具有自定义距离函数

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

关于python - 计算数据帧行之间的相似性(共同计数值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64646490/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com