US state heating/cooling degree-day panel, monthly (NOAA nClimDiv)
Monthly US state heating/cooling degree-day panel (base 65F), 1895-01 onward for the 48 contiguous states and 1925-01 onward for Alaska, from NOAA NCEI's nClimDiv v1.0.0 statewide files (keyless, U.S. federal public domain). One row per state x month: monthly HDD, CDD and total degree days; 1991-2020 normal and anomaly vs normal; year-on-year change; anomaly vs the trailing 10-year same-month mean; heating/cooling season flags; documented 0-100 heating/cooling demand scores (percentile of the state's own calendar-month history); cold-snap / heat-wave month flags at the 90th percentile. Upstream gaps are honest nulls, never imputed: Alaska's statewide record (050) is entirely the upstream -9999. missing marker (verified 2026-09-30, 1925-2026), so every AK value column is null; Hawaii has no statewide record in these files. NCEI aggregate records (codes 101-110, 121-124) are excluded by design. Join keys: year_month, state_code, country_code=USA. Who joins this: Shopify apparel/home/energy shops drive seasonal demand forecasts and promo timing off the demand scores; subscription businesses use cold-snap/heat-wave months as churn-risk features; sales teams rank territories by seasonal demand intensity.
- Rows
- 77,060
- Columns
- 24
- Source cadence
- Monthly
- Last refreshed
- Sep 30, 2026
- Theme
- economics
| Column | Type | Description |
|---|---|---|
| month | date | First day of the calendar month. (unit: date) |
| year_month | string | Calendar month as YYYY-MM (panel join key). (unit: string) |
| state_code | string | 2-letter postal state code (panel join key). (unit: string) |
| state_name | string | State name. (unit: string) |
| country | string | Country name (shared normalization layer). (unit: string) |
| country_code | string | ISO 3166-1 alpha-3 country code (USA). (unit: string) |
| hdd | float | Monthly heating degree days, base 65F, statewide mean from NOAA nClimDiv v1.0.0 (degree-days). Null is an honest upstream gap (Alaska's statewide record is entirely missing upstream), never imputed. (unit: degree-days) |
| cdd | float | Monthly cooling degree days, base 65F, statewide mean from NOAA nClimDiv v1.0.0 (degree-days). Null is an honest upstream gap (Alaska's statewide record is entirely missing upstream), never imputed. (unit: degree-days) |
| total_dd | float | hdd + cdd (degree-days); null only when both components are missing. (unit: degree-days) |
| hdd_normal | float | 1991-2020 climate normal for monthly HDD (record 0032 of the nClimDiv normals file; degree-days). Null for Alaska — NCEI publishes no usable normals for it in these files. (unit: degree-days) |
| cdd_normal | float | 1991-2020 climate normal for monthly CDD (record 0032 of the nClimDiv normals file; degree-days). Null for Alaska — NCEI publishes no usable normals for it in these files. (unit: degree-days) |
| hdd_anomaly_vs_normal | float | hdd minus the 1991-2020 normal for that calendar month (degree-days); positive = colder than normal. Null for Alaska (no upstream normal). (unit: degree-days) |
| cdd_anomaly_vs_normal | float | cdd minus the 1991-2020 normal for that calendar month (degree-days); positive = hotter than normal. Null for Alaska (no upstream normal). (unit: degree-days) |
| hdd_yoy | float | Change in HDD versus the same month one year earlier (degree-days). (unit: degree-days) |
| cdd_yoy | float | Change in CDD versus the same month one year earlier (degree-days). (unit: degree-days) |
| hdd_anomaly_vs_10y | float | hdd minus the trailing 10-year mean of the same calendar month (minimum 5 prior years, current month excluded; degree-days). (unit: degree-days) |
| cdd_anomaly_vs_10y | float | cdd minus the trailing 10-year mean of the same calendar month (minimum 5 prior years, current month excluded; degree-days). (unit: degree-days) |
| heating_season_flag | boolean | True for October-March (heating season). (unit: boolean) |
| cooling_season_flag | boolean | True for June-August (cooling season). (unit: boolean) |
| heating_demand_score | float | 0-100 percentile rank of the month's HDD within the state's own calendar-month history (minimum 10 observations): a documented seasonal heating-demand gauge, not a forecast. (unit: score 0-100) |
| cooling_demand_score | float | 0-100 percentile rank of the month's CDD within the state's own calendar-month history (minimum 10 observations): a documented seasonal cooling-demand gauge, not a forecast. (unit: score 0-100) |
| cold_snap_month | boolean | True when the month's HDD is at or above the 90th percentile of the state's calendar-month history (minimum 10 observations). (unit: boolean) |
| heat_wave_month | boolean | True when the month's CDD is at or above the 90th percentile of the state's calendar-month history (minimum 10 observations). (unit: boolean) |
| row_hash | string | Deterministic 16-hex sha256 of state_code + year_month + hdd + cdd (idempotency key). (unit: string) |
First 10 sample rows — a preview, not the complete dataset.
| month | year_month | state_code | state_name | country | country_code | hdd | cdd | total_dd | hdd_normal | cdd_normal | hdd_anomaly_vs_normal | cdd_anomaly_vs_normal | hdd_yoy | cdd_yoy | hdd_anomaly_vs_10y | cdd_anomaly_vs_10y | heating_season_flag | cooling_season_flag | heating_demand_score | cooling_demand_score | cold_snap_month | heat_wave_month | row_hash |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1895-01-01T00:00:00 | 1895-01 | AL | Alabama | United States | USA | 717 | 5 | 722 | 662 | 12 | 55 | -7 | — | — | — | — | true | false | 70.455 | 39.015 | false | false | f2be86db56175275 |
| 1895-02-01T00:00:00 | 1895-02 | AL | Alabama | United States | USA | 800 | 0 | 800 | 518 | 6 | 282 | -6 | — | — | — | — | true | false | 100 | 5.303 | true | false | bd28d35397c2dc74 |
| 1895-03-01T00:00:00 | 1895-03 | AL | Alabama | United States | USA | 373 | 18 | 391 | 359 | 25 | 14 | -7 | — | — | — | — | true | false | 59.848 | 42.424 | false | false | 8c8c2f3b1df95d9f |
| 1895-04-01T00:00:00 | 1895-04 | AL | Alabama | United States | USA | 115 | 49 | 164 | 132 | 47 | -17 | 2 | — | — | — | — | false | false | 40.909 | 59.091 | false | false | af3896b56dd8eb65 |
| 1895-05-01T00:00:00 | 1895-05 | AL | Alabama | United States | USA | 34 | 155 | 189 | 28 | 187 | 6 | -32 | — | — | — | — | false | false | 68.561 | 31.061 | false | false | 3e0e12128e660539 |
| 1895-06-01T00:00:00 | 1895-06 | AL | Alabama | United States | USA | 0 | 359 | 359 | 0 | 363 | 0 | -4 | — | — | — | — | false | true | 45.076 | 48.864 | false | false | 1541364fbade7ea4 |
| 1895-07-01T00:00:00 | 1895-07 | AL | Alabama | United States | USA | 0 | 419 | 419 | 0 | 452 | 0 | -33 | — | — | — | — | false | true | 50.379 | 24.242 | true | false | 80b3d2ed6692bcd8 |
| 1895-08-01T00:00:00 | 1895-08 | AL | Alabama | United States | USA | 0 | 437 | 437 | 0 | 435 | 0 | 2 | — | — | — | — | false | true | 50 | 53.409 | true | false | cdfd426ec75cc2af |
| 1895-09-01T00:00:00 | 1895-09 | AL | Alabama | United States | USA | 0 | 365 | 365 | 6 | 281 | -6 | 84 | — | — | — | — | false | false | 9.16 | 89.695 | false | true | 578ff96e214dfeef |
| 1895-10-01T00:00:00 | 1895-10 | AL | Alabama | United States | USA | 234 | 28 | 262 | 131 | 77 | 103 | -49 | — | — | — | — | true | false | 96.947 | 5.725 | true | false | 64e938b79905738c |
Profiled Oct 1, 2026 from snapshot 20260930T171959Z-bfaa380a6bcb
Measured- Completeness
- 98.6%
- Rows
- 77,060
- Columns
- 24
- Columns with gaps
- 15
| Column | Missing | Distinct | Range | Distribution |
|---|---|---|---|---|
| monthtimestamp | 0% | 1,467 | Jan 1, 1895 → Aug 1, 2026 | — |
| year_monthvarchar | 0% | 1,471 | — |
|
| state_codevarchar | 0% | 53 | — |
|
| state_namevarchar | 0% | 55 | — |
|
| countryvarchar | 0% | 1 | — |
|
| country_codevarchar | 0% | 1 | — |
|
| hdddouble | 1.6% | 2,187 | 0 → 2,389median 343 | 758 outside 1st–99th percentile |
| cdddouble | 1.6% | 743 | 0 → 844median 8 | 752 outside 1st–99th percentile |
| total_dddouble | 1.6% | 2,096 | 106 → 2,389median 426 | 1,480 outside 1st–99th percentile |
| hdd_normaldouble | 1.6% | 457 | 0 → 1,819median 365 | 658 outside 1st–99th percentile |
| cdd_normaldouble | 1.6% | 204 | 0 → 654median 10 | 660 outside 1st–99th percentile |
| hdd_anomaly_vs_normaldouble | 1.6% | 905 | -584 → 711median -2 | 1,503 outside 1st–99th percentile |
| cdd_anomaly_vs_normaldouble | 1.6% | 345 | -219 → 297median 0 | 1,503 outside 1st–99th percentile |
| hdd_yoydouble | 2.3% | 1,171 | -803 → 1,039median 0 | 1,499 outside 1st–99th percentile |
| cdd_yoydouble | 2.3% | 535 | -319 → 346median 0 | 1,489 outside 1st–99th percentile |
| hdd_anomaly_vs_10ydouble | 5.3% | 15,270 | -533.7 → 842.9median -0.7 | 1,458 outside 1st–99th percentile |
| cdd_anomaly_vs_10ydouble | 5.3% | 6,179 | -221.1 → 270.17median 0 | 1,458 outside 1st–99th percentile |
| heating_season_flagboolean | 0% | 2 | — |
|
| cooling_season_flagboolean | 0% | 2 | — |
|
| heating_demand_scoredouble | 1.6% | 500 | 0.7576 → 100median 50.38 | 1,670 outside 1st–99th percentile |
| cooling_demand_scoredouble | 1.6% | 500 | 0.7576 → 100median 50.38 | 1,579 outside 1st–99th percentile |
| cold_snap_monthboolean | 1.6% | 2 | — |
|
| heat_wave_monthboolean | 1.6% | 2 | — |
|
| row_hashvarchar | 0% | 76,581 | — |
|
- Current
20260930T171959Z-bfaa380a6bcb · sha256 bfaa380a6bcb…
77,060 rows · first snapshot
Point any LLM at the metadata endpoint — the documentation above is machine-readable too (JSON-LD + Croissant).
curl "https://datazimuts.com/v1/datasets/noaa_nclimdiv_degree_days_intel/us_state_degree_days_monthly" | jq '{title, rows, columns_count, license}'import requests
ds = requests.get("https://datazimuts.com/v1/datasets/noaa_nclimdiv_degree_days_intel/us_state_degree_days_monthly").json()
print(ds["title"], ds["rows"], "rows")
# Sample rows for an LLM context window
for row in ds.get("sample_rows", [])[:5]:
print(row)API endpoint: https://datazimuts.com/v1/datasets/noaa_nclimdiv_degree_days_intel/us_state_degree_days_monthly
Tip: fetch /llms.txt for the full machine-readable catalog.
Where this data comes from and what was made from it. Other people's work shows as counts; only shared projects are named.
Cite this snapshot
Pinned to snapshot 20260930T171959Z-bfaa380a6bcb and its content hash, so readers get exactly the data you used.
US State Degree Days (NOAA nClimDiv, keyless). (2026). US state heating/cooling degree-day panel, monthly (NOAA nClimDiv) [Data set, snapshot 20260930T171959Z-bfaa380a6bcb, sha256 bfaa380a6bcb]. Datazimuts. Retrieved 2026-10-01, from https://datazimuts.com/en/datasets/noaa_nclimdiv_degree_days_intel/us_state_degree_days_monthly?snapshot=20260930T171959Z-bfaa380a6bcb
@misc{dz_noaa_nclimdiv_degree_days_intel_us_state_bfaa380a,
title = {{US state heating/cooling degree-day panel, monthly (NOAA nClimDiv)}},
author = {{US State Degree Days (NOAA nClimDiv, keyless)}},
year = {2026},
publisher = {Datazimuts},
howpublished = {\url{https://datazimuts.com/en/datasets/noaa_nclimdiv_degree_days_intel/us_state_degree_days_monthly?snapshot=20260930T171959Z-bfaa380a6bcb}},
note = {Snapshot 20260930T171959Z-bfaa380a6bcb, sha256 bfaa380a6bcbb38eaf407195d0185a2a759470ca6ecc7f288956802be7093370; accessed 2026-10-01}
}Embed a table or a chart
Paste this into any page. The embed is pinned to the same snapshot, follows the reader's light or dark setting, and always shows the source, license and a link back.
<iframe src="https://datazimuts.com/embed/chart?dataset=noaa_nclimdiv_degree_days_intel%2Fus_state_degree_days_monthly&lang=en&theme=auto&snapshot=20260930T171959Z-bfaa380a6bcb&x=year_month&y=hdd&agg=avg" title="US state heating/cooling degree-day panel, monthly (NOAA nClimDiv)" width="100%" height="380" style="border:0" loading="lazy"></iframe>
Ask about this dataset. Answers come only from its catalog record, measured profile and change history, and list the facts they used.