首页 > 解决方案 > 计算两个熊猫列之间向量的余弦相似度?

问题描述

我有以下 Pandas Dataframe,需要逐行查找余弦相似度。但我的代码返回一个值矩阵。

import pandas as pd
from sklearn.metrics.pairwise import cosine_similarity

df = pd.DataFrame({"a" : [[0.1, 0.2],[0.5,0.3,0.3],[0.5]], "b" : [[0.1,0.2],[0.2,0.3,0.4],[0.5]]})

cosine_similarity(df["a"].tolist(), df["b"].tolist())

我需要有一个额外的列和每行的余弦值的输出。

标签: python-3.xcosine-similarity

解决方案


如果您只想计算列a和列值之间每一行的余弦相似度,则更b容易使用余弦距离并将结果从 1 中减去以获得余弦相似度

from scipy.spatial.distance import cosine

df['cosine'] = df.apply(lambda row: 1 - cosine(row['a'], row['b']), axis=1)
df

输出:

                 a                b    cosine
0       [0.1, 0.2]       [0.1, 0.2]  1.000000
1  [0.5, 0.3, 0.3]  [0.2, 0.3, 0.4]  0.877866
2            [0.5]            [0.5]  1.000000


推荐阅读