【发布时间】:2021-03-04 04:57:42
【问题描述】:
所以我使用 levenshire 距离来查找最接近的匹配项,并使用 this answer 作为基础替换大型数据框中的许多值:
import operator
def levenshteinDistance(s1, s2):
if len(s1) > len(s2):
s1, s2 = s2, s1
distances = range(len(s1) + 1)
for i2, c2 in enumerate(s2):
distances_ = [i2+1]
for i1, c1 in enumerate(s1):
if c1 == c2:
distances_.append(distances[i1])
else:
distances_.append(1 + min((distances[i1], distances[i1 + 1], distances_[-1])))
distances = distances_
return distances[-1]
def closest_match(string, matchings):
scores = {}
for m in matchings:
scores[m] = 1 - levenshteinDistance(string,m)
return max(scores.items(), key=operator.itemgetter(1))[0]
因此,当从另一个类似大小的数据帧(100k+ 行)中替换许多值时,需要永远运行:(从最后半小时开始运行!)
results2.products = [closest_match(string, results2.products)
if string not in results2.products else string
for string in results.products]
那么有没有办法更有效地做到这一点?我出于同样的目的添加了 if-else 条件,这样如果有直接匹配,就不会涉及任何也会产生相同结果的计算。
样本数据
results:
products
0, pizza
1, ketchup
2, salami
3, anchovy
4, pepperoni
5, marinara
6, olive
7, sausage
8, cheese
9, bbq sauce
10, stuffed crust
results2:
products
0, salaaaami
1, kechap
2, lives
3, ppprn
4, pizzas
5, marinara
6, sauce de bbq
7, marinara sauce
8, chease
9, sausages
10, crust should be stuffed
我希望将 results2 中的值替换为 results 中最接近的匹配项
【问题讨论】:
-
你能粘贴一些示例数据和预期的输出吗?
-
@VivekKalyanarangan 已添加!
标签: python python-3.x pandas