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

Pandas DataFrame如何高效计算跨列同索引值的编辑距离均值

低效原因说明

你最初写的4层嵌套循环,以及网上查到的跨元素两两计算方案,性能差的核心原因是做了大量完全不需要的计算:你的需求是同索引位置的元素比对,根本不需要把A列的每个值和B列的所有值逐一匹配,这类无意义的跨索引计算会把时间复杂度拉到O(n²m²)级别,数据量稍大就会卡死。

高效实现方案

核心优化点有三个:

  • 只按行索引对齐计算:两列的平均编辑距离 = 同位置元素编辑距离总和 / 总行数,直接砍掉所有跨索引的无效计算,时间复杂度直接降到O(m²n)(m为列数,n为行数)
  • 用C实现的编辑距离库替代纯Python手写逻辑,计算速度可以提升1~2个数量级,推荐使用python-Levenshtein库的distance函数
  • 列组合遍历去重:col1和col2的距离与col2和col1的距离完全一致,只需要计算一次,避免重复运算

代码实现

首先安装依赖:

pip install python-Levenshtein pandas

核心计算代码:

import pandas as pd
from Levenshtein import distance
from itertools import combinations

# 加载你的DataFrame后,先统一转字符串避免非字符串类型计算报错
df = df.astype(str)
columns = df.columns.tolist()

# 遍历所有不重复的两列组合
for col_a, col_b in combinations(columns, 2):
    # 按行对齐计算所有位置的编辑距离总和
    col_a_values = df[col_a].values
    col_b_values = df[col_b].values
    total_dist = sum(distance(val_a, val_b) for val_a, val_b in zip(col_a_values, col_b_values))
    avg_dist = total_dist / len(df)
    print(f"Average Distance between {col_a} and {col_b} is {avg_dist} ,")

进一步加速技巧

如果你的数据量超过10万行,可以把编辑距离计算逻辑做并行化拆分,按行分块交给多进程计算,速度可以随CPU核心数线性提升。如果数据量在10万行以内,上面的代码已经足够快,不需要额外优化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 05:01:04