【发布时间】:2019-09-20 18:12:30
【问题描述】:
我有两个数据框,都有一个 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,以便我以后可以加入完整的数据帧。结果表应如下所示:
结果:
Result
-----------------
ID1 ID2
1 56 76
2 98 2
3 175 12
4 2 762
这可以使用双 for 循环轻松实现,但我正在寻找一种优雅(且更快)的方法来实现这一点,也许是 lambdas 列表理解或一些 pandas 工具。也许groupby 和idxmax 的一些组合用于相似度得分,但我自己无法完全提出解决方案。
编辑: DataFrame 具有不同的长度,此函数的目的之一是确定较小数据帧的哪些元素出现在较大数据帧中并匹配这些元素,丢弃其余元素。所以在结果表中应该只出现匹配的 ID 对,或 ID1 - NaN 对(假设 DF-1 的行数比 DF-2 多)。
【问题讨论】:
-
看看 Pandas Dedipe 库:pypi.org/project/pandas-dedupe 它有一个使用模糊匹配的记录链接功能。虽然速度不是很快,但会占用大量 CPU。
-
感谢您的回答,它适用于不同长度的数据帧吗?
-
看看我的
fuzzy merging函数 -
我会在下面添加一个示例