(This article was first published on

**Yet Another Blog in Statistical Computing » S+/R**, and kindly contributed to R-bloggers)In the operational loss calculation, it is important to use CPI (Consumer Price Index) adjusting historical losses. Below is an example showing how to download CPI data online directly from Federal Reserve Bank of St. Louis and then to calculate monthly and quarterly CPI adjustment factors with Python.

In [1]: import pandas_datareader.data as web In [2]: import pandas as pd In [3]: import numpy as np In [4]: import datetime as dt In [5]: # SET START AND END DATES OF THE SERIES In [6]: sdt = dt.datetime(2000, 1, 1) In [7]: edt = dt.datetime(2015, 9, 1) In [8]: cpi = web.DataReader("CPIAUCNS", "fred", sdt, edt) In [9]: cpi.head() Out[9]: CPIAUCNS DATE 2000-01-01 168.8 2000-02-01 169.8 2000-03-01 171.2 2000-04-01 171.3 2000-05-01 171.5 In [10]: df1 = pd.DataFrame({'month': [dt.datetime.strftime(i, "%Y-%m") for i in cpi.index]}) In [11]: df1['qtr'] = [str(x.year) + "-Q" + str(x.quarter) for x in cpi.index] In [12]: df1['m_cpi'] = cpi.values In [13]: df1.index = cpi.index In [14]: grp = df1.groupby('qtr', as_index = False) In [15]: df2 = grp['m_cpi'].agg({'q_cpi': np.mean}) In [16]: df3 = pd.merge(df1, df2, how = 'inner', left_on = 'qtr', right_on = 'qtr') In [17]: maxm_cpi = np.array(df3.m_cpi)[-1] In [18]: maxq_cpi = np.array(df3.q_cpi)[-1] In [19]: df3['m_factor'] = maxm_cpi / df3.m_cpi In [20]: df3['q_factor'] = maxq_cpi / df3.q_cpi In [21]: df3.index = cpi.index In [22]: final = df3.sort_index(ascending = False) In [23]: final.head(12) Out[23]: month qtr m_cpi q_cpi m_factor q_factor DATE 2015-09-01 2015-09 2015-Q3 237.945 238.305000 1.000000 1.000000 2015-08-01 2015-08 2015-Q3 238.316 238.305000 0.998443 1.000000 2015-07-01 2015-07 2015-Q3 238.654 238.305000 0.997029 1.000000 2015-06-01 2015-06 2015-Q2 238.638 237.680667 0.997096 1.002627 2015-05-01 2015-05 2015-Q2 237.805 237.680667 1.000589 1.002627 2015-04-01 2015-04 2015-Q2 236.599 237.680667 1.005689 1.002627 2015-03-01 2015-03 2015-Q1 236.119 234.849333 1.007733 1.014714 2015-02-01 2015-02 2015-Q1 234.722 234.849333 1.013731 1.014714 2015-01-01 2015-01 2015-Q1 233.707 234.849333 1.018134 1.014714 2014-12-01 2014-12 2014-Q4 234.812 236.132000 1.013343 1.009202 2014-11-01 2014-11 2014-Q4 236.151 236.132000 1.007597 1.009202 2014-10-01 2014-10 2014-Q4 237.433 236.132000 1.002156 1.009202

To

**leave a comment**for the author, please follow the link and comment on their blog:**Yet Another Blog in Statistical Computing » S+/R**.R-bloggers.com offers

**daily e-mail updates**about R news and tutorials on topics such as: Data science, Big Data, R jobs, visualization (ggplot2, Boxplots, maps, animation), programming (RStudio, Sweave, LaTeX, SQL, Eclipse, git, hadoop, Web Scraping) statistics (regression, PCA, time series, trading) and more...