【问题标题】:How can we get the similarity for values in two columns?我们如何获得两列中值的相似度?
【发布时间】:2020-02-18 14:39:16
【问题描述】:

我正在尝试在数据框 (Python) 中的列之间查找相似性。我可以得到 % 或(介于 0 和 1 之间)的相似度吗?

我能够在 python 中找到 vlookup 替代方法,我知道我可以加入哪一列(参考:vlookup in Pandas using join) 但我不确定第二个数据框的哪一列我会有特定的匹配(我想对第二个 DF 中的每一列进行 vlookup 并希望找到相似性)。

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 的数据框中找到不同列之间的关系或相似性。

【问题讨论】:

  • 嘿!请问,你是想根据列的相似性加入两个数据帧,还是想在一个单一的数据帧中找到两列的相似性?
  • 嘿!我试图找到跨数据帧的列之间的相似性。在上面提到的示例中,如果我可以根据值的相似性(理想情况下在 0 到 1 范围内)将“id”映射到“ex_id”和“c_id”。 PS:必须进行多对多比较。谢谢

标签: python python-3.x pandas dataframe


【解决方案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)

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

如需了解更多信息,请转至herevectors-similarity

【讨论】:

    猜你喜欢
    • 2019-08-08
    • 2022-07-26
    • 2012-05-09
    • 1970-01-01
    • 2017-09-01
    • 2020-12-25
    • 1970-01-01
    • 2021-04-02
    相关资源
    最近更新 更多