<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Zonal statistics - percentiles in ArcGIS Spatial Analyst Questions</title>
    <link>https://community.esri.com/t5/arcgis-spatial-analyst-questions/zonal-statistics-percentiles/m-p/449989#M6403</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;SPAN style="line-height: 1.5;"&gt;I ultimately need to iterate through a list of rasters (or a composite raster) to produce multiple sets of percentile results.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;My first attempt was to create a list of the rasters and use this in a for loop around lines 21 through 110. However, there were two problems with this:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1) each iteration overwrites (rather than appends to) the previous set of percentile results&lt;/P&gt;&lt;P&gt;2) to keep track of the results, a new field is needed in the output that contains the name of the raster for which the percentiles were derived from&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Are you able to provide a solution for this?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I was thinking that output to a non-spatial table with a PolygonID may be an alternate method.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 15 Jan 2015 19:58:53 GMT</pubDate>
    <dc:creator>toddsams</dc:creator>
    <dc:date>2015-01-15T19:58:53Z</dc:date>
    <item>
      <title>Zonal statistics - percentiles</title>
      <link>https://community.esri.com/t5/arcgis-spatial-analyst-questions/zonal-statistics-percentiles/m-p/449972#M6386</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hello, &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I am looking for an analogous method to Zonal Statistics that is able to generate user-defined percentiles (such as the 5th and 95th percentile) of the input raster data.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I looked at the GME tools and those stats metrics are hardwired in the same fashion as ArcGIS Zonal Statistics tools are.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Any other ideas that I can explore?&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 30 Jun 2014 20:35:35 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-spatial-analyst-questions/zonal-statistics-percentiles/m-p/449972#M6386</guid>
      <dc:creator>toddsams</dc:creator>
      <dc:date>2014-06-30T20:35:35Z</dc:date>
    </item>
    <item>
      <title>Re: Zonal statistics - percentiles</title>
      <link>https://community.esri.com/t5/arcgis-spatial-analyst-questions/zonal-statistics-percentiles/m-p/449973#M6387</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;I am looking for an analogous method to Zonal Statistics that is able to generate user-defined percentiles (such as the 5th and 95th percentile) of the input raster data.&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The &lt;/SPAN&gt;&lt;A href="http://resources.arcgis.com/en/help/main/10.2/index.html#//009z000000ss000000"&gt;Slice&lt;/A&gt;&lt;SPAN&gt; tool is a handy way to do this. If you specify an EQUAL_AREA slice with 20 zones specified, the first class will be in the 5th percentile, the last will be in the 95th. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;If your data values are not continuously distributed (that is, many ties, which can make the percentile value less useful) or highly skewed (which can get you into numerical issues) you may not get the results you expect, but if the data are well-distributed this approach should work very well.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 02 Jul 2014 19:28:36 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-spatial-analyst-questions/zonal-statistics-percentiles/m-p/449973#M6387</guid>
      <dc:creator>curtvprice</dc:creator>
      <dc:date>2014-07-02T19:28:36Z</dc:date>
    </item>
    <item>
      <title>Re: Zonal statistics - percentiles</title>
      <link>https://community.esri.com/t5/arcgis-spatial-analyst-questions/zonal-statistics-percentiles/m-p/449974#M6388</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Thanks for the Slice suggestion.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I ran the tool using the parameters you suggested. However, the raster attribute table that was returned simply shows 20 rows with "Values" of 1 through 20 and a "Count" of the number of pixels in each of these equal area classes.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I don't see how I can derive the percentile values from this information?&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 02 Jul 2014 20:28:00 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-spatial-analyst-questions/zonal-statistics-percentiles/m-p/449974#M6388</guid>
      <dc:creator>toddsams</dc:creator>
      <dc:date>2014-07-02T20:28:00Z</dc:date>
    </item>
    <item>
      <title>Re: Zonal statistics - percentiles</title>
      <link>https://community.esri.com/t5/arcgis-spatial-analyst-questions/zonal-statistics-percentiles/m-p/449975#M6389</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;You then analyze your sliced raster with Zonal Statistics As Table to get the min and max for each class.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 10 Jul 2014 21:22:48 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-spatial-analyst-questions/zonal-statistics-percentiles/m-p/449975#M6389</guid>
      <dc:creator>curtvprice</dc:creator>
      <dc:date>2014-07-10T21:22:48Z</dc:date>
    </item>
    <item>
      <title>Re: Zonal statistics - percentiles</title>
      <link>https://community.esri.com/t5/arcgis-spatial-analyst-questions/zonal-statistics-percentiles/m-p/449976#M6390</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;It may be that my slice raster was not generated properly (attribute table shown below). It looks like it returned the number of cells in each class, which are all about the same since I used equal area classes.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I don't see how to analyze this sliced raster with zonal statistics to generate a table of percentiles?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;IMG __jive_id="1830" alt="SliceRaster_table.PNG" class="jive-image image-1" src="https://community.esri.com/legacyfs/online/1830_SliceRaster_table.PNG" style="height: auto;" /&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 10 Jul 2014 21:56:11 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-spatial-analyst-questions/zonal-statistics-percentiles/m-p/449976#M6390</guid>
      <dc:creator>toddsams</dc:creator>
      <dc:date>2014-07-10T21:56:11Z</dc:date>
    </item>
    <item>
      <title>Re: Zonal statistics - percentiles</title>
      <link>https://community.esri.com/t5/arcgis-spatial-analyst-questions/zonal-statistics-percentiles/m-p/449977#M6391</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I'm sorry Todd - still working on how to track threads in this new system, hence no reply til now.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If you ask for 20 classes from the Slice tool with the equal area option, the first class is the 5th percentile, ie VALUE times 5 (100 / 20).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If you want the percentile values (breaks), you can run Zonal Statistics As Table using the sliced raster for zones and the input to the slice for values.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 23 Jul 2014 19:09:59 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-spatial-analyst-questions/zonal-statistics-percentiles/m-p/449977#M6391</guid>
      <dc:creator>curtvprice</dc:creator>
      <dc:date>2014-07-23T19:09:59Z</dc:date>
    </item>
    <item>
      <title>Re: Zonal statistics - percentiles</title>
      <link>https://community.esri.com/t5/arcgis-spatial-analyst-questions/zonal-statistics-percentiles/m-p/449978#M6392</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Todd,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Maybe a little Python can help: Look at the code below:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="python" __jive_macro_name="code" class="jive_macro_code jive_text_macro _jivemacro_uid_14063170609553468" jivemacro_uid="_14063170609553468" modifiedtitle="true"&gt;
