gpt4 book ai didi

python - 如何使用 fuzzywuzzy 比率将一个数据框中的值与另一个数据框中的列进行比较

转载 作者:行者123 更新时间:2023-12-02 19:45:38 28 4
gpt4 key购买 nike

我有一个包含 10 个解析地址的数据帧 df_sample,并将其与另一个包含数十万个解析地址记录 df 的数据帧进行比较。 df_sampledf 共享完全相同的结构:

zip_code     city        state     street_number    street_name   unit_number   country
12345 FAKEVILLE FLORIDA 123 FAKE ST NaN US

我想要做的是将df_sample中的单行与df中的每一行进行匹配,从state开始并仅获取行其中 fuzzy.ratio(df['state'], df_sample['state']) > 0.9 到新的数据帧中。一旦根据这些匹配创建了这个新的、更小的数据框,我将继续对城市、邮政编码等执行此操作。例如:

df_match = df[fuzzy.ratio(df_sample['state'], df['state']) > 0.9]

除非那不起作用。

我的目标是每次使用更难的搜索条件时缩小匹配数,并最终通过逐列缩小匹配数来获得尽可能少匹配的数据框。但我不确定如何对任何单个记录执行此操作。

最佳答案

创建数据框

import pandas as pd
from fuzzywuzzy import fuzz

df = pd.DataFrame({'key': [1, 1, 1, 1, 1],
'zip': [1, 2, 3, 4, 5],
'state': ['Florida', 'Nevada', 'Texas', 'Florida', 'Texas']})

df_sample = pd.DataFrame({'key': [1, 1, 1, 1, 1],
'zip': [6, 7, 8, 9, 10],
'state': ['florida', 'Flor', 'NY', 'Florida', 'Tx']})

merged_df = df_sample.merge(df, on='key')
merged_df['fuzzy_ratio'] = merged_df.apply(lambda row: fuzz.ratio(row['state_x'], row['state_y']), axis=1)
merged_df

你得到每对的模糊比率

    key  zip_x  state_x  zip_y  state_y  fuzzy_ratio
0 1 6 florida 1 Florida 86
1 1 6 florida 2 Nevada 31
2 1 6 florida 3 Texas 17
3 1 6 florida 4 Florida 86
4 1 6 florida 5 Texas 17
5 1 7 Flor 1 Florida 73
6 1 7 Flor 2 Nevada 0
7 1 7 Flor 3 Texas 0
8 1 7 Flor 4 Florida 73
9 1 7 Flor 5 Texas 0
10 1 8 NY 1 Florida 0
11 1 8 NY 2 Nevada 25
12 1 8 NY 3 Texas 0
13 1 8 NY 4 Florida 0
14 1 8 NY 5 Texas 0
15 1 9 Florida 1 Florida 100
16 1 9 Florida 2 Nevada 31
17 1 9 Florida 3 Texas 17
18 1 9 Florida 4 Florida 100
19 1 9 Florida 5 Texas 17
20 1 10 Tx 1 Florida 0
21 1 10 Tx 2 Nevada 0
22 1 10 Tx 3 Texas 57
23 1 10 Tx 4 Florida 0
24 1 10 Tx 5 Texas 57

然后过滤掉你不想要的

mask = (merged_df['fuzzy_ratio']>80)
merged_df[mask]

结果:

    key  zip_x  state_x  zip_y  state_y  fuzzy_ratio
0 1 6 florida 1 Florida 86
3 1 6 florida 4 Florida 86
15 1 9 Florida 1 Florida 100
18 1 9 Florida 4 Florida 100

关于python - 如何使用 fuzzywuzzy 比率将一个数据框中的值与另一个数据框中的列进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59312265/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com