python - 我们如何获得两列中值的相似度?
问题描述
我正在尝试在数据框(Python)中的列之间找到相似性。我可以得到 % 或(介于 0 和 1 之间)的相似度吗?
我能够在 python 中找到 vlookup 替代方案,我知道我可以加入哪一列(参考:在 Pandas 中使用 join 的 vlookup)但我不确定第二个数据框的哪一列我会有特定的匹配(我想要 vlookup针对第二个 DF 中的每一列,并希望找到相似性)。
df.merge(df1, on='id', how='left')
例 1:
id name flag
128 shyam T
129 ram F
130 alex F
131 chinming F
132 jose T
133 khader T
例 2:
ex_id hig
129 FULL
130 LOW
133 MID
例 3:
c_id loc
129 hy
132 tx
134 ca
我不确定要与上面列出的两个数据帧中的任何一个加入什么,但我想在 Ex 1 的数据帧中找到不同列之间的关系或相似性。
解决方案
假设您要比较单个数据框中两列的相似性,您可以使用 Spacy 执行类似的操作。
导入所需的包
import pandas as pd
import spacy
import en_core_web_sm
nlp = en_core_web_sm.load()
创建示例数据框
df = pd.DataFrame({
"A": ["Cat", "Puppy", "Small Fish"],
"B": ["Cat", "Dog", "Fish"],
"C": ["Kitten", "Pikachu", "Large Goldfish"],
"D": ["Lion", "Charmander", "Goldfish"]})
创建函数来比较两个字符串的相似性
def get_similarity(term1, term2):
tokens = nlp(term1 + " " + term2)
print(tokens[0].text, "|",tokens[1].text, tokens[0].similarity(tokens[1]))
return tokens[0].similarity(tokens[1])
将函数应用于新列 - 下面将创建一个列 A 和 B 之间具有相似度分数的列
df['A_B_similarity'] = df.apply(lambda x: get_similarity(x['A'], x['B']), axis = 1)
你最终得到一个看起来像这样的数据框
有关更多信息,请转到此处 向量相似性
推荐阅读
- node.js - 使用 nodemon 和 babel Express Nodejs 应用程序崩溃而没有错误消息
- math - 负权重的加权平均计算
- android - 无法在 Firebase 中注册
- excel - “结束如果没有块如果”错误
- curl - 将 CURL 数据发送到 IBM Watson 进行识别
- mosquitto - mosquitto PSK 加密不起作用
- css - 在 Firefox 开发者工具中自动将 CSS “简写”转换为“简写”
- django - Django CMS 从 SQLite 迁移到 PostgreSQL
- excel - 使用 VBA 遍历 Excel OLAP 过滤器中的子项
- docker - 获取所有 docker compose 依赖项的版本列表?