Find max and min values from a table based on two fields Planned maintenance scheduled April 23, 2019 at 23:30 UTC (7:30pm US/Eastern) Announcing the arrival of Valued Associate #679: Cesar Manara Unicorn Meta Zoo #1: Why another podcast?Selection on Feature layer (geoprocessing)Using ListFields and CalculateField to find max value in variable number of fields to populate another field?How to group numbers based on first digits and then find min/max?Debugging syntax error (invalid syntax) from arcpy.SelectLayerByAttribute_management()?Debugging RuntimeError: A column was specified that does not exist from ArcPy?Iterate through a list to use then use SearchCursor to populate new listPass list parameter to SQL expressionSetting up where_clause to select counties one at a time from feature class using ArcPy?SQL Query Syntax gives ERROR 000358: Invalid expression?Finding many intersecting polygons of one layer and listing them in single field using ArcGIS Desktop?

How much damage would a cupful of neutron star matter do to the Earth?

Semigroups with no morphisms between them

Customizing QGIS plugins

Sum letters are not two different

An adverb for when you're not exaggerating

What does Turing mean by this statement?

Dynamic filling of a region of a polar plot

What is an "asse" in Elizabethan English?

Random body shuffle every night—can we still function?

What initially awakened the Balrog?

How many morphisms from 1 to 1+1 can there be?

Why are my pictures showing a dark band on one edge?

Project Euler #1 in C++

Co-worker has annoying ringtone

Drawing spherical mirrors

What order were files/directories output in dir?

Karn the great creator - 'card from outside the game' in sealed

Why is it faster to reheat something than it is to cook it?

How would a mousetrap for use in space work?

1-probability to calculate two events in a row

Would it be easier to apply for a UK visa if there is a host family to sponsor for you in going there?

How does Belgium enforce obligatory attendance in elections?

How can I prevent/balance waiting and turtling as a response to cooldown mechanics

If Windows 7 doesn't support WSL, then what is "Subsystem for UNIX-based Applications"?



Find max and min values from a table based on two fields



Planned maintenance scheduled April 23, 2019 at 23:30 UTC (7:30pm US/Eastern)
Announcing the arrival of Valued Associate #679: Cesar Manara
Unicorn Meta Zoo #1: Why another podcast?Selection on Feature layer (geoprocessing)Using ListFields and CalculateField to find max value in variable number of fields to populate another field?How to group numbers based on first digits and then find min/max?Debugging syntax error (invalid syntax) from arcpy.SelectLayerByAttribute_management()?Debugging RuntimeError: A column was specified that does not exist from ArcPy?Iterate through a list to use then use SearchCursor to populate new listPass list parameter to SQL expressionSetting up where_clause to select counties one at a time from feature class using ArcPy?SQL Query Syntax gives ERROR 000358: Invalid expression?Finding many intersecting polygons of one layer and listing them in single field using ArcGIS Desktop?



.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








4















I have a geodatabase table with the following fields: County_Name, State_Name, Date_Time, Customers



Example



Alameda, CA, 8/1/2014 12AM, 6 
Alameda, CA, 8/1/2014 1AM, 1
Alameda, CA, 8/1/2014 2AM, 3
....


Data for all US counties is in the table. I just want to create a new table that contains the



  • county, state, max customers for the day (24 hour period), time of the max customers

  • county, state, min customers for the day (24 hour period), time of the min customers

Many states have the same county names as other states.



Do I need to create a cursor to obtain a list of the unique county and state names first?



This will give me a list of the county names but I also need the state names.



with arcpy.da.SearchCursor(tablesMerged, ["county_nam"]) as cursor:
print sorted(row[0] for rows in cursor)









share|improve this question
























  • Are you looking for a whole script or a few hints how to accomplish this?

    – Stophface
    Aug 12 '14 at 18:44











  • Just a few hints would be great! Thanks. I haven't used Python in a little while but I think I would be able to get going with a few hints.

    – Andrew
    Aug 12 '14 at 18:46






  • 3





    the most straightforward is to use the built in "summary statistics" tools with several case fields

    – radouxju
    Aug 12 '14 at 19:38











  • That may work. I didn't know it allowed for multiple case fields. I will give that a shot! Thanks.

    – Andrew
    Aug 12 '14 at 19:56











  • I agree with @radouxju - Summary Statistics could save you a lot of code here, and should also run faster.

    – PolyGeo
    Aug 12 '14 at 21:46

















4















I have a geodatabase table with the following fields: County_Name, State_Name, Date_Time, Customers



Example



Alameda, CA, 8/1/2014 12AM, 6 
Alameda, CA, 8/1/2014 1AM, 1
Alameda, CA, 8/1/2014 2AM, 3
....


Data for all US counties is in the table. I just want to create a new table that contains the



  • county, state, max customers for the day (24 hour period), time of the max customers

  • county, state, min customers for the day (24 hour period), time of the min customers

Many states have the same county names as other states.



Do I need to create a cursor to obtain a list of the unique county and state names first?



This will give me a list of the county names but I also need the state names.



with arcpy.da.SearchCursor(tablesMerged, ["county_nam"]) as cursor:
print sorted(row[0] for rows in cursor)









