加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何基于相似性函数合并两个pandas DataFrame?

发布时间:2020-12-14 04:42:14 所属栏目:大数据 来源:网络整理
导读:给定数据集1 name,x,yst. peter,1,2big university portland,3,4 和数据集2 name,ysaint peter3,4uni portland,5,6 目标是合并 d1.merge(d2,on="name",how="left") 虽然名字上没有确切的匹配.所以我想做一种模糊匹配.在这种情况下,该技术无关紧要,更多如何将
给定数据集1

name,x,y
st. peter,1,2
big university portland,3,4

和数据集2

name,y
saint peter3,4
uni portland,5,6

目标是合并

d1.merge(d2,on="name",how="left")

虽然名字上没有确切的匹配.所以我想做一种模糊匹配.在这种情况下,该技术无关紧要,更多如何将其有效地融入熊猫.

例如,st.彼得可能在另一方面与圣彼得相匹敌,但是大学波特兰可能是一个偏差太大,我们不会与大都会波特兰相提并论.

考虑它的一种方法是允许加入最低的Levenshtein距离,但仅限于低于5次编辑(st. – > saint为4).

结果数据帧应仅包含行st. peter,包含“名称”变体,以及x和y变量.

有没有办法使用熊猫进行这种合并?

解决方法

你看过 fuzzywuzzy吗?

你可以这样做:

import pandas as pd
import fuzzywuzzy.process as fwp

choices = list(df2.name)

def fmatch(row): 
    minscore=95 #or whatever score works for you
    choice,score = fwp.extractOne(row.name,choices)
    return choice if score > minscore else None

df1['df2_name'] = df1.apply(fmatch,axis=1)
merged = pd.merge(df1,df2,left_on='df2_name',right_on='name',suffixes=['_df1','_df2'],how = 'outer') # assuming you want to keep unmatched records

警告Emptor:我没有尝试过这个.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读