python - 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']]
解决方案
推荐阅读
- c# - 如何使用 KeyUp 键在特定光标位置执行鼠标单击?
- excel - vba 根据结果将某些列表显示为下拉列表
- node.js - 如何读取 CosmosDB 中的所有项目——防止返回 [object Object]
- firebase - Flutter:在 Firebase 中读取大量节点
- c - 如何对 gcc 编译器进行源代码覆盖
- c - 是否可以仅对不重叠的字符串使用 strtok 函数?
- linkedin - 为什么 LinkedIn API 显示 iPhone 和 Web 浏览器的不同权限?
- javascript - 拖放的几个问题
- html - 有没有办法用 CSS 隐藏没有任何 id 和 class 的特定跨度?
- wordpress - 带有自定义分类的自定义帖子类型的单页不起作用