share|improve this question
























  • Are you looking for a whole script or a few hints how to accomplish this?

    – Stophface
    Aug 12 '14 at 18:44











  • Just a few hints would be great! Thanks. I haven't used Python in a little while but I think I would be able to get going with a few hints.

    – Andrew
    Aug 12 '14 at 18:46






  • 3





    the most straightforward is to use the built in "summary statistics" tools with several case fields

    – radouxju
    Aug 12 '14 at 19:38











  • That may work. I didn't know it allowed for multiple case fields. I will give that a shot! Thanks.

    – Andrew
    Aug 12 '14 at 19:56











  • I agree with @radouxju - Summary Statistics could save you a lot of code here, and should also run faster.

    – PolyGeo
    Aug 12 '14 at 21:46













4












4








4








I have a geodatabase table with the following fields: County_Name, State_Name, Date_Time, Customers



Example



Alameda, CA, 8/1/2014 12AM, 6 
Alameda, CA, 8/1/2014 1AM, 1
Alameda, CA, 8/1/2014 2AM, 3
....


Data for all US counties is in the table. I just want to create a new table that contains the



  • county, state, max customers for the day (24 hour period), time of the max customers

  • county, state, min customers for the day (24 hour period), time of the min customers

Many states have the same county names as other states.



Do I need to create a cursor to obtain a list of the unique county and state names first?



This will give me a list of the county names but I also need the state names.



with arcpy.da.SearchCursor(tablesMerged, ["county_nam"]) as cursor:
print sorted(row[0] for rows in cursor)









share|improve this question
















I have a geodatabase table with the following fields: County_Name, State_Name, Date_Time, Customers



Example



Alameda, CA, 8/1/2014 12AM, 6 
Alameda, CA, 8/1/2014 1AM, 1
Alameda, CA, 8/1/2014 2AM, 3
....


Data for all US counties is in the table. I just want to create a new table that contains the



  • county, state, max customers for the day (24 hour period), time of the max customers

  • county, state, min customers for the day (24 hour period), time of the min customers

Many states have the same county names as other states.



Do I need to create a cursor to obtain a list of the unique county and state names first?



This will give me a list of the county names but I also need the state names.



with arcpy.da.SearchCursor(tablesMerged, ["county_nam"]) as cursor:
print sorted(row[0] for rows in cursor)






arcpy cursor attribute-joins






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Jan 12 '18 at 9:32









PolyGeo

54k1782246




54k1782246










asked Aug 12 '14 at 18:27









AndrewAndrew

199313




199313












  • Are you looking for a whole script or a few hints how to accomplish this?

    – Stophface
    Aug 12 '14 at 18:44











  • Just a few hints would be great! Thanks. I haven't used Python in a little while but I think I would be able to get going with a few hints.

    – Andrew
    Aug 12 '14 at 18:46






  • 3





    the most straightforward is to use the built in "summary statistics" tools with several case fields

    – radouxju
    Aug 12 '14 at 19:38











  • That may work. I didn't know it allowed for multiple case fields. I will give that a shot! Thanks.

    – Andrew
    Aug 12 '14 at 19:56











  • I agree with @radouxju - Summary Statistics could save you a lot of code here, and should also run faster.

    – PolyGeo
    Aug 12 '14 at 21:46

















  • Are you looking for a whole script or a few hints how to accomplish this?

    – Stophface
    Aug 12 '14 at 18:44











  • Just a few hints would be great! Thanks. I haven't used Python in a little while but I think I would be able to get going with a few hints.

    – Andrew
    Aug 12 '14 at 18:46






  • 3





    the most straightforward is to use the built in "summary statistics" tools with several case fields

    – radouxju
    Aug 12 '14 at 19:38











  • That may work. I didn't know it allowed for multiple case fields. I will give that a shot! Thanks.

    – Andrew
    Aug 12 '14 at 19:56











  • I agree with @radouxju - Summary Statistics could save you a lot of code here, and should also run faster.

    – PolyGeo
    Aug 12 '14 at 21:46
















Are you looking for a whole script or a few hints how to accomplish this?

– Stophface
Aug 12 '14 at 18:44





Are you looking for a whole script or a few hints how to accomplish this?

– Stophface
Aug 12 '14 at 18:44













Just a few hints would be great! Thanks. I haven't used Python in a little while but I think I would be able to get going with a few hints.

– Andrew
Aug 12 '14 at 18:46





Just a few hints would be great! Thanks. I haven't used Python in a little while but I think I would be able to get going with a few hints.

– Andrew
Aug 12 '14 at 18:46




3




3





the most straightforward is to use the built in "summary statistics" tools with several case fields

– radouxju
Aug 12 '14 at 19:38





the most straightforward is to use the built in "summary statistics" tools with several case fields

– radouxju
Aug 12 '14 at 19:38













That may work. I didn't know it allowed for multiple case fields. I will give that a shot! Thanks.

– Andrew
Aug 12 '14 at 19:56





That may work. I didn't know it allowed for multiple case fields. I will give that a shot! Thanks.

– Andrew
Aug 12 '14 at 19:56













I agree with @radouxju - Summary Statistics could save you a lot of code here, and should also run faster.

– PolyGeo
Aug 12 '14 at 21:46





I agree with @radouxju - Summary Statistics could save you a lot of code here, and should also run faster.

