Python中数据帧中每一行之间的余弦相似性

Python中数据帧中每一行之间的余弦相似性,python,pandas,dataframe,scikit-learn,Python,Pandas,Dataframe,Scikit Learn,我有一个包含多个向量的数据帧,每个向量有3个条目。在我的表示中,每一行都是一个向量。我需要计算每个向量之间的余弦相似性。将其转换为矩阵表示更好,或者在数据帧本身中是否有更干净的方法 这是我尝试过的代码 import pandas as pd from scipy import spatial df = pd.DataFrame([X,Y,Z]).T similarities = df.values.tolist() for x in similarities: for y in sim

我有一个包含多个向量的数据帧,每个向量有3个条目。在我的表示中,每一行都是一个向量。我需要计算每个向量之间的余弦相似性。将其转换为矩阵表示更好,或者在数据帧本身中是否有更干净的方法

这是我尝试过的代码

import pandas as pd
from scipy import spatial
df = pd.DataFrame([X,Y,Z]).T
similarities = df.values.tolist()

for x in similarities:
    for y in similarities:
        result = 1 - spatial.distance.cosine(x, y)
你可以直接使用

演示

import numpy as np; import pandas as pd
from sklearn.metrics.pairwise import cosine_similarity

df = pd.DataFrame(np.random.randint(0, 2, (3, 5)))

df
##     0  1  2  3  4
##  0  1  1  1  0  0
##  1  0  0  1  1  1
##  2  0  1  0  1  0

cosine_similarity(df)
##  array([[ 1.        ,  0.33333333,  0.40824829],
##         [ 0.33333333,  1.        ,  0.40824829],
##         [ 0.40824829,  0.40824829,  1.        ]])

请分享您迄今为止所做的尝试,以便我们能够适当地帮助您。@JayanthPrakashKulkarni:在您使用的for循环中,您也在计算行与自身的相似性。您也不需要嵌套循环。迭代行数-1,并计算
df.iloc[i,:]
df.iloc[i+1,:]
之间的余弦相似性。或者,您可以研究数据帧的
应用方法。@ClockSlave感谢您的宝贵意见。我一定会尝试使用DataFrame的apply方法。我尝试过使用您的代码。似乎没有返回相同的数据帧。@Dr.DOOM遗漏了一个
。重塑
,修复了!