Hay muchas soluciones (véase ¿Cómo filtrar un geodataframe por tipo de geometría? por ejemplo)
Con .loc
como tú pero con geometry.type
o geom_type
gdf0 = gdf.loc[gdf.geometry.geometry.type=='MultiPolygon']
gdf0
ID geometry
0 1 MULTIPOLYGON (((244697.452 1000369.231, 244827...
1 5 MULTIPOLYGON (((244912.829 1000603.336, 245042...
2 8 MULTIPOLYGON (((244732.568 1000040.313, 244862...
gdf0= gdf.loc[gdf.geometry.geom_type=='MultiPolygon']
idem
Con apply
, lambda
y type
gdf1 = gdf[gdf.geometry.apply(lambda x : x.type=='MultiPolygon')]
gdf1
ID geometry
0 1 MULTIPOLYGON (((244697.452 1000369.231, 244827...
1 5 MULTIPOLYGON (((244912.829 1000603.336, 245042...
2 8 MULTIPOLYGON (((244732.568 1000040.313, 244862...
Con geom_type
gdf2 = gdf[gdf.geom_type=='MultiPolygon']
gdf2
ID geometry
0 1 MULTIPOLYGON (((244697.452 1000369.231, 244827...
1 5 MULTIPOLYGON (((244912.829 1000603.336, 245042...
2 8 MULTIPOLYGON (((244732.568 1000040.313, 244862...
Con geometry.type
como Kadir Şahbaz
gdf3 = gdf[gdf.geometry.type=="MultiPolygon"]
gdf3
ID geometry
0 1 MULTIPOLYGON (((244697.452 1000369.231, 244827...
1 5 MULTIPOLYGON (((244912.829 1000603.336, 245042...
2 8 MULTIPOLYGON (((244732.568 1000040.313, 244862...