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

如何用更高效/Pythonic方法计算Pandas DataFrame每行与其他行的最大距离?

用向量化操作替代嵌套循环,大幅提升计算效率

你的嵌套循环实现虽然直观,但iterrows()遍历效率极低,且时间复杂度为O(n²),当数据量较大时速度会严重下降。以下是两种更高效、更符合Python/Pandas风格的实现方式:

方法一:利用Numpy广播计算距离矩阵

通过Numpy的广播机制一次性生成所有行对的欧氏距离,避免显式循环:

import numpy as np
import pandas as pd

# 提取X、Y列的数值数组
coords = df[['X', 'Y']].values
# 生成所有行对的坐标差值(形状为(n, n, 2))
diff = coords[:, np.newaxis, :] - coords[np.newaxis, :, :]
# 计算欧氏距离矩阵
dist_matrix = np.sqrt(np.sum(diff ** 2, axis=2))
# 对每行取最大距离,添加为新列
df['max_dist'] = dist_matrix.max(axis=1)

方法二:使用Scipy的distance_matrix(更简洁高效)

Scipy提供了优化过的距离计算函数,底层基于C实现,速度更快:

from scipy.spatial import distance_matrix
import pandas as pd

coords = df[['X', 'Y']].values
# 直接生成所有点对的欧氏距离矩阵
dist_matrix = distance_matrix(coords, coords)
# 提取每行的最大值
df['max_dist'] = dist_matrix.max(axis=1)

原代码的注意点

  • 原代码中df.loc['max_dist'][i_df]属于链式索引,可能触发SettingWithCopyWarning,正确的赋值方式应为df.loc[i_df, 'max_dist']
  • 嵌套iterrows()的遍历方式在数据量超过几百行后会变得非常缓慢,向量化操作能将计算效率提升数倍甚至数十倍

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 14:22:17