You need to enable JavaScript to run this app. Python实现按时间分组的指定半径内点数量与平均距离统计(排除中心重合点)
优惠活动
大模型
产品
解决方案
定价
更多

Python实现按时间分组的指定半径内点数量与平均距离统计(排除中心重合点)

实现方案

核心修正逻辑

  • 补全原代码缺失的numpy依赖导入(原代码使用np.sqrt但未导入会导致运行报错)
  • 新增过滤规则:在半径范围内的点中,排除距离中心为0的重合点(即每个时间节点必然存在的中心点)
  • 合并重复的分组计算逻辑,单次分组同时完成计数与平均距离统计,更适配大批量点数据的处理性能
  • 对齐所有存在的时间节点,对无符合点的分组自动补0,保证输出格式统一

完整可运行代码

import pandas as pd
import numpy as np

# 可配置的统计阈值
RADIUS = 2

df = pd.DataFrame({        
    'Time' : [1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3],                               
    'Item' : ['A','B','C','D','E','F','A','B','C','D','E','F','A','B','C','D'],       
    'x' : [4,5,8,3,6,2,6,4,3.5,2,4,6,4,2,4,4],  # 匹配测试规则:每个时间分组固定存在1个与中心重合的点
    'y' : [-2,0,-2,0,0,4,-1,-2,-2,4,-3,2,-2,0,-2.5,4],     
    'X2' : [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4],
    'Y2' : [-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2],                          
})

# 预计算所有点到中心的欧氏距离,避免重复计算
df['dist'] = np.sqrt((df['X2'] - df['x']) ** 2 + (df['Y2'] - df['y']) ** 2)

# 筛选有效点:半径范围内 + 排除和中心完全重合的点(距离为0)
valid_points = df[(df['dist'] <= RADIUS) & (df['dist'] > 0)]

# 按时间分组聚合统计,对齐所有时间节点补全缺失值
result = valid_points.groupby('Time').agg(
    count=('dist', 'size'),
    dist=('dist', 'mean')
).reindex(df['Time'].unique()).fillna(0).reset_index()

运行输出

代码执行后得到的结果和预期完全一致:

Time  count  dist
0     1    0.0   0.0
1     2    2.0   0.75
2     3    1.0   0.5

代码适配性说明:如果后续数据量大幅增长,可通过向量化计算的方式进一步优化性能,所有统计逻辑不依赖固定的时间顺序,可自动适配任意数量的时间节点。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 20:15:11