如何用Pandas GroupBy计算分组内的平均点对距离?
分组内所有点对的平均距离计算方案
核心思路
不用提前构造点对DataFrame,直接通过groupby结合组合生成工具,对每个分组内的坐标点生成所有两两组合,计算距离后求平均值即可。
实现步骤
- 导入依赖库
import pandas as pd import numpy as np from itertools import combinations
- 定义分组平均距离计算函数
def avg_group_distance(group): # 提取当前分组的坐标点,转为二维数组格式 points = group[['x', 'y']].values # 生成所有不重复的点对组合(无序,避免重复计算) point_pairs = combinations(points, 2) # 计算每对点的欧氏距离,存入列表 distances = [np.linalg.norm(p1 - p2) for p1, p2 in point_pairs] # 返回该分组的平均距离 return np.mean(distances)
- 执行分组计算
df = pd.DataFrame({ 'id': ['A','A','B','B','B'], 'x': [1,1,2,2,3], 'y': [1,2,2,3,3] }) # 按id分组,应用自定义函数 result = df.groupby('id').apply(avg_group_distance) print(result)
结果验证
运行后输出:
id A 1.000000 B 1.138071 dtype: float64
完全匹配示例结果:
- 分组A仅1对点,距离为1,平均值1
- 分组B的3对点距离分别为1、1、√2≈1.4142,平均值≈1.138
内容的提问来源于stack exchange,提问作者d_frEak
相关产品推荐
相关产品推荐

