Assuming that stacked points have identical XY values, I'd make use of cursors. Tabular methods are faster and cleaner than using spatial tools. First determine which XYs occur more than once in your feature class. Then iterate through the feature class a second time, skipping XYs that occur only once and making use of a dictionary to store previous values. Something like this:
#layer name
layer = "LAYER"
#value field
valueField = "Val"
#create list of duplicate xys
xys = set ()
dupXys = set ()
with arcpy.da.SearchCursor (layer, "SHAPE@XY") as curs:
for xy, in curs:
if xy in xys: dupXys.add (xy)
else: xys.add (xy)
#get oids of highest value XY
xyDi = {}
with arcpy.da.SearchCursor (layer, ["OID@", "SHAPE@XY", valueField]) as curs:
for oid, xy, val in curs:
#skip nonstacked points
if not xy in dupXys:
continue
#check if xy has been added to dictionary
try:
lastOid, lastVal = xyDi [xy]
#if not, add xy to dictionary with oid and val
except:
xyDi [xy] = (oid, val)
#continue cursor
continue
#check if old value is less than current value
if lastVal < val:
#if true, update dictionary
xyDi [xy] = (oid, val)
#create oid sql
path = arcpy.Describe (layer).path
oidFld = arcpy.AddFieldDelimiters (path, arcpy.Describe (layer).OIDFieldName)
oids = [oid for oid, val in xyDi.values ()]
oidStr = ", ".join (map (str, oids))
sql = "{} IN ({})".format (oidFld, oidStr)
#select
arcpy.SelectLayerByAttribute_management (layer, "", sql)