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

如何对落入同一10km边界框的DataFrame经纬度行分组累加并去重

问题原因

你之前使用固定步长0.1进行经纬度分箱,和你自定义的10km×10km边界框对应的经纬度偏移量不匹配,是分组未达预期的核心原因。

实现方案

步骤1:计算10km对应的经纬度分箱步长

和你提供的create_space逻辑保持一致,先算出10km距离对应的纬度偏移量,再根据你的数据纬度范围计算经度偏移量:

import math
import numpy as np
import pandas as pd

# 地球半径(单位:米)
EARTH_RADIUS = 6378137
# 10km对应的纬度差(固定值,约0.0898度)
lat_step = (180 / math.pi) * (500 / EARTH_RADIUS) * 10
# 计算经度偏移量:根据数据的平均纬度做修正,保证经度方向也是10km
avg_lat = df['lat'].mean()
lon_step = lat_step / math.cos(math.radians(avg_lat))

步骤2:经纬度分箱

按照上面计算得到的步长对经纬度做分箱处理:

df['lat_bin'] = np.floor(df['lat'] / lat_step) * lat_step
df['lon_bin'] = np.floor(df['lon'] / lon_step) * lon_step

步骤3:分组聚合

将同一个分箱内的行归为一组,累加occurrence字段,其余字段可根据需求选择保留第一个值/平均值等:

# 按分箱分组
group_df = df.groupby(['lat_bin', 'lon_bin'], as_index=False)
# 聚合规则可根据你的实际字段调整,这里示例保留组内第一个经纬度,累加occurrence
result_df = group_df.agg(
    lat = ('lat', 'first'),
    lon = ('lon', 'first'),
    occurrence = ('occurrence', 'sum')
    # 其余需要保留的字段可在这里补充对应聚合规则
)
# 可选:删除不需要的分箱字段
result_df = result_df.drop(columns=['lat_bin', 'lon_bin'])

补充说明

如果你的数据纬度跨度极大,对精度要求极高,可以按每个纬度分箱的中心纬度单独计算对应经度步长,避免跨纬度区域的经度偏移误差。如果数据量较小,也可以引入R树空间索引做精确的边界包含判断,避免分箱边界的点误判。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:36:04