首页 > 解决方案 > 使用 pandas 如何迭代 2 个备用向量行,使用 scipy 计算并保存到新列

问题描述

祝大家平安度过圣诞快乐;

我在 pandas DataFrame 上有嵌入句子的稀疏向量,如下所示;

title_emb                                           text_emb
[[2, 6294, 4076, 346, 10231, 16068, 8654, 1191...   [[2, 11830, 18726, 16331, 4474, 4083, 2654, 41...
[[2, 6451, 6230, 2513, 107, 12202, 6538, 4176,...   [[2, 10082, 29402, 4039, 21982, 23, 4029, 6766...
...
[[2, 8403, 8569, 4234, 6706, 4482, 23033, 4136...   [[2, 8569, 4234, 6706, 4482, 145, 23033, 4136,...
175846 rows × 2 columns

我想使用 scipy.spatial.distance.cdist 库添加不同类型的相似性,并遇到我给定数据不是二维数组的错误。

查看 scipy doc, cdist(XA,XB,'similarity_name') 其中 XA 和 XB 是 2-dim 稀疏向量

train['euclidean'] = cdist(train['title_emb'],train['text_emb'], 'euclidean')
train['cosine'] = cdist(train['title_emb'],train['text_emb'], 'cosine')
train['hamming'] = cdist(train['title_emb'],train['text_emb'], 'hamming')
train['jaccard'] = cdist(train['title_emb'],train['text_emb'], 'jaccard')

这给出了错误,但下面没有

print(cdist(train['title_emb'][175846],train['text_emb'][175846], 'euclidean'))
print(cdist(train['title_emb'][175846],train['text_emb'][175846], 'cosine'))
print(cdist(train['title_emb'][175846],train['text_emb'][175846], 'jaccard'))

哪个应该是计算并将其保存到 DataFrame 的最快方法?

  1. 使用for循环,保存到列表并放入DataFrame
  2. 使用 df.iterrow,保存到列表并将其放入 DataFrame
  3. 有没有办法修复上面的代码并将其直接保存到DataFrame?
  4. 其他方式,如 df.apply( function )

标签: pythonpandasdataframescipy

解决方案


推荐阅读