Si utiliza ArcGIS, creo que una forma fácil de hacerlo, sin crear ningún producto intermedio, sería seleccionar cada estado en su polígono de estados (suponiendo que tiene características multiparte) y luego seleccionar por ubicación las características de los colegios electorales. A continuación, puede obtener un recuento de cuántas características están seleccionadas y escribir este valor en su polígono de estados. Esto sería algo así:
import arcpy
# Define some variables
#
polling_stations = r'c:\path\to\geodatabase.gdb\polling_stations'
states = r'c:\path\to\geodatabase.gdb\states'
# Make feature layers for processing
#
polling_stations_lyr = arcpy.MakeFeatureLayer_management(polling_stations,r'in_memory\polling_stations_lyr')
states_lyr = arcpy.MakeFeatureLayer_management(states,r'in_memory\states_lyr')
# Create an update cursor to access and update states features
#
fields = ['field_containing_state_names','field_which_will_be_updated_with_#_of_polls']
with arcpy.da.UpdateCursor(states_lyr,fields) as cur:
for row in cur:
# Make a query to select this feature to be used in a selection of polling places
#
state = row[0]
where = '"field_containing_state_names" = \'{}\''.format(state)
arcpy.SelectLayerByAttribute_management(states_lyr,'NEW_SELECTION',where)
# Now select the polling stations by location using the selected state feature
#
arcpy.SelectLayerByLocation_management(polling_stations_lyr,'INTERSECT',states_lyr)
# Count the number of polling stations selected
#
number_of_polling_stations = int(arcpy.GetCount_management(polling_stations_lyr).getOutput(0))
# Update the state feature with this value
#
row[1] = number_of_polling_stations
cur.updateRow(row)
print('Operation complete.')
Este código requiere ArcGIS 10.x, pero puede hacerse compatible con versiones anteriores utilizando el cursor de estilo antiguo en lugar del cursor del módulo de acceso a datos utilizado aquí.