首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于两列模糊匹配的数据合并

基于两列模糊匹配的数据合并
EN

Stack Overflow用户
提问于 2019-12-09 23:36:16
回答 1查看 105关注 0票数 0

我尝试根据ID和辅助ID合并两个数据文件。以下是两个数据文件的示例:

代码语言:javascript
复制
First ID                  Second ID               Company
10056526008010            0.000000e+00            Company A
10022337820851            8.152050e+11            Company B
722337820853              8.152050e+11            Company C
10056526008010            0.000000e+00            Company E
10022337820851            6.290250e+11            Company D
代码语言:javascript
复制
First ID                  Second ID               Company               Availability
878968000512              0.000000e+00            Company F             Y
10022337820851            8.152050e+11            Company B             Y
10022337820851            8.152050e+11            Company B             Y
722337820853              8.152050e+11            Company C             N
10056526008010            0.000000e+00            Company E             N
10056526008010            0.000000e+00            Company G             N
10022337820851            6.290250e+11            Company D             Y

我希望能够根据第一个ID与第一个ID的匹配进行合并,然后检查二级ID是否匹配,如果匹配,则应该合并,如果不匹配,则不应该合并(我怀疑需要内部合并)。如果次要ID为0,则应执行公司名称的模糊匹配。有办法这样做吗?所需的输出如下所示:

代码语言:javascript
复制
First ID                  Second ID               Company           Availability
10022337820851            8.152050e+11            Company B         Y
722337820853              8.152050e+11            Company C         N    
10056526008010            0.000000e+00            Company E         N
10056526008010            0.000000e+00            Company G         N
10022337820851            6.290250e+11            Company D         Y

这样,首先根据第一个ID匹配2个数据,然后使用第二个ID检查重复的ID,如果第二个ID为0时,将执行基于Company的类似匹配。如果第二个ID或Company没有匹配,那么该行就不会进行合并。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-09 23:50:25

假设数据为df1df2,那么您可以首先对id使用merge,然后对次要id为0的情况进行筛选:

代码语言:javascript
复制
merged = df1.merge(df2, on=['First ID', 'Second ID'], suffixes=('_left', '_right'))
mask = fuzzy_match(merged['Company_left'], merged['Company_right']) | merged['Second ID_left'] != 0
merged[mask]

这里,fuzzy_match是一个函数,它接受两个序列并返回一个布尔序列或数组。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59258177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档