I answered a question [here](https://gis.stackexchange.com/a/146418/18630) that is probably similar to what you want (the second part of the answer, which also links to [this answer](https://gis.stackexchange.com/a/87055/18630) regarding Bakeries and States...). Using Spatial Join works also, but it creates another layer which might not be desirable. Your code might look something like this... import arcpy # Set overwrite option arcpy.env.overwriteOutput = True # KEEPING ORIGINAL LAYERS (NOT CREATING ADDITIONAL "JOINED" LAYER) # Create FeatureLayers arcpy.MakeFeatureLayer_management("C:/YourFolder/YourPointsLayer.shp", "lyr_PointsLayer") arcpy.MakeFeatureLayer_management("C:/YourFolder/SchoolDistricts.shp", "lyr_SchoolDistricts") # Create a search cursor for the school districts rows = arcpy.SearchCursor("lyr_SchoolDistricts") for row in rows: # What you'll do is select each school district one at a time, and then select all the points in that school district and calculate the SCHOOLDIST field # NOTE: If you are using not using shapefiles, then you'll have to change the FID in the line below to OBJECTID (or similar) arcpy.SelectLayerByAttribute_management("lyr_SchoolDistricts", "NEW_SELECTION", "\"FID\" = " + str(row.getValue("FID"))) arcpy.SelectLayerByLocation_management("lyr_PointsLayer", "INTERSECT", "lyr_SchoolDistricts", "", "NEW_SELECTION") arcpy.CalculateField_management("lyr_PointsLayer", "SCHOOLDIST", "'{0}'".format(str(row.getValue("DISTRICT"))), "PYTHON_9.3", "") print "Finished processing " + str(row.getValue("DISTRICT")) In the code above, the "DISTRICT" field is the name of the field in the School Districts layer, and the "SCHOOLDIST" field is the field that's in the Points layer...