Сначала сгенерируем данные для демонстрации:
import geopandas as gpd
from shapely.geometry import Point
shp1 = gpd.GeoDataFrame({'geometry': [Point(1, 1).buffer(3)], 'name': ['Shape 1']})
shp2 = gpd.GeoDataFrame({'geometry': [Point(1, 1).buffer(2)], 'name': ['Shape 2']})
shp3 = gpd.GeoDataFrame({'geometry': [Point(1, 1).buffer(1)], 'name': ['Shape 3']})
Теперь возьмем симметричную разницу для всех, кроме самой маленькой формы, которую можно оставить как есть:
diffs = []
gdfs = [shp1, shp2, shp3]
for idx, gdf in enumerate(gdfs):
if idx < 2:
diffs.append(gdf.symmetric_difference(gdfs[idx+1]).iloc[0])
diffs.append(shp3.iloc[0].geometry)
Итак, теперь у вас есть желаемые формы в виде списка в различиях. Если вы хотите объединить их в один GeoDataFrame, просто сделайте следующее:
all_shapes = gpd.GeoDataFrame(geometry=diffs)
person
bexi
schedule
19.07.2019