– PolyGeo
Aug 12 '14 at 21:46










1 Answer
1






active

oldest

votes


















3














Since you said you just need a hint with python I came up with this:



My test table:



testtable



import arcpy

arcpy.env.workspace = "..." #on windows use \


#SEARCHCURSOR
#SearchCursor (in_table, field_names, where_clause, spatial_reference, explode_to_points, sql_clause)"""
stable = "test2.shp"
sfield = ["county", "state", "date", "Customers"]


namesdb = set(row[0] for row in arcpy.da.SearchCursor(stable, sfield)) #a set is a collection type which does not allow duplicates
#since there are a lot of duplicates (countynames) we only want each countyname once
#more information on sets can be found here http://www.python-course.eu/sets_frozensets.php

print "Countynames without duplicates: ", namesdb



"""
I only left that in for better understanding what is basically happening in the generator above
The namesdb = set(row.....) replaces all of this:


names = []
namesdb = []

with arcpy.da.SearchCursor(stable, sfield) as scursor: #search for the county names
for srow in scursor:
names.append(srow[0]) #append all found countynames to a list


print "duplicates: ", names


for i in names: #get rid of dublicates in statenames
if i not in namesdb:
namesdb.append(i) #create new list without duplicates


print "without duplicates: ", namesdb

"""


countylist = #create a dict where elements from namesdb are the KEYS
for name in namesdb:
countylist[name] = []

print "dict: ", countylist


with arcpy.da.SearchCursor(stable, sfield) as scursor:
for srow in scursor:
for county in namesdb: #iterate through the namesdb list
if srow [0] == county: #get the value of each defined column in sfield for each row of countyname
countylist[county].append(srow) #append to the matching KEY in dictionary

else:
continue


print "dict with values: ", countylist


from operator import itemgetter
#now the trickiest part (for me, cause I am a python beginner, and that really hurt my head). I went to SO to ask a question. See here for better underatanding whats happening: http://stackoverflow.com/questions/25288927/finding-the-max-value-of-list-in-dictionary?noredirect=1#comment39411443_25288927

maxcostumers = k: max(v, key=itemgetter(-1)) for k, v in countylist.iteritems() #returns max number of customers, if customers is the last column in your table. If not, adjust the -1
mincostumers = k: min(v, key=itemgetter(-1)) for k, v in countylist.iteritems() #returns the min number of customers, as see above


print "row from table with max costumers: ", maxcostumers
print "row from table with min costumers: ", mincostumers


Thats the Output generated:



ountynames without duplicates: set([u'New_York', u'Jersy', u'Alameda'])

dict: u'New_York': [], u'Jersy': [], u'Alameda': []

dict with values:
u'New_York': [(u'New_York', u'NY', datetime.datetime(2014, 8, 13, 0, 0), 10), (u'New_York', u'NY', datetime.datetime(2014, 8, 13, 0, 0), 4), (u'New_York', u'NY', datetime.datetime(2014, 8, 13, 0, 0), 3)],
u'Jersy': [(u'Jersy', u'JY', datetime.datetime(2014, 8, 13, 0, 0), 6), (u'Jersy', u'JY', datetime.datetime(2014, 8, 13, 0, 0), 7)],
u'Alameda': [(u'Alameda', u'CA', datetime.datetime(2014, 8, 13, 0, 0), 1), (u'Alameda', u'CA', datetime.datetime(2014, 8, 13, 0, 0), 2), (u'Alameda', u'CA', datetime.datetime(2014, 8, 13, 0, 0), 3), (u'Alameda', u'CA', datetime.datetime(2014, 8, 13, 0, 0), 1)]


row from table with max costumers:
u'New_York': (u'New_York', u'NY', datetime.datetime(2014, 8, 13, 0, 0), 10),
u'Jersy': (u'Jersy', u'JY', datetime.datetime(2014, 8, 13, 0, 0), 7),
u'Alameda': (u'Alameda', u'CA', datetime.datetime(2014, 8, 13, 0, 0), 3)


row from table with min costumers:
u'New_York': (u'New_York', u'NY', datetime.datetime(2014, 8, 13, 0, 0), 3),
u'Jersy': (u'Jersy', u'JY', datetime.datetime(2014, 8, 13, 0, 0), 6),
u'Alameda': (u'Alameda', u'CA', datetime.datetime(2014, 8, 13, 0, 0), 1)



Then you only need an UpdateCursor and the formatting for the time.
Information regarding this you will find here:
http://resources.arcgis.com/en/help/main/10.1/index.html#//018w00000014000000
and
http://resources.arcgis.com/en/help/main/10.1/index.html#//001700000046000000






share|improve this answer




















  • 2





    Since dictionaries are orderless, you can just use set() to remove duplicates. You can pass a generator expression directly to it, a la namesdb = set(row[0] for row in arcpy.da.SearchCursor(stable, sfield)).

    – Paul
    Aug 12 '14 at 20:49











  • @Paul thanks for the further input. Ill check that tomorrow.

    – Stophface
    Aug 12 '14 at 22:12











  • Thank you! I will try and test this out today or tomorrow.

    – Andrew
    Aug 13 '14 at 13:20











  • @Andrew I updated my answere

    – Stophface
    Aug 13 '14 at 16:03











Your Answer








StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "79"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);

else
createEditor();

);

function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);



);













draft saved

draft discarded


















StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fgis.stackexchange.com%2fquestions%2f110310%2ffind-max-and-min-values-from-a-table-based-on-two-fields%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes









3














Since you said you just need a hint with python I came up with this:



My test table:



testtable



import arcpy

arcpy.env.workspace = "..." #on windows use \


#SEARCHCURSOR
#SearchCursor (in_table, field_names, where_clause, spatial_reference, explode_to_points, sql_clause)"""
stable = "test2.shp"
sfield = ["county", "state", "date", "Customers"]


namesdb = set(row[0] for row in arcpy.da.SearchCursor(stable, sfield)) #a set is a collection type which does not allow duplicates
#since there are a lot of duplicates (countynames) we only want each countyname once
#more information on sets can be found here http://www.python-course.eu/sets_frozensets.php

print "Countynames without duplicates: ", namesdb



"""
I only left that in for better understanding what is basically happening in the generator above
The namesdb = set(row.....) replaces all of this:


names = []
namesdb = []

with arcpy.da.SearchCursor(stable, sfield) as scursor: #search for the county names
for srow in scursor:
names.append(srow[0]) #append all found countynames to a list


print "duplicates: ", names


for i in names: #get rid of dublicates in statenames
if i not in namesdb:
namesdb.append(i) #create new list without duplicates


print "without duplicates: ", namesdb

"""


countylist = #create a dict where elements from namesdb are the KEYS
for name in namesdb:
countylist[name] = []

print "dict: ", countylist


with arcpy.da.SearchCursor(stable, sfield) as scursor:
for srow in scursor:
for county in namesdb: #iterate through the namesdb list
if srow [0] == county: #get the value of each defined column in sfield for each row of countyname
countylist[county].append(srow) #append to the matching KEY in dictionary

else:
continue


print "dict with values: ", countylist


from operator import itemgetter
#now the trickiest part (for me, cause I am a python beginner, and that really hurt my head). I went to SO to ask a question. See here for better underatanding whats happening: http://stackoverflow.com/questions/25288927/finding-the-max-value-of-list-in-dictionary?noredirect=1#comment39411443_25288927

maxcostumers = k: max(v, key=itemgetter(-1)) for k, v in countylist.iteritems() #returns max number of customers, if customers is the last column in your table. If not, adjust the -1
mincostumers = k: min(v, key=itemgetter(-1)) for k, v in countylist.iteritems() #returns the min number of customers, as see above


print "row from table with max costumers: ", maxcostumers
print "row from table with min costumers: ", mincostumers


Thats the Output generated:



ountynames without duplicates: set([u'New_York', u'Jersy', u'Alameda'])

dict: u'New_York': [], u'Jersy': [], u'Alameda': []

dict with values:
u'New_York': [(u'New_York', u'NY', datetime.datetime(2014, 8, 13, 0, 0), 10), (u'New_York', u'NY', datetime.datetime(2014, 8, 13, 0, 0), 4), (u'New_York', u'NY', datetime.datetime(2014, 8, 13, 0, 0), 3)],
u'Jersy': [(u'Jersy', u'JY', datetime.datetime(2014, 8, 13, 0, 0), 6), (u'Jersy', u'JY', datetime.datetime(2014, 8, 13, 0, 0), 7)],
u'Alameda': [(u'Alameda', u'CA', datetime.datetime(2014, 8, 13, 0, 0), 1), (u'Alameda', u'CA', datetime.datetime(2014, 8, 13, 0, 0), 2), (u'Alameda', u'CA', datetime.datetime(2014, 8, 13, 0, 0), 3), (u'Alameda', u'CA', datetime.datetime(2014, 8, 13, 0, 0), 1)]


row from table with max costumers:
u'New_York': (u'New_York', u'NY', datetime.datetime(2014, 8, 13, 0, 0), 10),
u'Jersy': (u'Jersy', u'JY', datetime.datetime(2014, 8, 13, 0, 0), 7),
u'Alameda': (u'Alameda', u'CA', datetime.datetime(2014, 8, 13, 0, 0), 3)


row from table with min costumers:
u'New_York': (u'New_York', u'NY', datetime.datetime(2014, 8, 13, 0, 0), 3),
u'Jersy': (u'Jersy', u'JY', datetime.datetime(2014, 8, 13, 0, 0), 6),
u'Alameda': (u'Alameda', u'CA', datetime.datetime(2014, 8, 13, 0, 0), 1)



Then you only need an UpdateCursor and the formatting for the time.
Information regarding this you will find here:
http://resources.arcgis.com/en/help/main/10.1/index.html#//018w00000014000000
and
http://resources.arcgis.com/en/help/main/10.1/index.html#//001700000046000000






share|improve this answer




















  • 2





    Since dictionaries are orderless, you can just use set() to remove duplicates. You can pass a generator expression directly to it, a la namesdb = set(row[0] for row in arcpy.da.SearchCursor(stable, sfield)).

    – Paul
    Aug 12 '14 at 20:49











  • @Paul thanks for the further input. Ill check that tomorrow.

    – Stophface
    Aug 12 '14 at 22:12











  • Thank you! I will try and test this out today or tomorrow.

    – Andrew
    Aug 13 '14 at 13:20











  • @Andrew I updated my answere

    – Stophface
    Aug 13 '14 at 16:03















