【问题标题】:Python Fuzzywuzzy matching with process and add info from comparing dataframePython Fuzzywuzzy 与进程匹配并通过比较数据框添加信息
【发布时间】:2022-01-10 16:40:48
【问题描述】:

我正在尝试使用fuzzywuzzy 与进程匹配来自两个数据框(在名称列中)的名称。结果应该是 df1(dfdum) 与 df2(dfpep) 中的最佳匹配名称和相似度得分。这与下面的代码配合得很好,但除了匹配的名称和分数之外,我还想在结果中将更多列从 df2 附加到 df1。 df2 中属于匹配名称的出生日期和居住国家也应添加到 df1。我不能简单地合并名称,因为有重复。

谁能帮我修改代码,以便我可以从 df2 的匹配名称中添加额外信息?因此,我想向 df1 添加两个额外的列,其中包含来自 df2 的匹配名称的相关信息。

pep_name = []
sim_name = []
for i in dfdum.NAME:
        ratio = process.extract(i, dfpep.NAME, limit=1,scorer=fuzz.token_set_ratio)
        pep_name.append(ratio[0][0])
        sim_name.append(ratio[0][1])
dfdum['pep_name'] = pd.Series(pep_name)
dfdum['sim_name'] = pd.Series(sim_name)

【问题讨论】:

    标签: python string-matching fuzzywuzzy


    【解决方案1】:

    您可以在 dfpep.NAME 中找到最佳匹配的索引,并使用它来检索其他两列的对应值。

    这段代码(带有一些模拟数据)应该会给你想要的结果;不过,它假定 dfpep.NAME 只有唯一值。

    请注意,我远不是熊猫专家,所以这个解决方案绝不是最快或最优雅的,但它应该可以完成工作:)

    另外,我觉得应该有一种方法可以在没有 for 循环的情况下做到这一点;也许这里有人对此有想法。

    import pandas as pd
    from fuzzywuzzy import process, fuzz
    
    dfdum = pd.DataFrame(["Johnny", "Peter", "Ben"])
    dfdum.columns = ["NAME"]
    
    dfpep = pd.DataFrame(["Pete", "John", "Bennie"])
    dfpep.columns = ["NAME"]
    
    dfpep["dob"] = pd.Series(["1990", "1991", "1992"])
    dfpep["cor"] = pd.Series(["USA", "UK", "Germany"])
    
    pep_name = []
    sim_name = []
    dob = []
    cor = []
    
    for i in dfdum.NAME:
        ratio = process.extract(i, dfpep.NAME, limit=1, scorer=fuzz.token_set_ratio)
        pep_name.append(ratio[0][0])
        sim_name.append(ratio[0][1])
    
        j = dfpep.index[dfpep.NAME == ratio[0][0]].tolist()[0]
    
        dob.append(dfpep['dob'][j])
        cor.append(dfpep['cor'][j])
    
    dfdum['pep_name'] = pd.Series(pep_name)
    dfdum['sim_name'] = pd.Series(sim_name)
    dfdum['dob'] = pd.Series(dob)
    dfdum['cor'] = pd.Series(cor)
    
    print(dfdum)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-22
      • 1970-01-01
      • 2017-10-25
      • 1970-01-01
      • 1970-01-01
      • 2017-07-16
      • 2016-08-12
      相关资源
      最近更新 更多