Сначала давайте сгенерируем некоторые данные для демонстрации:
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)
Итак, теперь у вас есть нужные фигуры в виде списка в diffs. Если вы хотите объединить их в один GeoDataFrame, просто сделайте следующее:
all_shapes = gpd.GeoDataFrame(geometry=diffs)