python-3.x - 计算两个熊猫列之间向量的余弦相似度?
问题描述
我有以下 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())
我需要有一个额外的列和每行的余弦值的输出。
解决方案
如果您只想计算列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
推荐阅读
- c++ - 具有 lambda 函数的 C++ 线程
- python - 选择索引标签位于两个列表之一中的 Pandas 数据框行
- google-sheets - Google 表格:importhtml 查询中的参考单元格
- docker - 如何在 docker-compose 文件中初始化 PSQL 数据库?
- sql - 将逻辑事件组合在一起
- firebase - 即使身份验证失败,登录页面也允许用户进入应用程序
- python - 如何使用 SQLAlchemy 插入多对多关系数据?
- python - 如何仅获取目录中多个相同文件名中的第一个文件名?
- excel - 具有可变时间点的 Excel 绘图图
- c# - UWP - 仅使用 XAML 旋转图像同时使其与网格对齐