gpt4 book ai didi

python - 连接两个数据框的模糊匹配

转载 作者:行者123 更新时间:2023-12-01 00:16:24 24 4
gpt4 key购买 nike

我有 2 个餐厅信息数据框需要合并。

df1 = pd.DataFrame ({'Restaurant_Name': ['Apple', 'Banana', 'Orange', 'apple','apple1'],
'Postal Code': [12345, 12345, 54321, 54321,1111]})
df2 = pd.DataFrame ({'Restaurant_Name': ['apple', 'apple', 'Banana'],
'Postal Code': [12345, 54321, 12345],
'Phone':[100,200,300]})
<小时/>

d1:
df1


df2:
df2

  • 每家餐厅都有一个邮政编码(不是唯一的,2家餐厅可以位于同一个地方)。所以我无法基于合并数据框邮政编码。
  • 但是具有相同邮政编码的餐厅可以通过以下方式区分:他们的名字。
  • 餐厅名称的拼写略有不同,因此我也无法根据餐厅名称进行合并

理想情况下,我想生成一个如下所示的表格: df3

我尝试根据模糊匹配和邮政编码匹配来匹配餐厅名称,但无法获得非常准确的结果。我还尝试将每个数据帧的餐厅名称与邮政编码连接起来,并对连接结果进行模糊匹配,但我认为这不是最好的方法。

有什么方法可以实现 100% 匹配两个数据帧的准确率吗?

最佳答案

检查difflib.get_close_matches()

我使用您的示例数据框尝试了此操作。有帮助吗?

import pandas as pd
import difflib

df1 = pd.DataFrame ({'Restaurant_Name': ['Apple', 'Banana', 'Orange', 'apple','apple1'],
'Postal Code': [12345, 12345, 54321, 54321,1111]})
df2 = pd.DataFrame ({'Restaurant_Name': ['apple', 'apple', 'Banana'],
'Postal Code': [12345, 54321, 12345],
'Phone':[100,200,300]})

df1['key'] = df1['Restaurant_Name']+df1['Postal Code'].astype(str)
df2['key'] = df2['Restaurant_Name']+df2['Postal Code'].astype(str)
df2['key'] = df2['key'].apply(lambda x: difflib.get_close_matches(x, df1['key'])[0])

df1.merge(df2, on='key', how='outer')[['Restaurant_Name_x','Restaurant_Name_y','Postal Code_x','Phone']]

输出:

  Restaurant_Name_x Restaurant_Name_y  Postal Code_x  Phone
0 Apple apple 12345 100.0
1 Banana Banana 12345 300.0
2 Orange NaN 54321 NaN
3 apple apple 54321 200.0
4 apple1 NaN 1111 NaN

正如您所说,我确实将餐厅名称与邮政编码连接起来以获得唯一的组合。

关于python - 连接两个数据框的模糊匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59299081/

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