US energy prices and inflation in September 2026 compared to Biden administration 2021-2025
Model: Kimi K2.6 Checked on:
US energy prices and inflation in September 2026 compared to the Biden administration (2021‑2025)
OECD consumer price data for the United States are currently available only through August 2026; September 2026 figures have not yet been published1.
Headline inflation
- The latest year‑over‑year all‑items CPI inflation rate stood at 3.40 % in August 20262.
- During the Biden administration (averaging the full calendar years 2021‑2024 that Biden was in office), headline inflation averaged 4.95 %2.
- Consequently, the most recent reading is roughly 1.5 percentage points below the Biden‑era average.
- In level terms, the all‑items price index rose 20.7 % during the Biden years (January 2021 to December 2024) and has climbed a further 6.1 % since then, for a total increase of 28.1 % from January 2021 to August 20262.
Energy inflation
Energy is tracked through the combined OECD “Energy” category (housing fuels plus transport fuels)3.
- Energy prices were rising far faster than the overall basket: 16.28 % year‑over‑year in August 20262.
- During 2021‑2024, energy inflation averaged 10.27 %2.
- The August 2026 energy inflation rate is therefore about 6 percentage points higher than the average under the Biden administration.
- Cumulatively, the energy price index surged 30.8 % during the Biden years and has jumped an additional 22.9 % since December 2024, bringing the total increase from January 2021 to August 2026 to 60.7 %2.
Sub‑components (available through December 2024 only)
- Housing fuels (electricity, gas and other fuels) averaged 7.46 % annual inflation during 2021‑2024, slowing to 2.74 % by December 20242.
- Transport fuels (gasoline and motor oil) averaged 13.12 % annual inflation during 2021‑2024, but had cooled to just 1.66 % by December 20242.
- The sharp re‑acceleration of the combined energy index to 16.3 % in August 2026 therefore reflects a strong post‑2024 resurgence in energy costs rather than a continuation of the late‑Biden trend2.
A visual summary of headline versus energy price levels, year‑over‑year rates, and the cumulative change since January 2021 is shown in the chart generated during the analysis2.
- Code Run 1Dataset: DSD_PRICES@DF_PRICES_ALL
Dataset filters for
DSD_PRICES@DF_PRICES_ALLFilter Value(s) REF_AREA USA FREQ M EXPENDITURE _T, CP045_0722, CP045, CP0722 Program output
Max time period: 2026-08 _T: max = 2026-08 CP045_0722: max = 2026-08 CP045: max = 2024-12 CP0722: max = 2024-12 Index levels latest: _T: latest = 2026-08, value = 141.332 Jan 2021 = 110.364 Aug 2026 = 141.332 CP045_0722: latest = 2026-08, value = 162.655 Jan 2021 = 101.210 Aug 2026 = 162.655 CP045: latest = 2024-12, value = 135.827 CP0722: latest = 2024-12, value = 135.269 YoY growth latest: _T: latest = 2026-08, value = 3.397% CP045_0722: latest = 2026-08, value = 16.277% CP045: latest = 2024-12, value = 2.740% CP0722: latest = 2024-12, value = 1.655%Code
import pandas as pd file_path = DATASET_FILE df = pd.read_csv(file_path) # Get all data for USA without time restrictions us_df = df[df['REF_AREA'] == 'USA'].copy() print("Max time period:", us_df['TIME_PERIOD'].max()) # Check if any expenditure has 2026-09 for exp in ['_T', 'CP045_0722', 'CP045', 'CP0722']: sub = us_df[us_df['EXPENDITURE'] == exp] print(f"{exp}: max = {sub['TIME_PERIOD'].max()}") # Let's focus on what we need # Extract N/_Z index levels and N/GY YoY growth idx_df = us_df[(us_df['ADJUSTMENT'] == 'N') & (us_df['TRANSFORMATION'] == '_Z') & (us_df['METHODOLOGY'] == 'N')] idx_df = idx_df[['EXPENDITURE', 'TIME_PERIOD', 'value']].rename(columns={'value': 'index_level'}) yoy_df = us_df[(us_df['ADJUSTMENT'] == 'N') & (us_df['TRANSFORMATION'] == 'GY') & (us_df['METHODOLOGY'] == 'N')] yoy_df = yoy_df[['EXPENDITURE', 'TIME_PERIOD', 'value']].rename(columns={'value': 'yoy_growth'}) # Also get _T with S/_Z (seasonally adjusted index) sa_idx = us_df[(us_df['EXPENDITURE'] == '_T') & (us_df['ADJUSTMENT'] == 'S') & (us_df['TRANSFORMATION'] == '_Z')] sa_idx = sa_idx[['EXPENDITURE', 'TIME_PERIOD', 'value']].rename(columns={'value': 'sa_index_level'}) print("\nIndex levels latest:") for exp in ['_T', 'CP045_0722', 'CP045', 'CP0722']: sub = idx_df[idx_df['EXPENDITURE'] == exp] if not sub.empty: print(f"{exp}: latest = {sub['TIME_PERIOD'].max()}, value = {sub[sub['TIME_PERIOD'] == sub['TIME_PERIOD'].max()]['index_level'].values[0]:.3f}") if exp == 'CP045_0722': print(f" Jan 2021 = {sub[sub['TIME_PERIOD'] == '2021-01']['index_level'].values[0]:.3f}") print(f" Aug 2026 = {sub[sub['TIME_PERIOD'] == '2026-08']['index_level'].values[0]:.3f}") if exp == '_T': print(f" Jan 2021 = {sub[sub['TIME_PERIOD'] == '2021-01']['index_level'].values[0]:.3f}") print(f" Aug 2026 = {sub[sub['TIME_PERIOD'] == '2026-08']['index_level'].values[0]:.3f}") print("\nYoY growth latest:") for exp in ['_T', 'CP045_0722', 'CP045', 'CP0722']: sub = yoy_df[yoy_df['EXPENDITURE'] == exp] if not sub.empty: latest = sub['TIME_PERIOD'].max() print(f"{exp}: latest = {latest}, value = {sub[sub['TIME_PERIOD'] == latest]['yoy_growth'].values[0]:.3f}%") - Code Run 2Dataset: DSD_PRICES@DF_PRICES_ALL
Images
us_inflation_energy_analysis.svgDataset filters for
DSD_PRICES@DF_PRICES_ALLFilter Value(s) REF_AREA USA FREQ M EXPENDITURE _T, CP045_0722, CP045, CP0722 Program output
Headline CPI (_T): Jan 2021 = 110.364 Dec 2024 = 133.157 (+20.7% during Biden) Aug 2026 = 141.332 (+6.1% after Biden) Total Jan 2021 to Aug 2026 = +28.1% Energy (CP045_0722): Jan 2021 = 101.210 Dec 2024 = 132.338 (+30.8% during Biden) Aug 2026 = 162.655 (+22.9% after Biden) Total Jan 2021 to Aug 2026 = +60.7% === Average YoY Inflation Rates === Headline CPI (_T): Average YoY 2021-2024 (Biden): 4.95% Latest YoY (2026-08): 3.40% Energy (CP045_0722): Average YoY 2021-2024 (Biden): 10.27% Latest YoY (2026-08): 16.28% Latest vs Biden avg: +6.01 percentage points Housing fuels (CP045): Average YoY 2021-2024 (Biden): 7.46% Latest YoY (2024-12): 2.74% Transport fuels (CP0722): Average YoY 2021-2024 (Biden): 13.12% Latest YoY (2024-12): 1.66% Chart saved to us_inflation_energy_analysis.svgCode
import pandas as pd import matplotlib.pyplot as plt import numpy as np file_path = DATASET_FILE df = pd.read_csv(file_path) # Filter relevant data us_df = df[(df['REF_AREA'] == 'USA') & (df['METHODOLOGY'] == 'N')].copy() # Index levels (N/_Z) idx = us_df[(us_df['ADJUSTMENT'] == 'N') & (us_df['TRANSFORMATION'] == '_Z')][['EXPENDITURE', 'TIME_PERIOD', 'value']].copy() idx.rename(columns={'value': 'index'}, inplace=True) idx['TIME_PERIOD'] = pd.to_datetime(idx['TIME_PERIOD']) idx = idx.sort_values(['EXPENDITURE', 'TIME_PERIOD']) # YoY growth (N/GY) yoy = us_df[(us_df['ADJUSTMENT'] == 'N') & (us_df['TRANSFORMATION'] == 'GY')][['EXPENDITURE', 'TIME_PERIOD', 'value']].copy() yoy.rename(columns={'value': 'yoy_pct'}, inplace=True) yoy['TIME_PERIOD'] = pd.to_datetime(yoy['TIME_PERIOD']) yoy = yoy.sort_values(['EXPENDITURE', 'TIME_PERIOD']) # Seasonally adjusted all-items index (S/_Z) sa_idx = us_df[(us_df['EXPENDITURE'] == '_T') & (us_df['ADJUSTMENT'] == 'S') & (us_df['TRANSFORMATION'] == '_Z')][['TIME_PERIOD', 'value']].copy() sa_idx.rename(columns={'value': 'sa_index'}, inplace=True) sa_idx['TIME_PERIOD'] = pd.to_datetime(sa_idx['TIME_PERIOD']) sa_idx = sa_idx.sort_values('TIME_PERIOD') # Helper function to get index value at a specific date def get_index(exp, date_str): sub = idx[(idx['EXPENDITURE'] == exp) & (idx['TIME_PERIOD'] == date_str)] if sub.empty: return None return sub['index'].values[0] # Define dates jan_2021 = pd.Timestamp('2021-01-01') dec_2024 = pd.Timestamp('2024-12-01') aug_2026 = pd.Timestamp('2026-08-01') # Calculate cumulative changes for exp, label in [('_T', 'Headline CPI'), ('CP045_0722', 'Energy')]: start = get_index(exp, jan_2021) mid = get_index(exp, dec_2024) end = get_index(exp, aug_2026) if start and end: total_change = (end / start - 1) * 100 print(f"\n{label} ({exp}):") print(f" Jan 2021 = {start:.3f}") if mid: biden_change = (mid / start - 1) * 100 post_change = (end / mid - 1) * 100 print(f" Dec 2024 = {mid:.3f} (+{biden_change:.1f}% during Biden)") print(f" Aug 2026 = {end:.3f} (+{post_change:.1f}% after Biden)") else: print(f" Aug 2026 = {end:.3f}") print(f" Total Jan 2021 to Aug 2026 = +{total_change:.1f}%") # Average YoY during Biden years (2021-2025, but we'll use 2021-2024 full years since Dec 2024 is last full year) # Actually let's compute Jan 2021 - Dec 2024 average, and also Jan 2021 - Jan 2025 if possible print("\n\n=== Average YoY Inflation Rates ===") for exp, label in [('_T', 'Headline CPI'), ('CP045_0722', 'Energy'), ('CP045', 'Housing fuels'), ('CP0722', 'Transport fuels')]: sub = yoy[yoy['EXPENDITURE'] == exp].copy() if sub.empty: continue sub['year'] = sub['TIME_PERIOD'].dt.year # Biden period: 2021-2024 (full years in office) biden_avg = sub[(sub['year'] >= 2021) & (sub['year'] <= 2024)]['yoy_pct'].mean() # Latest available month latest = sub.iloc[-1] print(f"\n{label} ({exp}):") if biden_avg is not np.nan: print(f" Average YoY 2021-2024 (Biden): {biden_avg:.2f}%") print(f" Latest YoY ({latest['TIME_PERIOD'].strftime('%Y-%m')}): {latest['yoy_pct']:.2f}%") # If energy and headline, show ratio if exp == 'CP045_0722' and biden_avg is not np.nan: print(f" Latest vs Biden avg: {latest['yoy_pct'] - biden_avg:+.2f} percentage points") # Create visualizations fig, axes = plt.subplots(2, 2, figsize=(14, 10)) # Plot 1: Index levels for Headline CPI and Energy ax = axes[0, 0] for exp, label, color in [('_T', 'Headline CPI', 'blue'), ('CP045_0722', 'Energy', 'red')]: sub = idx[idx['EXPENDITURE'] == exp].copy() ax.plot(sub['TIME_PERIOD'], sub['index'], label=label, color=color, linewidth=2) ax.axvline(pd.Timestamp('2021-01-01'), color='gray', linestyle='--', alpha=0.7, label='Biden term start') ax.axvline(pd.Timestamp('2025-01-01'), color='gray', linestyle='-.', alpha=0.7, label='Biden term end') ax.set_title('US Consumer Price Index Levels (Jan 2020 = ~100 base)') ax.set_ylabel('Index (2015=100)') ax.legend() ax.grid(True, alpha=0.3) # Plot 2: YoY growth rates ax = axes[0, 1] for exp, label, color in [('_T', 'Headline CPI', 'blue'), ('CP045_0722', 'Energy', 'red')]: sub = yoy[yoy['EXPENDITURE'] == exp].copy() ax.plot(sub['TIME_PERIOD'], sub['yoy_pct'], label=label, color=color, linewidth=2) # Add average line for 2021-2024 biden_avg = sub[(sub['TIME_PERIOD'].dt.year >= 2021) & (sub['TIME_PERIOD'].dt.year <= 2024)]['yoy_pct'].mean() ax.axhline(biden_avg, color=color, linestyle=':', alpha=0.7, label=f'{label} avg 2021-24 ({biden_avg:.1f}%)') ax.axvline(pd.Timestamp('2021-01-01'), color='gray', linestyle='--', alpha=0.7) ax.axvline(pd.Timestamp('2025-01-01'), color='gray', linestyle='-.', alpha=0.7) ax.set_title('US YoY Inflation Rates (%)') ax.set_ylabel('YoY % Change') ax.legend(fontsize=8) ax.grid(True, alpha=0.3) # Plot 3: Cumulative change since Jan 2021 ax = axes[1, 0] for exp, label, color in [('_T', 'Headline CPI', 'blue'), ('CP045_0722', 'Energy', 'red')]: sub = idx[idx['EXPENDITURE'] == exp].copy() sub = sub[sub['TIME_PERIOD'] >= '2020-01-01'] base = sub[sub['TIME_PERIOD'] == '2021-01-01']['index'].values[0] sub['cum_change'] = (sub['index'] / base - 1) * 100 ax.plot(sub['TIME_PERIOD'], sub['cum_change'], label=label, color=color, linewidth=2) ax.axvline(pd.Timestamp('2021-01-01'), color='gray', linestyle='--', alpha=0.7) ax.axvline(pd.Timestamp('2025-01-01'), color='gray', linestyle='-.', alpha=0.7) ax.set_title('Cumulative Price Change Since Jan 2021 (%)') ax.set_ylabel('% Change from Jan 2021') ax.legend() ax.grid(True, alpha=0.3) # Plot 4: Energy vs Headline inflation gap ax = axes[1, 1] merged = pd.merge( yoy[yoy['EXPENDITURE'] == '_T'][['TIME_PERIOD', 'yoy_pct']].rename(columns={'yoy_pct': 'headline'}), yoy[yoy['EXPENDITURE'] == 'CP045_0722'][['TIME_PERIOD', 'yoy_pct']].rename(columns={'yoy_pct': 'energy'}), on='TIME_PERIOD' ) merged['gap'] = merged['energy'] - merged['headline'] ax.fill_between(merged['TIME_PERIOD'], merged['gap'], alpha=0.3, color='purple') ax.plot(merged['TIME_PERIOD'], merged['gap'], color='purple', linewidth=2) ax.axhline(0, color='black', linestyle='-', alpha=0.3) ax.axvline(pd.Timestamp('2021-01-01'), color='gray', linestyle='--', alpha=0.7) ax.axvline(pd.Timestamp('2025-01-01'), color='gray', linestyle='-.', alpha=0.7) ax.set_title('Energy Inflation Minus Headline Inflation (pp)') ax.set_ylabel('Percentage Points') ax.grid(True, alpha=0.3) plt.tight_layout() plt.savefig('us_inflation_energy_analysis.svg') plt.close() print("\n\nChart saved to us_inflation_energy_analysis.svg") - OECD dataset: Consumer price indices (CPIs, HICPs), COICOP 1999