Lookup¶
Generate new columns by mapping existing data to common lookup tables.
CPI deflation¶
The agate-lookup extension adds a lookup method to agate’s Table class.
Starting with a table that looks like this:
| year | cost | 
|---|---|
| 1995 | 2.0 | 
| 1997 | 2.2 | 
| 1996 | 2.3 | 
| 2003 | 4.0 | 
| 2007 | 5.0 | 
| 2005 | 6.0 | 
We can map the year column to its annual CPI index in one lookup call.
import agatelookup
join_year_cpi = table.lookup('year', 'cpi')
The return table will have now have a new column:
| year | cost | cpi | 
|---|---|---|
| 1995 | 2.0 | 152.383 | 
| 1997 | 2.2 | 160.525 | 
| 1996 | 2.3 | 156.858 | 
| 2003 | 4.0 | 184.000 | 
| 2007 | 5.0 | 207.344 | 
| 2005 | 6.0 | 195.267 | 
A simple computation tacked on to this lookup can then get the 2015 equivalent values of each cost:
cpi_2015 = Decimal(216.909)
def cpi_adjust_2015(row):
    return (row['cost'] * (cpi_2015 / row['cpi'])).quantize(Decimal('0.01'))
cost_2015 = join_year_cpi.compute([
    ('cost_2015', agate.Formula(agate.Number(), cpi_adjust_2015))
])
And the final table will look like this:
| year | cost | cpi | cost_2015 | 
|---|---|---|---|
| 1995 | 2.0 | 152.383 | 2.85 | 
| 1997 | 2.2 | 160.525 | 2.97 | 
| 1996 | 2.3 | 156.858 | 3.18 | 
| 2003 | 4.0 | 184.000 | 4.72 | 
| 2007 | 5.0 | 207.344 | 5.23 | 
| 2005 | 6.0 | 195.267 | 6.66 |