【发布时间】:2021-08-13 01:40:38
【问题描述】:
TLDR:我正在尝试将 GeoPandas Dataframe 的行组合成一行,其中它们的形状组合成一个。
我目前正在从事一个小项目,该项目需要我使用几个不同的指标创建加拿大健康区域的交互式等值线图。
当我注意到行数不一样时,我合并了两个 Dataframe,一个包含每个健康区域的年度人口估计值,另一个包含健康区域的几何图形的 GeoDataframe。
经过进一步检查,我意识到我一直使用的两个数据集并未包含完全相同的健康区域。我得到的形状文件比人口数据有更多的健康区域,出于方法学的原因,人口数据合并了其中的一些。
在注意到差异后,我重新合并以显示差异,以便找出需要汇总的内容。
merged_gdf = gdf.merge(df, on='HR_UID')
#HR_UID is just the name of the column with the codes for the health regions, since they
#have slightly different names in different datasets, it's easier to merge on code.
print(list(set(df['HEALTH_REGION'])-set(merged_gdf['HEALTH_REGION_y'])),list(set(gdf['HR_UID'])-set(df['HR_UID'].unique())))
在这里,我看到缺少的健康区域是 ['Mamawetan/Keewatin/Athabasca, Saskatchewan']。 GeoDataframe 将这三个区域分开,代码为 4711、4712、4713,而人口数据将它们汇总到一个代码为 4714 的区域。
我打算组合我的 GeoDataframe 中与人口数据中组合的健康区域相对应的行,以组合它们的多边形。 我回到 GeoDataframe 尝试合并与这些区域对应的三行:
old_hr=gdf[gdf['HR_UID'].isin({'4711','4712','4713'})]
HR_UID HEALTH_REGION SHAPE_AREA \
31 4711 Mamawetan Churchill River Regional Health Auth... 1.282120e+11
32 4712 Keewatin Yatthé Regional Health Authority 1.095536e+11
33 4713 Athabasca Health Authority 5.657720e+10
SHAPE_LEN geometry
31 1.707619e+06 POLYGON ((5602074.666 2364598.029, 5591985.366...
32 1.616297e+06 POLYGON ((5212469.723 2642030.691, 5273110.000...
33 1.142962e+06 POLYGON ((5248633.914 2767057.263, 5249285.640...
现在我意识到我不确定如何在 GeoDataframe 中组合多边形。我尝试过使用dissolve(on='HEALTH_REGION'),虽然没有用。我花了一段时间在网上四处寻找,但到目前为止,我似乎找不到任何人问这个特定的问题 - 也许我错过了一些东西..
【问题讨论】:
标签: python pandas dataframe geopandas