基于条件的数据子集 Fuzzywuzzy

Fuzzywuzzy on subset of data based on conditions

首先,请注意我是一个 python 新手,所以提前致歉。然而,我已经在最后一两天研究了这个,但没有成功 - 因此我的第一个 post 在这里。

我需要根据以下格式的 CSV 文件中的 'Name' 模糊匹配数据:

Code,Name,Location
123,Test data,LON
456,Data test,LON
789,Other,LON
1234,Test data,NYC

但是,我遇到的问题是,我希望 fuzzzywuzzy 只查看与迭代中相同位置代码的数据。 所以在我的第一个循环中,'Test data, LON' 不应该匹配 'Test data, NYC'.

这是我目前拥有的:

import pandas as pd
import numpy as np
from fuzzywuzzy import process
from fuzzywuzzy import fuzz

data = pd.read_csv('data.csv', delimiter=',', usecols=['Code', 'Name', 'Location'])

for index, row in data.iterrows():
    location = row['Location']
    name = row['Name']
    dd = data[data.Location == location ][['Name']]
    result = process.extractBests(name, dd, limit=3)
    print(result)    

上述背后的想法是循环遍历我的 DataFrame 以提取位置并将其用作过滤器以生成数据子集以供 fuzzywuzzy 匹配。

任何帮助,或在正确方向上的推动,将不胜感激。 谢谢。

编辑

我想要匹配输出如下,然后我可以考虑按我认为合适的方式进行布局:

('Test data', [('Test data', 100, 0), ('Test data', 100, 3), ('Data test', 95, 1), ('Other', 34, 2)])
('Data test', [('Data test', 100, 1), ('Test data', 95, 0), ('Test data', 95, 3), ('Other', 36, 2)])

尽管如此,此数据应该只包含来自相同 Location 的匹配项。

作为进一步的上下文,我有 11 万行数据,在 Name 列中有变化,我想找到这些变化。我只关心同一 Location 内的匹配项,因此认为没有必要根据我的整个 110k 数据集进行模糊查找。

如何使用您的列 "Location" 作为列表并遍历此列表:

import pandas as pd
import numpy as np
from fuzzywuzzy import process
from fuzzywuzzy import fuzz

data = pd.read_excel('data.xlsx')
location = list(data['Location'].drop_duplicates())
for i in location:
    datafiltered = data[data['Location'] == i ]
    for j in datafiltered['Name']:
        result = process.extractBests(j, datafiltered['Name'], limit=3)
        print(result) 

希望对您有所帮助。 BR