繁体   English   中英

Python Pandas-模糊重复匹配

[英]Python Pandas - Fuzzy duplicates matching

我有一个这样的数据框:

    make                model
0   allard              K1
1   alllard             J2
2   alpine renault      A110
3   alpine renualt      A310
4   amc (rambler        American
5   amc (rambler)       Marlin
6   aries               1907
7   ariès               1932
8   austin healey       3000
9   austin-healey       Sprite
10  benjamin et benova  Type B3
11  benjamin/benova     Type P2
12  benjmin/benova      Type P3

目标将是使第三列的行索引具有最高模糊比(最接近的模糊匹配)。

如何有效地比较行?

使用fuzzywuzzy ,并假设应该为make列匹配模糊性,您可以尝试:

import pandas as pd
from itertools import product
from fuzzywuzzy.fuzz import ratio

df = pd.read_csv('data.csv')
keys = list(set(df['make']))
ratios = pd.DataFrame([{'k1': k1, 'k2': k2, 'ratio': ratio(k1, k2)} for k1, k2 in product(keys, keys) if k1 != k2])

def find_closest(make):
    return df[df['make'] == ratios.loc[ratios[ratios['k1'] == make]['ratio'].argmax(), 'k2']].index.values[0]

df['closest_index'] = df['make'].apply(find_closest)

print(df)

输出数据:

                  make     model  closest_index
0               allard        K1              1
1              alllard        J2              0
2       alpine renault      A110              3
3       alpine renualt      A310              2
4         amc (rambler  American              5
5        amc (rambler)    Marlin              4
6                aries      1907              7
7                ariès      1932              6
8        austin healey      3000              9
9        austin-healey    Sprite              8
10  benjamin et benova   Type B3             11
11     benjamin/benova   Type P2             12
12      benjmin/benova   Type P3             11

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM