我有以下Pandas数据框,需要按行查找余弦相似度。但是我的代码返回值矩阵。
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())
我需要有一个额外的列和每行余弦值的输出。
答案 0 :(得分:0)
如果只想为列a
和列b
的值之间的每一行计算余弦相似度,则使用cosine distance并减去结果{{3 }}。
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