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

如何聚合具有相同几何图形的重复行并求和对应列值?

解决方案

你的问题核心是空间几何列无法直接用groupby.sum(),因为sum方法不适用于Shapely几何对象。可以通过指定不同列的聚合规则来实现需求:

方法1:直接按几何对象分组(适用于几何完全一致的场景)

假设你的数据是GeoPandas的GeoDataFrame,可以用agg()分别指定数值列求和、几何列保留唯一值:

import geopandas as gpd

# 读取或初始化你的GeoDataFrame
gdf = gpd.GeoDataFrame(
    data={'a': [2,3,1], 'b': [4,1,2], 'c': [6,7,3]},
    geometry=gpd.points_from_xy([0,0,1], [0,0,1])  # 替换成你的实际几何数据
)

# 分组聚合
result = gdf.groupby('geometry').agg(
    a=('a', 'sum'),
    b=('b', 'sum'),
    c=('c', 'sum'),
    geometry=('geometry', 'first')  # 保留同一组的几何对象
).reset_index(drop=True)

方法2:通过WKT字符串分组(解决几何精度差异导致的分组失败)

如果存在微小坐标差异(比如浮点精度问题)导致相同点无法被识别,可以先将几何转为WKT字符串分组,再转回几何对象:

# 新增WKT列
gdf['wkt'] = gdf.geometry.to_wkt()

# 按WKT分组聚合
result = gdf.groupby('wkt').agg(
    a=('a', 'sum'),
    b=('b', 'sum'),
    c=('c', 'sum'),
    geometry=('geometry', 'first')
).drop(columns='wkt').reset_index(drop=True)

运行结果

执行上述代码后,会得到你期望的结果:

geometryabc
point a5513
point b123

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 21:32:57