&lt;P&gt;def GetPixelValueForPercentile(dctper, percentile):&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; """will return last pixel value&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where percentile LE searched percentile."""&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for k in sorted(dctper.keys()):&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; perc = dctper&lt;K&gt;&lt;/K&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if perc &amp;lt;= percentile:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pix_val = k&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return pix_val&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;import arcpy&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;# path to raster (has to be integer!)&lt;/P&gt;
&lt;P&gt;ras = r"C:\Path\To\Folder\Or\Geodatabase\With\Raster"&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;# create dictionary with value vs count&lt;/P&gt;
&lt;P&gt;flds = ("VALUE", "COUNT")&lt;/P&gt;
&lt;P&gt;dct = {row[0]:row[1] for row in arcpy.da.SearchCursor(ras, flds)}&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;# calculate number of pixels in raster&lt;/P&gt;
&lt;P&gt;cnt_sum = sum(dct.values())&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;dct_per = {}&lt;/P&gt;
&lt;P&gt;cnt_i = 0&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;# loop through dictionary and create new dictionary with val vs percentile&lt;/P&gt;
&lt;P&gt;for val in sorted(dct.keys()):&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cnt_i += dct[val]&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dct_per[val] = cnt_i / cnt_sum&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;# use dct_per to determine percentiles&lt;/P&gt;
&lt;P&gt;perc = 0.05 # (5%)&lt;/P&gt;
&lt;P&gt;pixval =&amp;nbsp; GetPixelValueForPercentile(dct_per, perc)&lt;/P&gt;
&lt;P&gt;print "Found for percentile {0}, pixel value {1} with real percentile {2}".format(perc, pixval, dct_per[pixval])&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;perc = 0.95 # (95%)&lt;/P&gt;
&lt;P&gt;pixval =&amp;nbsp; GetPixelValueForPercentile(dct_per, perc)&lt;/P&gt;
&lt;P&gt;print "Found for percentile {0}, pixel value {1} with real percentile {2}".format(perc, pixval, dct_per[pixval])&lt;/P&gt;
&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;It will return the following information:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="python" __jive_macro_name="code" class="jive_macro_code jive_text_macro _jivemacro_uid_14063171134858179" jivemacro_uid="_14063171134858179"&gt;
&lt;P&gt;&amp;gt;&amp;gt; Found for percentile 0.05, pixel value 401 with real percentile 0.049861616298&lt;/P&gt;
&lt;P&gt;&amp;gt;&amp;gt; Found for percentile 0.95, pixel value 2350 with real percentile 0.949769065993&lt;/P&gt;
&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The code requires that your raster is of type integer (to make sure it has an attribute table with pixelvalue and count.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This is what happens in the code:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;on line 16 a path to your integer raster is defined (e.g. ras = r'D:\Xander\tmp\ras.gdb\DEMsmallInt')&lt;/LI&gt;&lt;LI&gt;on line 20 the attribute table is used by a da search cursor to create a dictionary (this helps to speed up the proces)&lt;/LI&gt;&lt;LI&gt;on line 23 the sum of the count is calculated (the number of pixel with a value in the raster)&lt;/LI&gt;&lt;LI&gt;on line 29 a dictionary is created that holds the pixel value and corresponding percentile&lt;/LI&gt;&lt;LI&gt;on line 35 and 39 the function (defined at the top) is used to search the pixel value for a percentile value.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Hope this is of any use.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Kind regards, Xander&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 25 Jul 2014 19:45:38 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-spatial-analyst-questions/zonal-statistics-percentiles/m-p/449978#M6392</guid>
      <dc:creator>XanderBakker</dc:creator>
      <dc:date>2014-07-25T19:45:38Z</dc:date>
    </item>
    <item>
      <title>Re: Zonal statistics - percentiles</title>
      <link>https://community.esri.com/t5/arcgis-spatial-analyst-questions/zonal-statistics-percentiles/m-p/449979#M6393</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks for the Python code for percentiles from a raster Xander.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;In my situation, I have multiple polygons that occur in various locations across a raster. I would like to generate the percentile statistics from the various portions of the raster that overlap with each individual polygon. Then, join those statistics with a unique row ID in the polygon layer.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am essentially in need of "Zonal Statistics as Table" with the ability to include percentile statistics along with Minimum, Mean, and Maximum.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;How can this be incorporated via Python?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 29 Jul 2014 17:37:03 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-spatial-analyst-questions/zonal-statistics-percentiles/m-p/449979#M6393</guid>
      <dc:creator>toddsams</dc:creator>
      <dc:date>2014-07-29T17:37:03Z</dc:date>
    </item>
    <item>
      <title>Re: Zonal statistics - percentiles</title>
      <link>https://community.esri.com/t5/arcgis-spatial-analyst-questions/zonal-statistics-percentiles/m-p/449980#M6394</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Todd,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;One option is that you write a loop through the polygon (Update cursor) to do this for each polygon:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;use the arcpy.sa.ExtractByPolygon tool to extract the relevant portion of raster and save that to the IN_MEMORY workspace&lt;/LI&gt;&lt;LI&gt;use that raster and the previous posted code to determine the percentiles&lt;/LI&gt;&lt;LI&gt;define a list of percentile values like lst_prec = [2, 5,10, 90, 95, 98] to loop through the values and determine the raster value that corresponds to that percentile. Store the result in previously created fields.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;In case there is no overlap between the polygons, you could do the following:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Rasterize your polygon layer&lt;/LI&gt;&lt;LI&gt;Use the arcpy.sa.&lt;SPAN class="n"&gt;Combine tool to create a raster that holds the combination of both values. If the number of unique combinations is less than 65536, this should be no problem.&lt;/SPAN&gt;&lt;/LI&gt;&lt;LI&gt;&lt;SPAN class="n"&gt;Adapt the code to read both the polygon layer in an update cursor and the combine raster attribute table in a search cursor to determine the percentiles and store the result&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;SPAN class="n"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;&lt;SPAN class="n"&gt;Not sure which option will be the fastest.&lt;/SPAN&gt;&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="n"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="n"&gt;Now to throw in some code (which by the way I did not test), it should look something like this:&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="n"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;PRE __default_attr="python" __jive_macro_name="code" class="jive_macro_code jive_text_macro _jivemacro_uid_14066716676323200" jivemacro_uid="_14066716676323200" modifiedtitle="true"&gt;
&lt;P&gt;def GetPixelValueForPercentile(dctper, percentile):&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; """will return last pixel value&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where percentile LE searched percentile."""&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for k in sorted(dctper.keys()):&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; perc = dctper&lt;K&gt;&lt;/K&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if perc &amp;lt;= percentile:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pix_val = k&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return pix_val&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;def FieldExist(featureclass, fieldname):&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; """Check if field exists"""&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; import arcpy&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fieldList = arcpy.ListFields(featureclass, fieldname)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return len(fieldList) == 1&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;import arcpy&lt;/P&gt;
&lt;P&gt;# settings&lt;/P&gt;
&lt;P&gt;ras = r"C:\Path\To\Folder\Or\Geodatabase\With\Raster"&lt;/P&gt;
&lt;P&gt;fc = r"C:\Path\To\Folder\Or\Geodatabase\With\PolygonFeatureclass"&lt;/P&gt;
&lt;P&gt;lst_perc = [2, 5, 10, 90, 95, 98] # list of percentiles to be calculated&lt;/P&gt;
&lt;P&gt;fld_prefix = "Perc_"&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;arcpy.env.workspace = "IN_MEMORY"&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;# add fields if they do not exist in fc&lt;/P&gt;
&lt;P&gt;# be aware, field that exist will be overwritten!&lt;/P&gt;
&lt;P&gt;flds = []&lt;/P&gt;
&lt;P&gt;for perc in lst_perc:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fld_perc = "{0}{1}".format(fld_prefix, perc)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; flds.append(fld_perc)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if not FieldExist(fc, fld_perc):&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddField_management(fc, fld_perc, "LONG")&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;# Enable Spatial analyst&lt;/P&gt;
&lt;P&gt;arcpy.CheckOutExtension("Spatial")&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;# loop through polygons&lt;/P&gt;
&lt;P&gt;flds.append("SHAPE@")&lt;/P&gt;
&lt;P&gt;with arcpy.da.UpdateCursor(fc, flds) as curs:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for row in curs:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; polygon = row[flds.index("SHAPE@")]&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lst_parts = []&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for part in polygon:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lst_crds = []&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for crdpair in part:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x, y = crdpair[0], crdpair[1]&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lst_crds.append(arcpy.Point(x, y))&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lst_parts.append(lst_crds)&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Execute ExtractByPolygon&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ras_pol = arcpy.sa.ExtractByPolygon(ras, polygon, "INSIDE")&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # not sure if ras_pol should be saved...&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # create dictionary with value vs count&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; flds_ras = ("VALUE", "COUNT")&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dct = {row[0]:row[1] for row in arcpy.da.SearchCursor(&lt;SPAN style="color: rgba(0, 0, 0, 0); font-family: Consolas, 'Courier New', Courier, mono, serif; font-size: 12px;"&gt;ras_pol&lt;/SPAN&gt;, flds_ras)}&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # calculate number of pixels in raster&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cnt_sum = sum(dct.values())&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # loop through dictionary and create new dictionary with val vs percentile&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dct_per = {}&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cnt_i = 0&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for val in sorted(dct.keys()):&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cnt_i += dct[val]&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dct_per[val] = cnt_i / cnt_sum&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # loop through list of percentiles&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for perc in lst_perc:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # use dct_per to determine percentiles&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; prec_dec = float(perc) / 100&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pixval =&amp;nbsp; GetPixelValueForPercentile(dct_per, perc)&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # write pixel value to percentile field&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fld_perc = "{0}{1}".format(fld_prefix, perc)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; row[flds.index(fld_perc)] = pixval&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # update row&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; curs.updateRow(row)&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;# return SA license&lt;/P&gt;
&lt;P&gt;arcpy.CheckInExtension("Spatial")&lt;/P&gt;
&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If you run into problems, let me know. Maybe you can throw in a piece of your data to test the code.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Kind regards,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Xander&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 29 Jul 2014 22:11:28 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-spatial-analyst-questions/zonal-statistics-percentiles/m-p/449980#M6394</guid>
      <dc:creator>XanderBakker</dc:creator>
      <dc:date>2014-07-29T22:11:28Z</dc:date>
    </item>
    <item>
      <title>Re: Zonal statistics - percentiles</title>
      <link>https://community.esri.com/t5/arcgis-spatial-analyst-questions/zonal-statistics-percentiles/m-p/449981#M6395</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;OK, so far for posting code without testing it ...&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I created a small test dataset, consisting of a DEM (integer raster) and some random polygons. During the test a number of errors in the code were revealed. These are corrected in the code below:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="python" __jive_macro_name="code" class="jive_macro_code jive_text_macro _jivemacro_uid_14067265292731479" jivemacro_uid="_14067265292731479"&gt;
&lt;P&gt;def GetPixelValueForPercentile(dctper, percentile):&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; """will return last pixel value&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where percentile LE searched percentile."""&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for k in sorted(dctper.keys()):&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; perc = dctper&lt;K&gt;&lt;/K&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if perc &amp;lt;= percentile:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pix_val = k&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return pix_val&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;def FieldExist(featureclass, fieldname):&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; """Check if field exists"""&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; import arcpy&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fieldList = arcpy.ListFields(featureclass, fieldname)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return len(fieldList) == 1&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;import arcpy&lt;/P&gt;
&lt;P&gt;# settings&lt;/P&gt;
&lt;P&gt;ras = r"D:\Xander\tmp\ras.gdb\DEMsmpro"&lt;/P&gt;
&lt;P&gt;fc = r"D:\Xander\tmp\ras.gdb\pols"&lt;/P&gt;
&lt;P&gt;# ras = r"C:\Path\To\Folder\Or\Geodatabase\With\Raster"&lt;/P&gt;
&lt;P&gt;# fc = r"C:\Path\To\Folder\Or\Geodatabase\With\PolygonFeatureclass"&lt;/P&gt;
&lt;P&gt;lst_perc = [2, 5, 10, 90, 95, 98] # list of percentiles to be calculated&lt;/P&gt;
&lt;P&gt;fld_prefix = "Perc_"&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;arcpy.env.workspace = "IN_MEMORY"&lt;/P&gt;
&lt;P&gt;arcpy.env.overwriteOutput = True&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;# add fields if they do not exist in fc&lt;/P&gt;
&lt;P&gt;# be aware, field that exist will be overwritten!&lt;/P&gt;
&lt;P&gt;print "filling field list and adding fields"&lt;/P&gt;
&lt;P&gt;flds = []&lt;/P&gt;
&lt;P&gt;for perc in lst_perc:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fld_perc = "{0}{1}".format(fld_prefix, perc)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; flds.append(fld_perc)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if not FieldExist(fc, fld_perc):&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddField_management(fc, fld_perc, "LONG")&lt;/P&gt;
&lt;P&gt;print "flds={0}".format(flds)&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;# Enable Spatial analyst&lt;/P&gt;
&lt;P&gt;arcpy.CheckOutExtension("Spatial")&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;# loop through polygons&lt;/P&gt;
&lt;P&gt;print "loop through polygons"&lt;/P&gt;
&lt;P&gt;flds.append("SHAPE@")&lt;/P&gt;
&lt;P&gt;i = 0&lt;/P&gt;
&lt;P&gt;with arcpy.da.UpdateCursor(fc, flds) as curs:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for row in curs:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i += 1&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "Processing polygon: {0}".format(i)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; polygon = row[flds.index("SHAPE@")]&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lst_parts = []&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if polygon.partCount == 1:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for part in polygon:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for pnt in part:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x, y = pnt.X, pnt.Y&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lst_parts.append(arcpy.Point(x, y))&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for part in polygon:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lst_crds = []&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for pnt in part:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x, y = pnt.X, pnt.Y&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lst_crds.append(arcpy.Point(x, y))&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lst_parts.append(lst_crds)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print " - lst_parts={0}".format(lst_parts)&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Execute ExtractByPolygon (you can't send the polygon object)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print " - ExtractByPolygon..."&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ras_pol = arcpy.sa.ExtractByPolygon(ras, lst_parts, "INSIDE")&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; outname = "ras{0}".format(i)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ras_pol.save(outname)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print " - saved raster as {0}".format(outname)&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # create dictionary with value vs count&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print " - fill dict with Value x Count"&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; flds_ras = ("VALUE", "COUNT")&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dct = {row[0]:row[1] for row in arcpy.da.SearchCursor(outname, flds_ras)}&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # calculate number of pixels in raster&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print " - determine sum"&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cnt_sum = sum(dct.values())&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print " - sum={0}".format(cnt_sum)&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # loop through dictionary and create new dictionary with val vs percentile&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print " - create percentile dict"&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dct_per = {}&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cnt_i = 0&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for val in sorted(dct.keys()):&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cnt_i += dct[val]&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dct_per[val] = cnt_i / cnt_sum&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # loop through list of percentiles&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print " - iterate perceniles"&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for perc in lst_perc:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # use dct_per to determine percentiles&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; perc_dec = float(perc) / 100&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "&amp;nbsp;&amp;nbsp; - Perc_dec for is {0}".format(perc_dec)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pixval =&amp;nbsp; GetPixelValueForPercentile(dct_per, perc_dec)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "&amp;nbsp;&amp;nbsp; - Perc for {0}% is {1}".format(perc, pixval)&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # write pixel value to percentile field&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "&amp;nbsp;&amp;nbsp; - Store value"&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fld_perc = "{0}{1}".format(fld_prefix, perc)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; row[flds.index(fld_perc)] = pixval&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # update row&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print " - update row"&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; curs.updateRow(row)&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;# return SA license&lt;/P&gt;
&lt;P&gt;arcpy.CheckInExtension("Spatial")&lt;/P&gt;
&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;What you get are a number of fields in your polygon featureclass:&lt;/P&gt;&lt;P&gt;&lt;IMG alt="PercentilePolygonsAtts.png" class="jive-image image-1" src="https://community.esri.com/legacyfs/online/2747_PercentilePolygonsAtts.png" style="width: 620px; height: 176px;" /&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;When you add some labels to display the values, you'll see that they actually correspond to the areas:&lt;/P&gt;&lt;P&gt;&lt;IMG alt="DEMpercentilePolygons.png" class="jive-image image-2" src="https://community.esri.com/legacyfs/online/2748_DEMpercentilePolygons.png" style="width: 620px; height: 466px;" /&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So Todd, I hope this will work for you.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Kind regards, &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Xander&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 30 Jul 2014 13:25:13 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-spatial-analyst-questions/zonal-statistics-percentiles/m-p/449981#M6395</guid>
      <dc:creator>XanderBakker</dc:creator>
      <dc:date>2014-07-30T13:25:13Z</dc:date>
    </item>
    <item>
      <title>Re: Zonal statistics - percentiles</title>
      <link>https://community.esri.com/t5/arcgis-spatial-analyst-questions/zonal-statistics-percentiles/m-p/449982#M6396</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks Xander. I will work with this and attempt to modify for iterating through a list of rasters.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 04 Sep 2014 17:14:06 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-spatial-analyst-questions/zonal-statistics-percentiles/m-p/449982#M6396</guid>
      <dc:creator>toddsams</dc:creator>
      <dc:date>2014-09-04T17:14:06Z</dc:date>
    </item>
    <item>
      <title>Re: Zonal statistics - percentiles</title>
      <link>https://community.esri.com/t5/arcgis-spatial-analyst-questions/zonal-statistics-percentiles/m-p/449983#M6397</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Xander,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I was not previously able to successfully execute this code, but am now making a second attempt...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have replaced lines 21 and 22 with my raster and polygons and am receiving "RuntimeError: cannot open 'ras1'" while creating the dictionary at line 79.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Do you have any thoughts on why I am encountering this error?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 14 Jan 2015 22:40:45 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-spatial-analyst-questions/zonal-statistics-percentiles/m-p/449983#M6397</guid>
      <dc:creator>toddsams</dc:creator>
      <dc:date>2015-01-14T22:40:45Z</dc:date>
    </item>
    <item>
      <title>Re: Zonal statistics - percentiles</title>
      <link>https://community.esri.com/t5/arcgis-spatial-analyst-questions/zonal-statistics-percentiles/m-p/449984#M6398</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Can you post a part of your data? It will be difficult to trace the error without it. Is the DEM an integer or is it floating? If it is floating then it will not have an attribute table and the code will fail.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The other things is, today I tried an da updatecursor on an integer raster and it didn't work, while the old update cursor did work. Not sure if that should be changed.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 15 Jan 2015 00:35:22 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-spatial-analyst-questions/zonal-statistics-percentiles/m-p/449984#M6398</guid>
      <dc:creator>XanderBakker</dc:creator>
      <dc:date>2015-01-15T00:35:22Z</dc:date>
    </item>
    <item>
      <title>Re: Zonal statistics - percentiles</title>
      <link>https://community.esri.com/t5/arcgis-spatial-analyst-questions/zonal-statistics-percentiles/m-p/449985#M6399</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;The raster was floating. I switched to integer and was able to make it further, but was hung up with:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;UnboundLocalError: local variable 'pix_val' referenced before assignment&lt;/P&gt;&lt;P&gt;File "D:\Scripts\Python\Raster_Percentiles.py", line 100, in &amp;lt;module&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; pixval =&amp;nbsp; GetPixelValueForPercentile(dct_per, perc_dec)&lt;/P&gt;&lt;P&gt;File "D:\Scripts\Python\Raster_Percentiles.py", line 10, in GetPixelValueForPercentile&lt;/P&gt;&lt;P&gt;&amp;nbsp; return pix_val&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 15 Jan 2015 18:23:45 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-spatial-analyst-questions/zonal-statistics-percentiles/m-p/449985#M6399</guid>
      <dc:creator>toddsams</dc:creator>
      <dc:date>2015-01-15T18:23:45Z</dc:date>
    </item>
    <item>
      <title>Re: Zonal statistics - percentiles</title>
      <link>https://community.esri.com/t5/arcgis-spatial-analyst-questions/zonal-statistics-percentiles/m-p/449986#M6400</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;This would happen when the percentile you're looking for is higher than the first percentile stored in the dictionary. I guess this could be solved by replacing the def &lt;EM&gt;GetPixelValueForPercentile(dctper, percentile)&lt;/EM&gt; for a slightly changed versión (not tested):&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;def GetPixelValueForPercentile(dctper, percentile):
&amp;nbsp;&amp;nbsp;&amp;nbsp; """will return last pixel value
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where percentile LE searched percentile."""
&amp;nbsp;&amp;nbsp;&amp;nbsp; pix_val = sorted(dctper.keys())[0] # initially assign lowest pixel value
&amp;nbsp;&amp;nbsp;&amp;nbsp; for k in sorted(dctper.keys()):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; perc = dctper&lt;K&gt;&lt;/K&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if perc &amp;lt;= percentile:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pix_val = k
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break
&amp;nbsp;&amp;nbsp;&amp;nbsp; return pix_val&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 20:05:24 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-spatial-analyst-questions/zonal-statistics-percentiles/m-p/449986#M6400</guid>
      <dc:creator>XanderBakker</dc:creator>
      <dc:date>2021-12-11T20:05:24Z</dc:date>
    </item>
    <item>
      <title>Re: Zonal statistics - percentiles</title>
      <link>https://community.esri.com/t5/arcgis-spatial-analyst-questions/zonal-statistics-percentiles/m-p/449987#M6401</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;That works! Many thanks for your help with this.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 15 Jan 2015 19:05:44 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-spatial-analyst-questions/zonal-statistics-percentiles/m-p/449987#M6401</guid>
      <dc:creator>toddsams</dc:creator>
      <dc:date>2015-01-15T19:05:44Z</dc:date>
    </item>
    <item>
      <title>Re: Zonal statistics - percentiles</title>
      <link>https://community.esri.com/t5/arcgis-spatial-analyst-questions/zonal-statistics-percentiles/m-p/449988#M6402</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;You're welcome. Glad it worked!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 15 Jan 2015 19:16:01 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-spatial-analyst-questions/zonal-statistics-percentiles/m-p/449988#M6402</guid>
      <dc:creator>XanderBakker</dc:creator>
      <dc:date>2015-01-15T19:16:01Z</dc:date>
    </item>
    <item>
      <title>Re: Zonal statistics - percentiles</title>
      <link>https://community.esri.com/t5/arcgis-spatial-analyst-questions/zonal-statistics-percentiles/m-p/449989#M6403</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;SPAN style="line-height: 1.5;"&gt;I ultimately need to iterate through a list of rasters (or a composite raster) to produce multiple sets of percentile results.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;My first attempt was to create a list of the rasters and use this in a for loop around lines 21 through 110. However, there were two problems with this:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1) each iteration overwrites (rather than appends to) the previous set of percentile results&lt;/P&gt;&lt;P&gt;2) to keep track of the results, a new field is needed in the output that contains the name of the raster for which the percentiles were derived from&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Are you able to provide a solution for this?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I was thinking that output to a non-spatial table with a PolygonID may be an alternate method.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 15 Jan 2015 19:58:53 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-spatial-analyst-questions/zonal-statistics-percentiles/m-p/449989#M6403</guid>
      <dc:creator>toddsams</dc:creator>
      <dc:date>2015-01-15T19:58:53Z</dc:date>
    </item>
    <item>
      <title>Re: Zonal statistics - percentiles</title>
      <link>https://community.esri.com/t5/arcgis-spatial-analyst-questions/zonal-statistics-percentiles/m-p/449990#M6404</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I suppose one could create a related table using the raster value as key so that there can be n raster related to each polygon. It really depends on how you want to use the results.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 15 Jan 2015 21:02:59 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-spatial-analyst-questions/zonal-statistics-percentiles/m-p/449990#M6404</guid>
      <dc:creator>XanderBakker</dc:creator>
      <dc:date>2015-01-15T21:02:59Z</dc:date>
    </item>
    <item>
      <title>Re: Zonal statistics - percentiles</title>
      <link>https://community.esri.com/t5/arcgis-spatial-analyst-questions/zonal-statistics-percentiles/m-p/449991#M6405</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Whether the results are in an attribute table associated with a polygon or a non-spatial table doesn't really matter. I would export either table to a spreadsheet to summarize.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 15 Jan 2015 22:02:20 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-spatial-analyst-questions/zonal-statistics-percentiles/m-p/449991#M6405</guid>
      <dc:creator>toddsams</dc:creator>
      <dc:date>2015-01-15T22:02:20Z</dc:date>
    </item>
  </channel>
</rss>

