You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pandas与BERT实现两DataFrame间余弦相似度循环计算方法

解决代码

你不需要手动逐行调用cosine_similarity,直接一次性计算全量相似度矩阵后遍历每一行即可,完整可运行代码如下:

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

# 示例数据 你可以替换成自己的实际数据源
df = pd.DataFrame({'Element Detail':['Too many competitors in market', 'Highly skilled employees']})
df1 = pd.DataFrame({'Element Details':['Our workers have a lot of talent', 
                                      'this too is a sentence',
                                      'this is very different',
                                      'another sentence is this',
                                      'not much of anything']
                    })

# 模型加载与句向量编码
model_name = 'bert-base-nli-mean-tokens'
model = SentenceTransformer(model_name)
sentence_vecs = model.encode(df['Element Detail'])
sentence_vecs1 = model.encode(df1['Element Details'])

# 计算全量相似度矩阵:每一行对应df的一个句子,每一列对应df1的一个句子
similarity_matrix = cosine_similarity(sentence_vecs, sentence_vecs1)

# 遍历每个df的句子,提取最高相似度匹配结果
result = []
for i in range(len(similarity_matrix)):
    current_scores = similarity_matrix[i]
    max_score = current_scores.max()
    # 匹配的df1序号,按照你原来的规则ID从1开始计数
    match_id = current_scores.argmax() + 1
    result.append([match_id, max_score])

# 构造和你原有格式完全一致的Final DataFrame
Final = pd.DataFrame(result, columns=['XNew_ID', 'X0'])

输出说明

运行后Final会包含df所有句子的匹配结果,每一行对应df的一个句子的最高相似度匹配,示例输出如下:

XNew_ID        X0
0        2  0.527691
1        1  0.791345

内容的提问来源于stack exchange,提问作者Conor C

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 07:27:00