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

如何在Pandas DataFrame中计算任意两行间的平方距离?

计算DataFrame中任意行的平方距离的简便方法

这里有两种高效的实现方式,直接用Python的数据分析工具就能搞定:

方法一:用scipy的距离计算工具

scipy库提供了专门的距离计算函数,能快速生成两两行的平方距离矩阵:

  1. 先导入库并构造示例DataFrame:
import pandas as pd
from scipy.spatial.distance import pdist, squareform

data = {
    'Writer': [1, 2, 3],
    'A': [0.2, 0.1, 0.5],
    'B': [0.4, 1.2, 0.2],
    'C': [0.6, 0.3, 0.8]
}
df = pd.DataFrame(data).set_index('Writer')
  1. 计算平方距离并生成矩阵:
# 计算所有行对的平方欧氏距离
sq_distances = pdist(df.values, metric='sqeuclidean')
# 转换为对称方阵,行和列对应Writer编号
sq_dist_matrix = squareform(sq_distances)
# 转为带索引的DataFrame,方便查看
result_df = pd.DataFrame(sq_dist_matrix, index=df.index, columns=df.index)

运行后得到的结果:

Writer    1     2     3
Writer
1      0.00  0.74  0.24
2      0.74  0.00  1.14
3      0.24  1.14  0.00

方法二:用pandas的广播机制(无需额外库)

如果不想导入scipy,直接用numpy的广播特性也能实现:

import pandas as pd

data = {
    'Writer': [1, 2, 3],
    'A': [0.2, 0.1, 0.5],
    'B': [0.4, 1.2, 0.2],
    'C': [0.6, 0.3, 0.8]
}
df = pd.DataFrame(data).set_index('Writer')

# 提取数值矩阵,通过广播计算两两差的平方和
values = df.values
sq_dist_matrix = ((values[:, None] - values)**2).sum(axis=2)
result_df = pd.DataFrame(sq_dist_matrix, index=df.index, columns=df.index)

这个方法的原理是把数值矩阵变形后做减法,对每个元素平方再求和,最终得到和方法一完全一致的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:40:57