如何改进代码计算DataFrame单元格与同列其余单元格的Cosine Similarity
改进代码实现指定单元格与同列所有单元格的余弦相似度计算
原代码仅实现了单个单元格文本与指定字符串的余弦相似度计算,以下是改进后的代码,可计算data.iloc[15]['Description']与同一列所有其他单元格的余弦相似度,并生成包含原数据索引、文本内容及相似度的结果表格:
import pandas as pd from sklearn.feature_extraction.text import CountVectorizer from sklearn.metrics.pairwise import cosine_similarity # 提取目标文本(DataFrame中索引为15的行,Description字段) target_text = data.iloc[15]['Description'] # 获取同列所有文本,保留原数据索引 all_texts = data['Description'] # 合并目标文本与所有待比较文本,确保词汇表拟合的一致性 combined_texts = pd.concat([pd.Series([target_text]), all_texts]) # 初始化词频向量器并完成拟合与转换 count_vectorizer = CountVectorizer() vector_matrix = count_vectorizer.fit_transform(combined_texts) # 分离目标文本向量和其他所有文本的向量 target_vector = vector_matrix[0] other_vectors = vector_matrix[1:] # 计算目标向量与所有其他向量的余弦相似度 similarity_scores = cosine_similarity(target_vector, other_vectors)[0] # 生成结构化结果表格 result_df = pd.DataFrame({ '原数据索引': all_texts.index, 'Description': all_texts.values, '与目标文本的余弦相似度': similarity_scores }) # 可选:剔除目标文本自身的行(相似度恒为1.0,按需保留或删除) result_df = result_df[result_df['原数据索引'] != 15] # 查看结果 print(result_df)
关键说明
- 词汇表一致性:将目标文本与所有待比较文本一起传入
CountVectorizer拟合,确保所有文本基于同一套词汇表生成向量,避免因词汇体系不一致导致的计算误差。 - 向量切片处理:拟合后的向量矩阵中,第一个元素对应目标文本的向量,剩余元素对应同列其他文本的向量,通过切片分离后完成相似度计算。
- 结果可读性:保留原数据的索引和文本内容,便于直接对应每个单元格与目标文本的相似度关系。
内容的提问来源于stack exchange,提问作者will
相关产品推荐
相关产品推荐