3














Since you said you just need a hint with python I came up with this:



My test table:



testtable



import arcpy

arcpy.env.workspace = "..." #on windows use \


#SEARCHCURSOR
#SearchCursor (in_table, field_names, where_clause, spatial_reference, explode_to_points, sql_clause)"""
stable = "test2.shp"
sfield = ["county", "state", "date", "Customers"]


namesdb = set(row[0] for row in arcpy.da.SearchCursor(stable, sfield)) #a set is a collection type which does not allow duplicates
#since there are a lot of duplicates (countynames) we only want each countyname once
#more information on sets can be found here http://www.python-course.eu/sets_frozensets.php

print "Countynames without duplicates: ", namesdb



"""
I only left that in for better understanding what is basically happening in the generator above
The namesdb = set(row.....) replaces all of this:


names = []
namesdb = []

with arcpy.da.SearchCursor(stable, sfield) as scursor: #search for the county names
for srow in scursor:
names.append(srow[0]) #append all found countynames to a list


print "duplicates: ", names


for i in names: #get rid of dublicates in statenames
if i not in namesdb:
namesdb.append(i) #create new list without duplicates


print "without duplicates: ", namesdb

"""


countylist = #create a dict where elements from namesdb are the KEYS
for name in namesdb:
countylist[name] = []

print "dict: ", countylist


with arcpy.da.SearchCursor(stable, sfield) as scursor:
for srow in scursor:
for county in namesdb: #iterate through the namesdb list
if srow [0] == county: #get the value of each defined column in sfield for each row of countyname
countylist[county].append(srow) #append to the matching KEY in dictionary

else:
continue


print "dict with values: ", countylist


from operator import itemgetter
#now the trickiest part (for me, cause I am a python beginner, and that really hurt my head). I went to SO to ask a question. See here for better underatanding whats happening: http://stackoverflow.com/questions/25288927/finding-the-max-value-of-list-in-dictionary?noredirect=1#comment39411443_25288927

maxcostumers = k: max(v, key=itemgetter(-1)) for k, v in countylist.iteritems() #returns max number of customers, if customers is the last column in your table. If not, adjust the -1
mincostumers = k: min(v, key=itemgetter(-1)) for k, v in countylist.iteritems() #returns the min number of customers, as see above


print "row from table with max costumers: ", maxcostumers
print "row from table with min costumers: ", mincostumers


Thats the Output generated:



ountynames without duplicates: set([u'New_York', u'Jersy', u'Alameda'])

dict: u'New_York': [], u'Jersy': [], u'Alameda': []

dict with values:
u'New_York': [(u'New_York', u'NY', datetime.datetime(2014, 8, 13, 0, 0), 10), (u'New_York', u'NY', datetime.datetime(2014, 8, 13, 0, 0), 4), (u'New_York', u'NY', datetime.datetime(2014, 8, 13, 0, 0), 3)],
u'Jersy': [(u'Jersy', u'JY', datetime.datetime(2014, 8, 13, 0, 0), 6), (u'Jersy', u'JY', datetime.datetime(2014, 8, 13, 0, 0), 7)],
u'Alameda': [(u'Alameda', u'CA', datetime.datetime(2014, 8, 13, 0, 0), 1), (u'Alameda', u'CA', datetime.datetime(2014, 8, 13, 0, 0), 2), (u'Alameda', u'CA', datetime.datetime(2014, 8, 13, 0, 0), 3), (u'Alameda', u'CA', datetime.datetime(2014, 8, 13, 0, 0), 1)]


row from table with max costumers:
u'New_York': (u'New_York', u'NY', datetime.datetime(2014, 8, 13, 0, 0), 10),
u'Jersy': (u'Jersy', u'JY', datetime.datetime(2014, 8, 13, 0, 0), 7),
u'Alameda': (u'Alameda', u'CA', datetime.datetime(2014, 8, 13, 0, 0), 3)


row from table with min costumers:
u'New_York': (u'New_York', u'NY', datetime.datetime(2014, 8, 13, 0, 0), 3),
u'Jersy': (u'Jersy', u'JY', datetime.datetime(2014, 8, 13, 0, 0), 6),
u'Alameda': (u'Alameda', u'CA', datetime.datetime(2014, 8, 13, 0, 0), 1)



Then you only need an UpdateCursor and the formatting for the time.
Information regarding this you will find here:
http://resources.arcgis.com/en/help/main/10.1/index.html#//018w00000014000000
and
http://resources.arcgis.com/en/help/main/10.1/index.html#//001700000046000000






share|improve this answer




















  • 2





    Since dictionaries are orderless, you can just use set() to remove duplicates. You can pass a generator expression directly to it, a la namesdb = set(row[0] for row in arcpy.da.SearchCursor(stable, sfield)).

    – Paul
    Aug 12 '14 at 20:49











  • @Paul thanks for the further input. Ill check that tomorrow.

    – Stophface
    Aug 12 '14 at 22:12











  • Thank you! I will try and test this out today or tomorrow.

    – Andrew
    Aug 13 '14 at 13:20











  • @Andrew I updated my answere

    – Stophface
    Aug 13 '14 at 16:03













