我有两个数据帧,都有一个ID和一个包含字符串的列Name
。它们可能是这样的:
数据帧:
DF-1 DF-2
--------------------- ---------------------
ID Name ID Name
1 56 aaeessa 1 12 H.P paRt 1
2 98 1o7v9sM 2 76 aa3esza
3 175 HP. part 1 3 762 stakoverfl
4 2 stackover 4 2 lo7v9Sm
我想计算一个元素和所有其他元素之间的字符串相似性(例如:Jaccard,Levenshtein),并选择得分最高的一个。然后匹配这两个id,这样我就可以在以后加入完整的数据帧。生成的表格应如下所示:
结果:
^{pr2}$使用double for循环可以很容易地实现这一点,但我正在寻找一种优雅的(更快的)方法来完成这一点,可能是lambdas列表理解,或者一些pandas工具。可能是groupby
和{
编辑:数据帧具有不同的长度,此函数的目的之一是确定较小数据帧的哪些元素出现在较大的数据帧中并与之匹配,而丢弃其余的元素。因此在结果表中应该只出现匹配的id对,或者ID1-NaN对(假设DF-1
的行数多于DF-2
)。在
使用链接答案中的^{} 函数:
输出
^{pr2}$我建议您使用一个名为Python记录链接工具箱的库。在
导入库后,必须索引要比较的源,如下所示:
假设您想根据字符串的相似性进行比较,但它们并不完全匹配:
^{pr2}$如果你想要一个精确的匹配,你应该使用:
使用pandas重复数据消除包:https://pypi.org/project/pandas-dedupe/
您需要使用人工输入训练分类器,然后它将使用学习的设置来匹配整个数据帧。在
首先
pip install pandas-dedupe
然后尝试以下操作:您可以看到匹配的对被分配了一个集群和置信级别。不匹配的是
nan
。你现在可以随意分析这些信息了。也许只拿置信度在80%以上的结果为例。在相关问题 更多 >
编程相关推荐