Я думаю, что лучший рабочий процесс, который вы можете иметь в этой точке, это
- Пространственное соединение, чтобы сопоставить ваши точки с полигоном, которому они принадлежат
groupby
ваш идентификатор полигона и agg('sum')
Вы можете найти этот ответ о том, как использовать его для выбора наблюдений, которые попадают куда-то, например, в Европе
Синтаксис следующий:
geopandas.sjoin(points, polygons, how="inner", op='within')
Примечание. Для выполнения таких операций необходимо установить rtree
. Если вам нужно установить эту зависимость, используйте pip
или conda
для ее установки
Пример
Давайте возьмем слияние между городами и странами и агрегируем значения по континентам.
import geopandas
import numpy as np
world = geopandas.read_file(geopandas.datasets.get_path('naturalearth_lowres'))
cities = geopandas.read_file(geopandas.datasets.get_path('naturalearth_cities'))
Мы создаем фиктивную переменную в cities
данных:
cities['pop'] = np.random.randint(1, 6, cities.shape[0])
cities.head(3)
name geometry pop
0 Vatican City POINT (12.45339 41.90328) 4
1 San Marino POINT (12.44177 43.93610) 1
2 Vaduz POINT (9.51667 47.13372) 1
Пространственное соединение выполняется с использованием метода, описанного выше:
data_merged = geopandas.sjoin(cities, world, how="inner", op='within')
data_merged.head(2)
name_left geometry pop index_right pop_est continent name_right iso_a3 gdp_md_est
0 Vatican City POINT (12.45339 41.90328) 4 141 62137802 Europe Italy ITA 2221000.0
1 San Marino POINT (12.44177 43.93610) 1 141 62137802 Europe Italy ITA 2221000.0
Обратите внимание, что например, вы получите объект point
geo pandas, если хотите построить график.
Затем вы можете использовать стандартный синтаксис pandas
для вычисления статистики по вашим точечным данным
data_merged.groupby('continent').agg('sum')
pop index_right pop_est gdp_md_est
continent
Africa 153 3430 1471168898 8227904.00
Asia 129 4761 4462705033 56109347.77
Europe 125 5392 1013640800 35541477.00
North America 47 587 569302584 23362898.00
Oceania 12 415 36220960 1401392.00
South America 23 494 426315904 6381910.00