如何将Levenshtein方法计算结果作为列添加至现有DataFrame?
解决方案
问题原因
你当前的代码中,lev_distance_a_b变量在循环里会被每次迭代的结果覆盖,最终只保留最后一次计算的距离值,所以赋值给DataFrame列时整行都填充这个最后值。
方法一:用列表收集所有计算结果
先初始化一个空列表,在循环中把每对元素的Levenshtein距离添加到列表,最后将整个列表赋值给新列:
# 初始化空列表存储所有距离 lev_distances = [] a = df.a.to_numpy() b = df.b.to_numpy() for i, k in zip(a, b): dist = lev.distance(i, k) lev_distances.append(dist) # 将列表赋值给DataFrame的新列 df['a_b'] = lev_distances print(df)
方法二:使用Pandas的apply方法(更简洁高效)
直接对DataFrame的每行应用Levenshtein距离计算,避免手动循环,适合处理4000行的数据集:
# 定义计算函数 def calculate_lev(row): return lev.distance(row['a'], row['b']) # 应用到每行,生成新列 df['a_b'] = df.apply(calculate_lev, axis=1) print(df)
也可以用lambda表达式简化写法:
df['a_b'] = df.apply(lambda row: lev.distance(row['a'], row['b']), axis=1)
这样处理后,a_b列会正确对应每行的Levenshtein距离值,不会出现全列都是最后一个结果的问题。
内容的提问来源于stack exchange,提问作者Pauli du Plooy
相关产品推荐
相关产品推荐