3












3








3







Since you said you just need a hint with python I came up with this:



My test table:



testtable



import arcpy

arcpy.env.workspace = "..." #on windows use \


#SEARCHCURSOR
#SearchCursor (in_table, field_names, where_clause, spatial_reference, explode_to_points, sql_clause)"""
stable = "test2.shp"
sfield = ["county", "state", "date", "Customers"]


namesdb = set(row[0] for row in arcpy.da.SearchCursor(stable, sfield)) #a set is a collection type which does not allow duplicates
#since there are a lot of duplicates (countynames) we only want each countyname once
#more information on sets can be found here http://www.python-course.eu/sets_frozensets.php

print "Countynames without duplicates: ", namesdb



"""
I only left that in for better understanding what is basically happening in the generator above
The namesdb = set(row.....) replaces all of this:


names = []
namesdb = []

with arcpy.da.SearchCursor(stable, sfield) as scursor: #search for the county names
for srow in scursor:
names.append(srow[0]) #append all found countynames to a list


print "duplicates: ", names


for i in names: #get rid of dublicates in statenames
if i not in namesdb:
namesdb.append(i) #create new list without duplicates


print "without duplicates: ", namesdb

"""


countylist = #create a dict where elements from namesdb are the KEYS
for name in namesdb:
countylist[name] = []

print "dict: ", countylist


with arcpy.da.SearchCursor(stable, sfield) as scursor:
for srow in scursor:
for county in namesdb: #iterate through the namesdb list
if srow [0] == county: #get the value of each defined column in sfield for each row of countyname
countylist[county].append(srow) #append to the matching KEY in dictionary

else:
continue


print "dict with values: ", countylist


from operator import itemgetter
#now the trickiest part (for me, cause I am a python beginner, and that really hurt my head). I went to SO to ask a question. See here for better underatanding whats happening: http://stackoverflow.com/questions/25288927/finding-the-max-value-of-list-in-dictionary?noredirect=1#comment39411443_25288927

maxcostumers = k: max(v, key=itemgetter(-1)) for k, v in countylist.iteritems() #returns max number of customers, if customers is the last column in your table. If not, adjust the -1
mincostumers = k: min(v, key=itemgetter(-1)) for k, v in countylist.iteritems() #returns the min number of customers, as see above


print "row from table with max costumers: ", maxcostumers
print "row from table with min costumers: ", mincostumers


Thats the Output generated:



ountynames without duplicates: set([u'New_York', u'Jersy', u'Alameda'])

dict: u'New_York': [], u'Jersy': [], u'Alameda': []

dict with values:
u'New_York': [(u'New_York', u'NY', datetime.datetime(2014, 8, 13, 0, 0), 10), (u'New_York', u'NY', datetime.datetime(2014, 8, 13, 0, 0), 4), (u'New_York', u'NY', datetime.datetime(2014, 8, 13, 0, 0), 3)],
u'Jersy': [(u'Jersy', u'JY', datetime.datetime(2014, 8, 13, 0, 0), 6), (u'Jersy', u'JY', datetime.datetime(2014, 8, 13, 0, 0), 7)],
u'Alameda': [(u'Alameda', u'CA', datetime.datetime(2014, 8, 13, 0, 0), 1), (u'Alameda', u'CA', datetime.datetime(2014, 8, 13, 0, 0), 2), (u'Alameda', u'CA', datetime.datetime(2014, 8, 13, 0, 0), 3), (u'Alameda', u'CA', datetime.datetime(2014, 8, 13, 0, 0), 1)]


row from table with max costumers:
u'New_York': (u'New_York', u'NY', datetime.datetime(2014, 8, 13, 0, 0), 10),
u'Jersy': (u'Jersy', u'JY', datetime.datetime(2014, 8, 13, 0, 0), 7),
u'Alameda': (u'Alameda', u'CA', datetime.datetime(2014, 8, 13, 0, 0), 3)


row from table with min costumers:
u'New_York': (u'New_York', u'NY', datetime.datetime(2014, 8, 13, 0, 0), 3),
u'Jersy': (u'Jersy', u'JY', datetime.datetime(2014, 8, 13, 0, 0), 6),
u'Alameda': (u'Alameda', u'CA', datetime.datetime(2014, 8, 13, 0, 0), 1)



Then you only need an UpdateCursor and the formatting for the time.
Information regarding this you will find here:
http://resources.arcgis.com/en/help/main/10.1/index.html#//018w00000014000000
and
http://resources.arcgis.com/en/help/main/10.1/index.html#//001700000046000000






share|improve this answer















Since you said you just need a hint with python I came up with this:



My test table:



testtable



import arcpy

arcpy.env.workspace = "..." #on windows use \


#SEARCHCURSOR
#SearchCursor (in_table, field_names, where_clause, spatial_reference, explode_to_points, sql_clause)"""
stable = "test2.shp"
sfield = ["county", "state", "date", "Customers"]


namesdb = set(row[0] for row in arcpy.da.SearchCursor(stable, sfield)) #a set is a collection type which does not allow duplicates
#since there are a lot of duplicates (countynames) we only want each countyname once
#more information on sets can be found here http://www.python-course.eu/sets_frozensets.php

print "Countynames without duplicates: ", namesdb



