如何聚合具有相同几何图形的重复行并求和对应列值?
解决方案
你的问题核心是空间几何列无法直接用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)
运行结果
执行上述代码后,会得到你期望的结果:
| geometry | a | b | c |
|---|---|---|---|
| point a | 5 | 5 | 13 |
| point b | 1 | 2 | 3 |
内容的提问来源于stack exchange,提问作者Ben Watson
相关产品推荐
相关产品推荐

