首页 > 解决方案 > Pandas:在具有多个条件的两个 DataFrame 之间进行匹配

问题描述

我有两个看起来像这样的数据框:

df1:

address            city           zip5       sale_price
110 PEACH CT       FAKEVILLE      11111      900.78
123 HAPPY ST       NICEVILLE      22222      802.25
312 BEAU RD        PLACELAND      33333      751.00

df2:

zip5   address           record_id  city       state  full_name                                              
11111  110 PEACH CT      1000       FAKEVILLE  MS     person_1
22222  110 PEACH CT      1001       OTHERPLACE TX     person_2
33333  110 PEACH CT      1002       PLACEVILLE MT     person_3
11111  510 CATTLE LN     1003       DANDY      NM     person_4

目标:我想创建一个第三个 df,“df_final”,它包含地址上的合并记录,其中 df1 的 zip5 和 df2 的 zip5 完全匹配,并且地址模糊匹配百分比。

如果 zip5 不完全匹配,我想跳到下一条记录,因为如果 zip 不相等,就没有必要模糊匹配地址。

目前我正在这样做,但它效率不高,因为它首先进行模糊匹配,然后如果 zip 不匹配则丢弃。接受任何建议。只玩熊猫的第二周。

df1['address'] = df1['address'].progress_apply(lambda val: val if (difflib.get_close_matches(val, df2['address'], cutoff=0.6)) else None)

df_final = df1.merge(df2, how='inner',on='address')

df_final = df_final[df_final['zip5'] == df_final['zip5']]

标签: pythonpandasdataframe

解决方案


推荐阅读