"""
I only left that in for better understanding what is basically happening in the generator above
The namesdb = set(row.....) replaces all of this:


names = []
namesdb = []

with arcpy.da.SearchCursor(stable, sfield) as scursor: #search for the county names
for srow in scursor:
names.append(srow[0]) #append all found countynames to a list


print "duplicates: ", names


for i in names: #get rid of dublicates in statenames
if i not in namesdb:
namesdb.append(i) #create new list without duplicates


print "without duplicates: ", namesdb

"""


countylist = #create a dict where elements from namesdb are the KEYS
for name in namesdb:
countylist[name] = []

print "dict: ", countylist


with arcpy.da.SearchCursor(stable, sfield) as scursor:
for srow in scursor:
for county in namesdb: #iterate through the namesdb list
if srow [0] == county: #get the value of each defined column in sfield for each row of countyname
countylist[county].append(srow) #append to the matching KEY in dictionary

else:
continue


print "dict with values: ", countylist


from operator import itemgetter
#now the trickiest part (for me, cause I am a python beginner, and that really hurt my head). I went to SO to ask a question. See here for better underatanding whats happening: http://stackoverflow.com/questions/25288927/finding-the-max-value-of-list-in-dictionary?noredirect=1#comment39411443_25288927

maxcostumers = k: max(v, key=itemgetter(-1)) for k, v in countylist.iteritems() #returns max number of customers, if customers is the last column in your table. If not, adjust the -1
mincostumers = k: min(v, key=itemgetter(-1)) for k, v in countylist.iteritems() #returns the min number of customers, as see above


print "row from table with max costumers: ", maxcostumers
print "row from table with min costumers: ", mincostumers


Thats the Output generated:



ountynames without duplicates: set([u'New_York', u'Jersy', u'Alameda'])

dict: u'New_York': [], u'Jersy': [], u'Alameda': []

dict with values:
u'New_York': [(u'New_York', u'NY', datetime.datetime(2014, 8, 13, 0, 0), 10), (u'New_York', u'NY', datetime.datetime(2014, 8, 13, 0, 0), 4), (u'New_York', u'NY', datetime.datetime(2014, 8, 13, 0, 0), 3)],
u'Jersy': [(u'Jersy', u'JY', datetime.datetime(2014, 8, 13, 0, 0), 6), (u'Jersy', u'JY', datetime.datetime(2014, 8, 13, 0, 0), 7)],
u'Alameda': [(u'Alameda', u'CA', datetime.datetime(2014, 8, 13, 0, 0), 1), (u'Alameda', u'CA', datetime.datetime(2014, 8, 13, 0, 0), 2), (u'Alameda', u'CA', datetime.datetime(2014, 8, 13, 0, 0), 3), (u'Alameda', u'CA', datetime.datetime(2014, 8, 13, 0, 0), 1)]


row from table with max costumers:
u'New_York': (u'New_York', u'NY', datetime.datetime(2014, 8, 13, 0, 0), 10),
u'Jersy': (u'Jersy', u'JY', datetime.datetime(2014, 8, 13, 0, 0), 7),
u'Alameda': (u'Alameda', u'CA', datetime.datetime(2014, 8, 13, 0, 0), 3)


row from table with min costumers:
u'New_York': (u'New_York', u'NY', datetime.datetime(2014, 8, 13, 0, 0), 3),
u'Jersy': (u'Jersy', u'JY', datetime.datetime(2014, 8, 13, 0, 0), 6),
u'Alameda': (u'Alameda', u'CA', datetime.datetime(2014, 8, 13, 0, 0), 1)



Then you only need an UpdateCursor and the formatting for the time.
Information regarding this you will find here:
http://resources.arcgis.com/en/help/main/10.1/index.html#//018w00000014000000
and
http://resources.arcgis.com/en/help/main/10.1/index.html#//001700000046000000







share|improve this answer














share|improve this answer



share|improve this answer








edited Apr 11 at 17:17









Glorfindel

3011311




3011311










answered Aug 12 '14 at 20:39









StophfaceStophface

1,19811540




1,19811540







  • 2





    Since dictionaries are orderless, you can just use set() to remove duplicates. You can pass a generator expression directly to it, a la namesdb = set(row[0] for row in arcpy.da.SearchCursor(stable, sfield)).

    – Paul
    Aug 12 '14 at 20:49











  • @Paul thanks for the further input. Ill check that tomorrow.

    – Stophface
    Aug 12 '14 at 22:12











  • Thank you! I will try and test this out today or tomorrow.

    – Andrew
    Aug 13 '14 at 13:20











  • @Andrew I updated my answere

    – Stophface
    Aug 13 '14 at 16:03












  • 2





    Since dictionaries are orderless, you can just use set() to remove duplicates. You can pass a generator expression directly to it, a la namesdb = set(row[0] for row in arcpy.da.SearchCursor(stable, sfield)).

    – Paul
    Aug 12 '14 at 20:49











  • @Paul thanks for the further input. Ill check that tomorrow.

    – Stophface
    Aug 12 '14 at 22:12











  • Thank you! I will try and test this out today or tomorrow.

    – Andrew
    Aug 13 '14 at 13:20











  • @Andrew I updated my answere

    – Stophface
    Aug 13 '14 at 16:03







