首页 > 解决方案 > 我们如何获得两列中值的相似度?

问题描述

我正在尝试在数据框(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 的数据帧中找到不同列之间的关系或相似性。

标签: pythonpython-3.xpandasdataframe

解决方案


假设您要比较单个数据框中两列的相似性,您可以使用 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)

你最终得到一个看起来像这样的数据框

在此处输入图像描述

有关更多信息,请转到此处 向量相似性


推荐阅读