Python 通过合并两个地理数据框计算人口密度

Python 通过合并两个地理数据框计算人口密度,python,pandas,gis,spatial,geopandas,Python,Pandas,Gis,Spatial,Geopandas,我有两个城市的形状模型。第一个非常详细,一直到区块级别,每个区块都有一些信息,包括人口密度。第二个是同一个城市,划分为1.45km2的方格,没有其他信息 我想计算平方网格中每个单元的人口密度。我试过了 enriched=gpd.read_file('enriched.shp') #gdf with pop density info grid=gpd.read_file('grid.shp') #grid gdf popd=gpd.sjoin(grid[['cell_id','geometry'

我有两个城市的形状模型。第一个非常详细,一直到区块级别,每个区块都有一些信息,包括人口密度。第二个是同一个城市,划分为1.45km2的方格,没有其他信息

我想计算平方网格中每个单元的人口密度。我试过了

enriched=gpd.read_file('enriched.shp') #gdf with pop density info
grid=gpd.read_file('grid.shp') #grid gdf

popd=gpd.sjoin(grid[['cell_id','geometry']],enriched, op='intersects') #merge grid with enriched shp
popd=popd[['cell_id','popdens']].groupby(['cell_id']).sum().reset_index() #groupby cell and sum the densities of the blocks within
grid=grid.merge(popd,on='cell_id', how='left').fillna(0)
但我不确定这是不是正确的方法,因为我在一些单元中获得了非常高的密度值(比如每平方公里>200k)。是这样吗?如何检查我是否遗漏了任何内容

编辑:以下是两个shapefile的列标题

enriched.columns

Index(['REGION', 'PROVINCIA', 'COMUNA', 'COD_DISTRI', 'COD_ZONA', 'area', 'popdens', 'geometry'],
      dtype='object')

enriched.head(2)

    REGION  PROVINCIA   COMUNA  COD_DISTRI  COD_ZONA    area    popdens geometry
0      13       131    13121       2.0        1.0  0.442290  4589.75053 POLYGON ((-70.65571 -33.47856, -70.65575 -33.4...
1      13       131    13121       6.0        1.0   0.773985    7661.64421  POLYGON ((-70.68182 -33.47654, -70.68144 -33.4...
不要担心前5列,您可以将它们视为数据集中的主键:它们共同唯一地标识一个区域

grid.columns
Index(['cell_id', 'geometry'], dtype='object')

grid.head(2)

    cell_id geometry
0   sq00024 POLYGON ((-70.79970 -33.50447, -70.78894 -33.5...
1   sq00025 POLYGON ((-70.79989 -33.51349, -70.78913 -33.5...

你能用每个形状文件的几行来更新你的帖子吗?你不能求人口密度之和。你必须取一个面积加权平均值(我的意思是你可以求和,但计算是无效的)@PaulH-uhm,你有道理。你能在答复中详细说明你的意见吗?根据Pauloarea的要求,我正在编辑这篇文章,以包含Shapefile的标题。加权平均是非常基本的计算方法。Wikipedia应该是这个网站上搜索结果最多的一个充分参考
[pandas]加权平均值