我有一个数据框,看起来像(下面1表示有特征,0表示没有):
Person Trait_1 Trait_2 Trait_3 Trait_4
A 1 1 1 1
B 0 1 1 0
C 0 1 0 0
D 1 1 0 1
E 0 0 0 1
我想要一个函数,为每个人返回具有最多共同特征的前10名
因此,对于人A,输出可以是:
D (3 traits), B (2 traits), C(1 trait), E(1 trait)
我认为有一个矩阵,它看起来像是编码每个人与其他人有多少共同点,这将是一个良好的开端:
A B C D E
A 4 2 1 3 1
B 2 4 1 1 0
C 1 1 4 1 0
D 3 1 1 4 1
E 1 0 0 1 4
但我不知道如何实现这一目标,也不知道这叫什么
这更像是一个线性代数的答案,但如果你想知道人a和人B之间的共同特征的数量,你可以计算人a的线向量和人B的线向量的标量积(这只起作用,因为你的矩阵是二进制矩阵)
我不知道您使用的是什么框架/库,但如果您使用的是pandas,您可以轻松提取线向量并将其转换为numpy数组,然后进行标量积
尝试:
产出:
和您的函数(结果按降序排列):
输出
相关问题 更多 >
编程相关推荐