2




2





Since dictionaries are orderless, you can just use set() to remove duplicates. You can pass a generator expression directly to it, a la namesdb = set(row[0] for row in arcpy.da.SearchCursor(stable, sfield)).

– Paul
Aug 12 '14 at 20:49





Since dictionaries are orderless, you can just use set() to remove duplicates. You can pass a generator expression directly to it, a la namesdb = set(row[0] for row in arcpy.da.SearchCursor(stable, sfield)).

– Paul
Aug 12 '14 at 20:49













@Paul thanks for the further input. Ill check that tomorrow.

– Stophface
Aug 12 '14 at 22:12





@Paul thanks for the further input. Ill check that tomorrow.

– Stophface
Aug 12 '14 at 22:12













Thank you! I will try and test this out today or tomorrow.

– Andrew
Aug 13 '14 at 13:20





Thank you! I will try and test this out today or tomorrow.

– Andrew
Aug 13 '14 at 13:20













@Andrew I updated my answere

– Stophface
Aug 13 '14 at 16:03





@Andrew I updated my answere

– Stophface
Aug 13 '14 at 16:03

















draft saved

draft discarded
















































Thanks for contributing an answer to Geographic Information Systems Stack Exchange!


  • Please be sure to answer the question. Provide details and share your research!

But avoid


  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fgis.stackexchange.com%2fquestions%2f110310%2ffind-max-and-min-values-from-a-table-based-on-two-fields%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

រឿង រ៉ូមេអូ និង ហ្ស៊ុយលីយេ សង្ខេបរឿង តួអង្គ បញ្ជីណែនាំ

Crop image to path created in TikZ? Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern)Crop an inserted image?TikZ pictures does not appear in posterImage behind and beyond crop marks?Tikz picture as large as possible on A4 PageTransparency vs image compression dilemmaHow to crop background from image automatically?Image does not cropTikzexternal capturing crop marks when externalizing pgfplots?How to include image path that contains a dollar signCrop image with left size given

Romeo and Juliet ContentsCharactersSynopsisSourcesDate and textThemes and motifsCriticism and interpretationLegacyScene by sceneSee alsoNotes and referencesSourcesExternal linksNavigation menu"Consumer Price Index (estimate) 1800–"10.2307/28710160037-3222287101610.1093/res/II.5.31910.2307/45967845967810.2307/2869925286992510.1525/jams.1982.35.3.03a00050"Dada Masilo: South African dancer who breaks the rules"10.1093/res/os-XV.57.1610.2307/28680942868094"Sweet Sorrow: Mann-Korman's Romeo and Juliet Closes Sept. 5 at MN's Ordway"the original10.2307/45957745957710.1017/CCOL0521570476.009"Ram Leela box office collections hit massive Rs 100 crore, pulverises prediction"Archived"Broadway Revival of Romeo and Juliet, Starring Orlando Bloom and Condola Rashad, Will Close Dec. 8"Archived10.1075/jhp.7.1.04hon"Wherefore art thou, Romeo? To make us laugh at Navy Pier"the original10.1093/gmo/9781561592630.article.O006772"Ram-leela Review Roundup: Critics Hail Film as Best Adaptation of Romeo and Juliet"Archived10.2307/31946310047-77293194631"Romeo and Juliet get Twitter treatment""Juliet's Nurse by Lois Leveen""Romeo and Juliet: Orlando Bloom's Broadway Debut Released in Theaters for Valentine's Day"Archived"Romeo and Juliet Has No Balcony"10.1093/gmo/9781561592630.article.O00778110.2307/2867423286742310.1076/enst.82.2.115.959510.1080/00138380601042675"A plague o' both your houses: error in GCSE exam paper forces apology""Juliet of the Five O'Clock Shadow, and Other Wonders"10.2307/33912430027-4321339124310.2307/28487440038-7134284874410.2307/29123140149-661129123144728341M"Weekender Guide: Shakespeare on The Drive""balcony"UK public library membership"romeo"UK public library membership10.1017/CCOL9780521844291"Post-Zionist Critique on Israel and the Palestinians Part III: Popular Culture"10.2307/25379071533-86140377-919X2537907"Capulets and Montagues: UK exam board admit mixing names up in Romeo and Juliet paper"Istoria Novellamente Ritrovata di Due Nobili Amanti2027/mdp.390150822329610820-750X"GCSE exam error: Board accidentally rewrites Shakespeare"10.2307/29176390149-66112917639"Exam board apologises after error in English GCSE paper which confused characters in Shakespeare's Romeo and Juliet""From Mariotto and Ganozza to Romeo and Guilietta: Metamorphoses of a Renaissance Tale"10.2307/37323537323510.2307/2867455286745510.2307/28678912867891"10 Questions for Taylor Swift"10.2307/28680922868092"Haymarket Theatre""The Zeffirelli Way: Revealing Talk by Florentine Director""Michael Smuin: 1938-2007 / Prolific dance director had showy career"The Life and Art of Edwin BoothRomeo and JulietRomeo and JulietRomeo and JulietRomeo and JulietEasy Read Romeo and JulietRomeo and Julieteeecb12003684p(data)4099369-3n8211610759dbe00d-a9e2-41a3-b2c1-977dd692899302814385X313670221313670221