You could use the Python parser in the Field Calculator and construct this function.
This part goes in the pre-logic. Make sure to replace the feature classes with the one from your system. The feature class table called "Temp_Table" is a temporary table and must reside in a geodatabase. It will be deleted as the script completes.
def normNum(num):
arcpy.Statistics_analysis(r'C:\Geodatabase.gdb\Original_Features',r'C:\Geodatabase.gdb\Temp_Table', [["Field1","MIN"],["Field1","MAX"]])
with arcpy.da.SearchCursor(r'C:\Geodatabase.gdb\Temp_Table', ("MAX_Field1" , "MIN_Field1")) as cursor:
for row in cursor:
maxNum = row[0]
minNum = row[1]
del cursor
del row
arcpy.Delete_management(r'C:\Geodatabase.gdb\Temp_Table')
return ((num - minNum) / ( maxNum - minNum))
This part goes in the "Field2 =" box:
normNum(!Field1!)
Here is a version that would run as stand alone function so you wouldn't need the field calculator:
def NormalizedNumbersToField(table, field, scratchGDB):
arcpy.AddField_management(table, "NORMALIZED", "DOUBLE")
scratchTable = os.path.join(scratchGDB, "Temp_Feat")
arcpy.Statistics_analysis(table,scratchTable, [[str(field),"MIN"],[str(field),"MAX"]])
with arcpy.da.SearchCursor(scratchTable, ("MAX_" + str(field) , "MIN_" + str(field))) as cursor:
for row in cursor:
maxNum = row[0]
minNum = row[1]
del cursor, row
arcpy.Delete_management(scratchTable)
with arcpy.da.UpdateCursor(table, ( field , "NORMALIZED" )) as cursor:
for row in cursor:
number = row[0]
row[1] = (( number - minNum ) / ( maxNum - minNum ))
cursor.updateRow(row)
del cursor, row