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

Energy inflation

Energy is tracked through the combined OECD “Energy” category (housing fuels plus transport fuels)3.

Sub‑components (available through December 2024 only)

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.

  1. Dataset filters for DSD_PRICES@DF_PRICES_ALL

    FilterValue(s)
    REF_AREAUSA
    FREQM
    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}%")
    
  2. Images

    us_inflation_energy_analysis.svg

    Dataset filters for DSD_PRICES@DF_PRICES_ALL

    FilterValue(s)
    REF_AREAUSA
    FREQM
    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.svg
    

    Code

    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")
    
  3. OECD dataset: Consumer price indices (CPIs, HICPs), COICOP 1999