I would like to get the maximum of a field in a feature class. If no features are selected, I get the right value. But if some features are selected, I am getting the maximum of a field from within these selected features. However, I would like to get maximum of a field from the whole table i.e., from both selected and un-selected features.
how may I do it?
in_fc = 'C:/Your_spaceless_path/CoordGeom.gdb/Polygons' arr = arcpy.da.TableToNumPyArray(in_fc, 'Shape_Area') # pick a field # nan functions account for nulls, cast to the dtype of the field using astype np.nanmax(arr.astype('float')) 155.0
Thank you, may be I was not clear. Your code gives same answer as mine. Let me try again.
Imagine you have 3 features [0,1,2] in a fc. They have a income field which is an integer [10,12,14] respectively .
case1: I have selected no feature selected, I ask for max of fc , I get 14 >> correct
case2: I have selected features [0,1], i ask for max of fc , I get 12 >> incorrect, I still want 14, because I am asking max of fc, not max of selection of fc.
case3: I have selected features [1,2], i ask for max of fc, I get 14, >> correct
I hope it clarifies a bit?
Just need to ask: have you actually looked at the values of your selected versus non-selected and done the summation manually? Sounds like one of your fields is 0 or None value. What is your objective of comparing your selected sum versus the non-selected? If you know the sum of the income field without any selections, why not write that value to a variable if you need to make comparisons to it?
User selects few features, sets their income to max(income in whole of fc) +1 , so now the max of income of whole fc has changed. User goes to another area in the extent, selects a few polygons, sets their income to max(income in whole of fc) + 1, so the max of income in the whole fc has changed again. This continues till all polygons are finished.
Just use a Describe object to retrieve the underlying feature class of the feature layer.
featlyr_name = "rangerdistrict" # name of existing feature layer fld_max = "GIS_ACRES" # field for determining maximum value max(fld for fld, in arcpy.da.SearchCursor(featlyr_name,fld_max)) fc = arcpy.Describe(featlyr_name).featureclass.catalogPath max(fld for fld, in arcpy.da.SearchCursor(fc,fld_max))
My answer gives you the maximum whether you have a selection or not.
If you need that maximum, that is the way to get it without worrying about selections or not.
If you need maximum-ish (ie there is a selection) then work with arcpy
If you want the best of both worlds, they you can work with both approaches
If you see the requirements for the function, it just requires the path to the featureclass's table. Locks aren't for reading, only modifying a featureclass.
You could try it and report back