You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas中如何逐行计算同列其他行的Levenshtein距离平均值并新增列

实现方法

你可以直接通过 pandas 的apply方法实现需求,适合小数据量场景的代码如下:

import pandas as pd

# 你已实现的距离计算函数
def lev_dist(string_1,string_2):
    '''
    该函数已完成实现,可返回两个输入字符串的距离值
    '''
    pass

# 你已有的DataFrame
df = pd.DataFrame({'words': ['cat','bat','mat','dog']})

# 逐行计算平均距离
df['avg_distance'] = df['words'].apply(
    lambda current_word: df['words'][df['words'] != current_word].apply(
        lambda compare_word: lev_dist(current_word, compare_word)
    ).mean()
)

逻辑说明

  • 外层apply遍历words列的每一个字符串作为当前计算的基准词
  • 首先筛选出同列所有不等于基准词的字符串,逐个计算和基准词的Levenshtein距离
  • 对所有距离取平均值,赋值给当前行的avg_distance列

如果你的数据量较大,双重apply的执行效率较低,可以用纯Python循环提前计算所有平均值再赋值,优化性能:

word_list = df['words'].tolist()
avg_res = []

for cur in word_list:
    dist_sum = 0
    cnt = 0
    for w in word_list:
        if w != cur:
            dist_sum += lev_dist(cur, w)
            cnt += 1
    avg_res.append(dist_sum / cnt)

df['avg_distance'] = avg_res

结果验证

以你给出的示例数据为例,最终输出结果如下:

wordsavg_distance
cat1.666667
bat1.666667
mat1.666667
dog3.000000

内容的提问来源于stack exchange,提问作者Fardin Ahsan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 22:36:04