问题
财务分析的表哥表姐们、整理调查问卷的师生们往往需要从表A的某列匹配查找表B的某些数据。如果表A某列完全等于表B某列,或是后者的子集,那么在excel里用vlookup或find类组合函数,或用“*”类通配符根据正则关系,可以轻松地完成这个匹配。
但假如这两列不满足这个条件,即表B某列不包含表A某列,那么简单依靠通配符和正则关系求解则很难奏效。以下图为例:
假设公司简称在表A,而其他几列在表B。我们希望通过公司简称匹配相应的公司全称和其他信息。根据上图我们看到,“万 科 A” 既不完全等于“万科企业股份有限公司”,也不属于后者的子集。“万”和“科”在后者出现过,而“A”则没有。另外再看到“深深房A”,对应的是“深圳经济特区房地产(集团)股份有限公司”。乍一看,“深”和“房”在后者出现过,可是前者怎么有2个“深”?
由上可见,公司简称并不是由公司全称通过单一规则简化而来,因此通配符和正则表达式的方式很难使用。
解决方案
为了解决类似,甚至更复杂的模糊匹配问题,我开发了这个小工具。打开dist文件夹下FuzzyMatch.exe,稍等2秒,按提示输入相应信息如下图所示:
将在dist文件夹下生成一个叫匹配表的文件。
该文件包含两个sheet。一个是匹配关系表。是将表A匹配列去重之后,与表B对应列一一对应的关系表。其中A列是表A的列,B列是表B的列,C列是匹配率,100为完全匹配,D列为表B的对应索引(即行的位置)。如下图我们可以看到,“万 科 A”和“深深房A”这样不规则关系也能匹配出来。
另一个表是匹配数据,相当于表A通过匹配关系表,连接了表B的所有数据,如下图所示:
备注
本文分享自 PowerBI x Python 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!