Russian consumer price inflation and cost of living trend 2022 to 2026
Russian consumer price inflation & cost of living, 2022–2026
Data note: Detailed monthly Russian CPI micro-data in the OECD price database stops in March 2022 (collection halted after the invasion of Ukraine)12. Eurostat does not publish Russian HICP — its ENP-East CPI table lists a RU code but contains no Russian observations (only Armenia, Azerbaijan, Belarus, Georgia, Moldova, Ukraine)34. The continuous 2022–2026 picture therefore comes from the OECD Economic Outlook (No. 119) database, which carries a Russian CPI index5.
Headline inflation (annual average, % change)
| Year | YoY inflation | Status |
|---|---|---|
| 2022 | +13.8 % | actual |
| 2023 | +5.9 % | actual |
| 2024 | +8.5 % | actual |
| 2025 | +8.7 % | estimate |
| 2026 | +6.5 % | projection |
| 2027 | +4.6 % | projection |
Source: OECD Economic Outlook 119 CPI index, converted to growth rates678. The vintage check confirms the framing: EO 117 (May-2025) carried 2025–2026 as projections, while the latest EO 119 has extended the horizon to 2027, making 2025 a near-final estimate and 2026–2027 projections910.
Cost-of-living index (2021 = 100)
| 2021 | 2022 | 2023 | 2024 | 2025 | 2026* | 2027* |
|---|---|---|---|---|---|---|
| 100.0 | 113.8 | 120.5 | 130.6 | 142.0 | 151.2 | 158.2 |
This implies the general price level rose by about +51 % between 2021 and 2026 (and ~+58 % by 2027)7.
The trend in words
- 2022 – the shock year. Inflation had already been climbing through 2021 (monthly YoY went from ~3.6 % in Aug-2020 to 8.7 % in Jan-2022). After the February 2022 invasion and sanctions, the monthly rate jumped to 16.7 % YoY in March 2022, the last month in the detailed series611.
- 2023 – disinflation. Inflation fell back to ~5.9 %, the low point of the period.
- 2024–2025 – renewed pressure. Inflation re-accelerated to ~8.5 % in 2024 and ~8.7 % in 2025, keeping the cost of living on a steep upward path.
- 2026–2027 – gradual easing (projected). The OECD expects inflation to moderate to ~6.5 % in 2026 and ~4.6 % in 2027, but this is a projection and even then prices would remain well above their 2021 level987.
A two-panel chart (monthly + annual inflation, and the cost-of-living index, with the projection window shaded) was generated in 7.
Caveat: the 2026 figure the user asked about is a forecast, not an observed outcome; actual 2026 data are not yet available in these databases, and Russian data coverage in OECD/Eurostat products has been limited since 2022.
- Code Run 1Dataset: DSD_PRICES@DF_PRICES_ALL
Dataset filters for
DSD_PRICES@DF_PRICES_ALLFilter Value(s) REF_AREA RUS MEASURE CPI EXPENDITURE _T Program output
(1522, 10) ['REF_AREA', 'FREQ', 'METHODOLOGY', 'MEASURE', 'UNIT_MEASURE', 'EXPENDITURE', 'ADJUSTMENT', 'TRANSFORMATION', 'TIME_PERIOD', 'value'] REF_AREA FREQ METHODOLOGY MEASURE UNIT_MEASURE EXPENDITURE ADJUSTMENT TRANSFORMATION TIME_PERIOD value 0 RUS M N CPI PA _T N GY 1993-01 850.4569 1 RUS M N CPI PA _T N GY 1993-02 758.8549 2 RUS M N CPI PA _T N GY 1993-03 694.0606 3 RUS M N CPI PA _T N GY 1993-04 674.4864 4 RUS M N CPI PA _T N GY 1993-05 717.3981 5 RUS M N CPI PA _T N GY 1993-06 722.8885 6 RUS M N CPI PA _T N GY 1993-07 810.6832 7 RUS M N CPI PA _T N GY 1993-08 956.5938 8 RUS M N CPI PA _T N GY 1993-09 1065.5700 9 RUS M N CPI PA _T N GY 1993-10 1033.3250 10 RUS M N CPI PA _T N GY 1993-11 946.1458 11 RUS M N CPI PA _T N GY 1993-12 840.0271 12 RUS M N CPI PA _T N GY 1994-01 780.9952 13 RUS M N CPI PA _T N GY 1994-02 682.9341 14 RUS M N CPI PA _T N GY 1994-03 600.2078 15 RUS M N CPI PA _T N GY 1994-04 539.9793 16 RUS M N CPI PA _T N GY 1994-05 479.3412 17 RUS M N CPI PA _T N GY 1994-06 412.1782 18 RUS M N CPI PA _T N GY 1994-07 340.7494 19 RUS M N CPI PA _T N GY 1994-08 265.9619 ---- unique values per column ---- REF_AREA 1 <ArrowStringArray> ['RUS'] Length: 1, dtype: str FREQ 3 <ArrowStringArray> ['M', 'Q', 'A'] Length: 3, dtype: str METHODOLOGY 1 <ArrowStringArray> ['N'] Length: 1, dtype: str MEASURE 1 <ArrowStringArray> ['CPI'] Length: 1, dtype: str UNIT_MEASURE 3 <ArrowStringArray> ['PA', 'PC', 'IX'] Length: 3, dtype: str EXPENDITURE 1 <ArrowStringArray> ['_T'] Length: 1, dtype: str ADJUSTMENT 1 <ArrowStringArray> ['N'] Length: 1, dtype: str TRANSFORMATION 3 <ArrowStringArray> ['GY', 'G1', '_Z'] Length: 3, dtype: str TIME_PERIOD 514 <ArrowStringArray> ['1993-01', '1993-02', '1993-03', '1993-04', '1993-05', '1993-06', '1993-07', '1993-08', '1993-09', '1993-10', '1993-11', '1993-12', '1994-01', '1994-02', '1994-03', '1994-04', '1994-05', '1994-06', '1994-07', '1994-08'] Length: 20, dtype: str value 1346 [ 850.4569 758.8549 694.0606 674.4864 717.3981 722.8885 810.6832 956.5938 1065.57 1033.325 946.1458 840.0271 780.9952 682.9341 600.2078 539.9793 479.3412 412.1782 340.7494 265.9619]Code
import pandas as pd df = pd.read_csv(DATASET_FILE) print(df.shape) print(df.columns.tolist()) print(df.head(20).to_string()) print("---- unique values per column ----") for c in df.columns: u = df[c].unique() print(c, len(u), u[:20]) - Code Run 2Dataset: DSD_PRICES@DF_PRICES_ALL
Dataset filters for
DSD_PRICES@DF_PRICES_ALLFilter Value(s) REF_AREA RUS MEASURE CPI EXPENDITURE _T Program output
combos of FREQ, UNIT_MEASURE, TRANSFORMATION, ADJUSTMENT: FREQ UNIT_MEASURE TRANSFORMATION ADJUSTMENT A IX _Z N 30 PA GY N 29 PC G1 N 29 M IX _Z N 363 PA GY N 351 PC G1 N 362 Q IX _Z N 121 PA GY N 117 PC G1 N 120 dtype: int64 A IX _Z N -> 1992 to 2021 n= 30 A PA GY N -> 1993 to 2021 n= 29 A PC G1 N -> 1993 to 2021 n= 29 M IX _Z N -> 1992-01 to 2022-03 n= 363 M PA GY N -> 1993-01 to 2022-03 n= 351 M PC G1 N -> 1992-02 to 2022-03 n= 362 Q IX _Z N -> 1992-Q1 to 2022-Q1 n= 121 Q PA GY N -> 1993-Q1 to 2022-Q1 n= 117 Q PC G1 N -> 1992-Q2 to 2022-Q1 n= 120 REF_AREA FREQ METHODOLOGY MEASURE UNIT_MEASURE EXPENDITURE ADJUSTMENT TRANSFORMATION TIME_PERIOD value 1046 RUS M N CPI IX _T N _Z 2019-10 119.4803 1047 RUS M N CPI IX _T N _Z 2019-11 119.8148 1048 RUS M N CPI IX _T N _Z 2019-12 120.2462 1049 RUS M N CPI IX _T N _Z 2020-01 120.7271 1050 RUS M N CPI IX _T N _Z 2020-02 121.1255 1051 RUS M N CPI IX _T N _Z 2020-03 121.7917 1052 RUS M N CPI IX _T N _Z 2020-04 122.8026 1053 RUS M N CPI IX _T N _Z 2020-05 123.1342 1054 RUS M N CPI IX _T N _Z 2020-06 123.4051 1055 RUS M N CPI IX _T N _Z 2020-07 123.8370 1056 RUS M N CPI IX _T N _Z 2020-08 123.7875 1057 RUS M N CPI IX _T N _Z 2020-09 123.7008 1058 RUS M N CPI IX _T N _Z 2020-10 124.2327 1059 RUS M N CPI IX _T N _Z 2020-11 125.1148 1060 RUS M N CPI IX _T N _Z 2020-12 126.1532 1061 RUS M N CPI IX _T N _Z 2021-01 126.9984 1062 RUS M N CPI IX _T N _Z 2021-02 127.9890 1063 RUS M N CPI IX _T N _Z 2021-03 128.8338 1064 RUS M N CPI IX _T N _Z 2021-04 129.5810 1065 RUS M N CPI IX _T N _Z 2021-05 130.5399 1066 RUS M N CPI IX _T N _Z 2021-06 131.4406 1067 RUS M N CPI IX _T N _Z 2021-07 131.8481 1068 RUS M N CPI IX _T N _Z 2021-08 132.0722 1069 RUS M N CPI IX _T N _Z 2021-09 132.8647 1070 RUS M N CPI IX _T N _Z 2021-10 134.3395 1071 RUS M N CPI IX _T N _Z 2021-11 135.6291 1072 RUS M N CPI IX _T N _Z 2021-12 136.7413 1073 RUS M N CPI IX _T N _Z 2022-01 138.0950 1074 RUS M N CPI IX _T N _Z 2022-02 139.7107 1075 RUS M N CPI IX _T N _Z 2022-03 150.3470Code
import pandas as pd df = pd.read_csv(DATASET_FILE) print("combos of FREQ, UNIT_MEASURE, TRANSFORMATION, ADJUSTMENT:") print(df.groupby(['FREQ','UNIT_MEASURE','TRANSFORMATION','ADJUSTMENT']).size()) print() # last time period per combo for (f,u,t,a), g in df.groupby(['FREQ','UNIT_MEASURE','TRANSFORMATION','ADJUSTMENT']): print(f, u, t, a, "->", g['TIME_PERIOD'].min(), "to", g['TIME_PERIOD'].max(), "n=",len(g)) print() print(df[df['FREQ']=='M'].tail(30).to_string()) - Code Run 3Dataset: DSD_EO@DF_EO
Dataset filters for
DSD_EO@DF_EOFilter Value(s) REF_AREA RUS MEASURE CPI Program output
(33, 5) REF_AREA MEASURE FREQ TIME_PERIOD value 0 RUS CPI A 1995 0.031732 1 RUS CPI A 1996 0.046908 2 RUS CPI A 1997 0.053932 3 RUS CPI A 1998 0.068857 4 RUS CPI A 1999 0.127681 5 RUS CPI A 2000 0.154396 6 RUS CPI A 2001 0.187508 7 RUS CPI A 2002 0.216982 8 RUS CPI A 2003 0.246833 9 RUS CPI A 2004 0.273674 10 RUS CPI A 2005 0.308290 11 RUS CPI A 2006 0.338141 12 RUS CPI A 2007 0.368619 13 RUS CPI A 2008 0.420544 14 RUS CPI A 2009 0.469585 15 RUS CPI A 2010 0.501819 16 RUS CPI A 2011 0.544212 17 RUS CPI A 2012 0.571679 18 RUS CPI A 2013 0.610310 19 RUS CPI A 2014 0.658096 20 RUS CPI A 2015 0.760191 21 RUS CPI A 2016 0.813997 22 RUS CPI A 2017 0.843723 23 RUS CPI A 2018 0.867929 24 RUS CPI A 2019 0.906685 25 RUS CPI A 2020 0.937288 26 RUS CPI A 2021 1.000000 27 RUS CPI A 2022 1.137589 28 RUS CPI A 2023 1.204565 29 RUS CPI A 2024 1.306409 30 RUS CPI A 2025 1.419917 31 RUS CPI A 2026 1.511783 32 RUS CPI A 2027 1.581504Code
import pandas as pd df = pd.read_csv(DATASET_FILE) print(df.shape) df = df.sort_values('TIME_PERIOD') print(df.to_string()) print() # Also check what PRI / deflator looks like - Code Run 4Dataset: DSD_PRICES@DF_PRICES_ALL Dataset: DSD_EO@DF_EO
Images
russia_inflation.svgDataset filters for
DSD_PRICES@DF_PRICES_ALLFilter Value(s) REF_AREA RUS MEASURE CPI TRANSFORMATION GY UNIT_MEASURE PA FREQ M EXPENDITURE _T, CP01, CP04, CP07 sinceTimePeriod 2019 Dataset filters for
DSD_EO@DF_EOFilter Value(s) REF_AREA RUS MEASURE CPI Program output
monthly rows: (153, 10) freqs: <ArrowStringArray> ['M'] Length: 1, dtype: str exp: <ArrowStringArray> ['CP07', 'CP04', 'CP01', '_T'] Length: 4, dtype: str Monthly YoY CPI inflation (%), Russia (last 20 months available): CP01 CP04 CP07 _T TIME_PERIOD 2020-08-01 4.80 3.15 2.77 3.57 2020-09-01 4.85 3.29 3.10 3.67 2020-10-01 5.39 3.43 3.53 3.98 2020-11-01 6.55 3.59 4.05 4.42 2020-12-01 7.68 3.74 4.52 4.91 2021-01-01 8.03 3.63 5.07 5.19 2021-02-01 8.86 3.81 5.77 5.67 2021-03-01 8.63 3.98 6.86 5.78 2021-04-01 7.38 4.25 7.40 5.52 2021-05-01 8.35 4.84 7.51 6.01 2021-06-01 8.96 5.64 8.06 6.51 2021-07-01 8.37 6.55 8.59 6.47 2021-08-01 8.72 6.52 9.26 6.69 2021-09-01 10.60 6.36 9.60 7.41 2021-10-01 12.61 6.37 10.17 8.14 2021-11-01 12.43 6.42 10.75 8.40 2021-12-01 12.15 6.32 11.35 8.39 2022-01-01 12.68 6.34 11.69 8.74 2022-02-01 13.02 6.97 11.33 9.16 2022-03-01 NaN NaN NaN 16.70 Annual CPI index (2021=1) and YoY inflation, Russia: TIME_PERIOD value inflation 2015 0.760 15.514 2016 0.814 7.078 2017 0.844 3.652 2018 0.868 2.869 2019 0.907 4.465 2020 0.937 3.375 2021 1.000 6.691 2022 1.138 13.759 2023 1.205 5.888 2024 1.306 8.455 2025 1.420 8.689 2026 1.512 6.470 2027 1.582 4.612 saved chartCode
import pandas as pd, numpy as np import matplotlib matplotlib.use("Agg") import matplotlib.pyplot as plt # ---- Monthly YoY inflation (dataset 10, COICOP1999) ---- m = pd.read_csv(DATASET_FILE0) print("monthly rows:", m.shape, "freqs:", m['FREQ'].unique(), "exp:", m['EXPENDITURE'].unique()) m['TIME_PERIOD'] = pd.to_datetime(m['TIME_PERIOD'], format='%Y-%m') piv = m.pivot_table(index='TIME_PERIOD', columns='EXPENDITURE', values='value') piv.columns = [{'\_T':'_T'}.get(c,c) for c in piv.columns] print("\nMonthly YoY CPI inflation (%), Russia (last 20 months available):") print(piv.tail(20).round(2).to_string()) # ---- Annual CPI index (dataset 31, Economic Outlook) ---- a = pd.read_csv(DATASET_FILE1).sort_values('TIME_PERIOD') a['TIME_PERIOD'] = a['TIME_PERIOD'].astype(int) a['inflation'] = a['value'].pct_change()*100 print("\nAnnual CPI index (2021=1) and YoY inflation, Russia:") print(a[a['TIME_PERIOD']>=2015][['TIME_PERIOD','value','inflation']].round(3).to_string(index=False)) # ---- chart ---- fig, ax1 = plt.subplots(figsize=(9,5)) ax1.plot(a['TIME_PERIOD'], a['value'], color='tab:red', marker='o', lw=2, label='CPI index (2021=100)') ax1.set_xlabel('Year'); ax1.set_ylabel('CPI index (2021=100)', color='tab:red') ax1.tick_params(axis='y', labelcolor='tab:red') ax1.set_xlim(2019, 2027) ax2 = ax1.twinx() ax2.bar(a['TIME_PERIOD'], a['inflation'], color='tab:blue', alpha=0.4, width=0.5, label='YoY inflation (%)') ax2.set_ylabel('YoY inflation (%)', color='tab:blue') ax2.tick_params(axis='y', labelcolor='tab:blue') ax2.axvline(2025.5, color='grey', ls='--', lw=1) ax2.text(2025.6, ax2.get_ylim()[1]*0.9, 'projection ->', color='grey', fontsize=9) plt.title('Russia: consumer price inflation & cost-of-living index (2019-2027)') fig.tight_layout() fig.savefig('russia_inflation.svg') print("\nsaved chart") - Code Run 5Dataset: enpe_cpi
Dataset filters for
enpe_cpiFilter Value(s) geo RU Program output
(0, 5) ['freq', 'unit', 'geo', 'time', 'value'] Empty DataFrame Columns: [freq, unit, geo, time, value] Index: [] freq [] unit [] geo [] time []Code
import pandas as pd df = pd.read_csv(DATASET_FILE) print(df.shape) print(df.columns.tolist()) print(df.head(30).to_string()) print() for c in df.columns: if c not in ('TIME_PERIOD','value'): print(c, df[c].unique()[:30]) - Code Run 6Dataset: enpe_cpi
Program output
(221, 5) ['freq', 'unit', 'geo', 'time', 'value'] geo GE 40 MD 40 AM 40 AZ 40 BY 32 UA 29 unit RCH_A_AVG 116 INX_A_AVG 105 freq unit geo time value 0 A INX_A_AVG GE 2009 81.4 1 A INX_A_AVG GE 2019 116.5 2 A INX_A_AVG MD 2013 86.8 3 A INX_A_AVG AM 2010 80.1 4 A INX_A_AVG AZ 2014 96.1 5 A INX_A_AVG UA 2021 175.3 6 A RCH_A_AVG AM 2016 -1.4 7 A RCH_A_AVG AZ 2006 8.3 8 A RCH_A_AVG AZ 2018 2.3 9 A RCH_A_AVG BY 2007 8.4 10 A RCH_A_AVG GE 2020 5.2 11 A INX_A_AVG BY 2005 15.9 12 A INX_A_AVG GE 2024 155.7 13 A RCH_A_AVG AZ 2013 2.4 14 A INX_A_AVG UA 2015 100.0 15 A INX_A_AVG AZ 2011 91.6 16 A INX_A_AVG AM 2019 103.5 17 A INX_A_AVG BY 2016 111.8 18 A INX_A_AVG MD 2012 83.0 19 A INX_A_AVG MD 2024 204.1 20 A INX_A_AVG AM 2011 86.3 21 A INX_A_AVG AM 2015 100.0 22 A RCH_A_AVG AM 2008 9.0 23 A RCH_A_AVG AM 2020 1.2 24 A RCH_A_AVG AM 2009 3.4 25 A RCH_A_AVG AM 2023 2.0 26 A RCH_A_AVG GE 2015 4.0 27 A RCH_A_AVG BY 2017 6.0 28 A RCH_A_AVG MD 2011 7.6 29 A INX_A_AVG AZ 2015 100.0 30 A RCH_A_AVG MD 2022 28.7 31 A RCH_A_AVG MD 2019 4.8 32 A RCH_A_AVG BY 2011 53.2 33 A RCH_A_AVG MD 2023 13.4 34 A RCH_A_AVG UA 2006 9.1 35 A INX_A_AVG AZ 2012 92.6 36 A RCH_A_AVG MD 2005 11.9 37 A RCH_A_AVG UA 2017 14.4 38 A RCH_A_AVG UA 2009 15.9 39 A RCH_A_AVG BY 2008 14.8Code
import pandas as pd df = pd.read_csv(DATASET_FILE) print(df.shape) print(df.columns.tolist()) print(df['geo'].value_counts().to_string()) print(df['unit'].value_counts().to_string()) print(df.head(40).to_string()) - Code Run 7Dataset: DSD_EO_114@DF_EO_114
Dataset filters for
DSD_EO_114@DF_EO_114Filter Value(s) REF_AREA RUS MEASURE CPI FREQ A Program output
EO114 (dataset 32) Russia CPI index & YoY inflation: TIME_PERIOD value infl 2019 0.907 4.470 2020 0.937 3.382 2021 1.000 6.694 2022 1.137 13.736 2023 1.203 5.804 2024 1.290 7.161 2025 1.358 5.272 last year: 2025Code
import pandas as pd df = pd.read_csv(DATASET_FILE).sort_values('TIME_PERIOD') df['TIME_PERIOD']=df['TIME_PERIOD'].astype(int) df['infl']=df['value'].pct_change()*100 print("EO114 (dataset 32) Russia CPI index & YoY inflation:") print(df[df['TIME_PERIOD']>=2019][['TIME_PERIOD','value','infl']].round(3).to_string(index=False)) print("last year:", df['TIME_PERIOD'].max()) - OECD dataset: Economic Outlook 119
- Code Run 8Dataset: DSD_EO_117@DF_EO_117
Dataset filters for
DSD_EO_117@DF_EO_117Filter Value(s) REF_AREA RUS MEASURE CPI FREQ A Program output
EO117 (dataset 35) Russia CPI index & YoY inflation: TIME_PERIOD value infl 2019 0.907 4.465 2020 0.937 3.375 2021 1.000 6.691 2022 1.138 13.759 2023 1.205 5.888 2024 1.306 8.455 2025 1.433 9.727 2026 1.521 6.090 last year: 2026Code
import pandas as pd df = pd.read_csv(DATASET_FILE).sort_values('TIME_PERIOD') df['TIME_PERIOD']=df['TIME_PERIOD'].astype(int) df['infl']=df['value'].pct_change()*100 print("EO117 (dataset 35) Russia CPI index & YoY inflation:") print(df[df['TIME_PERIOD']>=2019][['TIME_PERIOD','value','infl']].round(3).to_string(index=False)) print("last year:", df['TIME_PERIOD'].max()) - Code Run 9Dataset: DSD_PRICES@DF_PRICES_ALL Dataset: DSD_EO@DF_EO
Images
russia_inflation.svgDataset filters for
DSD_PRICES@DF_PRICES_ALLFilter Value(s) REF_AREA RUS MEASURE CPI TRANSFORMATION GY UNIT_MEASURE PA FREQ M EXPENDITURE _T sinceTimePeriod 2018 Dataset filters for
DSD_EO@DF_EOFilter Value(s) REF_AREA RUS MEASURE CPI FREQ A Program output
saved TIME_PERIOD value infl 2018 0.868 2.869 2019 0.907 4.465 2020 0.937 3.375 2021 1.000 6.691 2022 1.138 13.759 2023 1.205 5.888 2024 1.306 8.455 2025 1.420 8.689 2026 1.512 6.470 2027 1.582 4.612 Cumulative price level 2026 vs 2021: 51.2 % Cumulative price level 2025 vs 2021: 42.0 %Code
import pandas as pd, numpy as np import matplotlib matplotlib.use("Agg") import matplotlib.pyplot as plt m = pd.read_csv(DATASET_FILE0) m['date'] = pd.to_datetime(m['TIME_PERIOD'], format='%Y-%m') m = m.sort_values('date') a = pd.read_csv(DATASET_FILE1).sort_values('TIME_PERIOD') a['TIME_PERIOD'] = a['TIME_PERIOD'].astype(int) a['infl'] = a['value'].pct_change()*100 a = a[a['TIME_PERIOD']>=2018] fig, (ax1, ax2) = plt.subplots(2,1, figsize=(9.5,8), sharex=False) # Panel 1: YoY inflation ax1.plot(m['date'], m['value'], color='tab:blue', lw=1.6, label='Monthly YoY CPI inflation (OECD/COICOP, to Mar-2022)') ax1.plot(pd.to_datetime(a['TIME_PERIOD'].astype(str)+'-07-01'), a['infl'], color='tab:red', marker='o', lw=2, label='Annual avg. YoY inflation (OECD Econ. Outlook 119)') ax1.axvspan(pd.Timestamp('2025-07-01'), pd.Timestamp('2027-12-31'), color='grey', alpha=0.12) ax1.text(pd.Timestamp('2025-08-01'), 15, 'projections', color='grey', fontsize=9) ax1.axvline(pd.Timestamp('2022-02-15'), color='k', ls=':', lw=1) ax1.text(pd.Timestamp('2022-03-01'), 15.5, 'Feb 2022', fontsize=8) ax1.set_ylabel('YoY inflation (%)') ax1.set_title('Russia: consumer price inflation (2018–2027)') ax1.legend(fontsize=8, loc='upper left') ax1.grid(alpha=0.3) # Panel 2: cost-of-living index ax2.plot(a['TIME_PERIOD'], a['value']*100, color='tab:red', marker='o', lw=2) ax2.axvspan(2025.5, 2027, color='grey', alpha=0.12) ax2.set_ylabel('CPI index (2021 = 100)') ax2.set_xlabel('Year') ax2.set_title('Russia: cost-of-living index (annual average)') ax2.grid(alpha=0.3) for _,r in a[a['TIME_PERIOD']>=2022].iterrows(): ax2.annotate(f"{r['value']*100:.1f}", (r['TIME_PERIOD'], r['value']*100), textcoords="offset points", xytext=(0,7), ha='center', fontsize=8) fig.tight_layout() fig.savefig('russia_inflation.svg') print("saved") # summary numbers print(a[['TIME_PERIOD','value','infl']].round(3).to_string(index=False)) print("Cumulative price level 2026 vs 2021:", round(a[a.TIME_PERIOD==2026]['value'].iloc[0]*100-100,1), "%") print("Cumulative price level 2025 vs 2021:", round(a[a.TIME_PERIOD==2025]['value'].iloc[0]*100-100,1), "%") - OECD dataset: Consumer price indices (CPIs, HICPs), COICOP 1999