[GIS] Sorting shapefile records on attribute to update new rank field using ArcPy

arcpysorting

Basically, I am trying to sort the records within the shapefile based on an attribute(eg: pop) and then add a new field that indicates ranking based on the sort. eg: the record with the highest pop would get a rank value of 1, the next would get a value 2.

I can easily sort and add the field in arcgis but the calculating field so that it is ranked based on the order is something i don't know how it works and hence i am thinking may be a python script would be better.

Best Answer

Assuming you're using ArcGIS 10 (I'd have to check if it works in 9.3) you could use an update cursor, which has a sort attribute.

pop_rank = 1
rows = arcpy.UpdateCursor ("path_to_dataset", "", "", "", "pop A")
for row in rows:
    row.setValue("pop_rank_field", pop_rank)
    pop_rank += 1
    rows.updateRow(row) 

The A after the sort field name means ascending, which you could replace with D for descending also.

Related Question