import arcpy, math fc = 'House' #Change to match your data rotatefield = 'Angle' #Clockwise rotation in degress. Change name to match your data #Function to rotate one input Point around a pivot point def rotatepoint(point, pivotpoint, angle): #Source: ArcGIS angle_rad = -math.radians(angle) ox, oy = pivotpoint.X, pivotpoint.Y px, py = point.X, point.Y qx = ox + math.cos(angle_rad) * (px - ox) - math.sin(angle_rad) * (py - oy) qy = oy + math.sin(angle_rad) * (px - ox) + math.cos(angle_rad) * (py - oy) return arcpy.Point(qx,qy) #Rebuild each polygon with rotated vertices with arcpy.da.UpdateCursor(fc,['SHAPE@',rotatefield]) as cursor: for row in cursor: polylist = [] for part in row[0]: partlist = [] for pnt in part: if pnt is not None: #Polygons with inner rings will have None pnt(s) which can be skipped partlist.append(rotatepoint(pnt, row[0].centroid, row[1])) #Centroid is pivot point polylist.append(partlist) row[0] = arcpy.Polygon(arcpy.Array(polylist)) cursor.updateRow(row)