There are many ways to rank a sequence of values. agate strives to find a balance between simple, intuitive ranking and flexibility when you need it.
The basic rank supported by agate is standard “competition ranking”. In this model the values
[3, 4, 4, 5] would be ranked
[1, 2, 2, 4]. You can apply competition ranking using the
new_table = table.compute([ ('rank', agate.Rank('value')) ])
Descending competition ranking is specified using the
new_table = table.compute([ ('rank', agate.Rank('value', reverse=True)) ])
new_table = table.compute([ ('rank2014', agate.Rank('value2014')), ('rank2015', agate.Rank('value2015')) ]) new_table2 = new_table.compute([ ('rank_change', agate.Change('rank2014', 'rank2015')) ])
“Percentile rank” is a bit of a misnomer. Really, this is the percentile in which each value in a column is located. This column can be computed for your data using the
new_table = table.compute([ ('percentile_rank', agate.PercentileRank('value')) ])
Note that there is no entirely standard method for computing percentiles. The percentiles computed in this manner may not agree precisely with those generated by other software. See the
Percentiles class documentation for implementation details.