
The 3 Year Running Average for Global Warming crossed 1.5Cin November 2025 (ERA5 data).
The 2 Year Running Average for Global Warming crossed 1.5C in November 2024 (ERA5 data).
I wondered what the longest running average (where the running average was 1.5C) was for each date.
Then I wondered how that would look on a graph with other Global Warming Milestones: 0.5C, 0.75C, 1C, 1.25C, 1.5C, 1.75C. Note this is the Global Mean Surface Temperature Anomaly relative to “Pre-Industrial”, using Copernicus ERA5 data. (See Data Sets and Copernicus 1850-1900 Baseline – Daily GMST Anomaly for further details on the data used.)
The graphic above, suggests that we might see the maximum-running-average-for-1.5C drop back to well under 3 years again, but by 2031-ish (if trends continue) the maximum running average will be over 6 years, and won’t be dropping back.
Centered Moving Average
The previous graph begged for this next one. Given that a 20-year-running average uses 20 years of data, it seems interesting to know show the centre-date for the 20-year period … and the same for the rest of the graph. This was something I’ve been trying to get my head around: For those that advocate waiting for 20 years of data, before declaring we have crossed 1.5C, what difference has waiting for that long made in the past? … From this graphic, it seems that you can call it with a 9 year centered-moving-average. It is just one more piece of analysis that suggests (with Copernicus ERA5 data) we one day look back and decide we crossed 1.5C somewhere between 2024 and 2028.

The graphic above takes the first graph (top of the page), and then for each point plotted (E.g. the points that make up the coloured lines, where each point represents the longest running average for that date), now draw a grey line, back to the Centred-Moving-Average date.
E.g. December-1995-twenty-year-running-average-is-0.5C. So therefore twenty-year-centred-moving-average-is-0.5c-ten-years-earlier. So there is a grey line from Dec-1995 back to Dec-1985.
Similarly, for Nov-2004-ten-year-running-average-is-0.75C, So therefore the ten-year-centered-moving-average-is-0.75-five-years-earlier. So there is a grey line from Nov-2004 back to Nov-1999.
What does this show?
Well, given that the more cautious talk about requiring a minimum block of 20 years of data to analyse … that means, you are only confident about what the global temperature was 10 years ago (the mid point or the 20 years). There is of course lots of variability, and this approach means you won’t get caught out in some decadal trend.
The graphic suggests that the centered-average-date for a given global warming milestone is fairly stable by the time you have a 9 year centered-average. Interestingly back in the 1980’s global warming was slow enough that the central date did move forwards, but in the 2010’s the global warming is so fast that the central date actually moves backwards !!
How the Graphic was created
I used the data (See GMST Data Sets) from Copernicus ERA5, and applied parsing (see Copernicus 1850-1900 Baseline – Daily GMST Anomaly) to get daily GMST Anomaly values. Then I reduced the granularity to 7-days (rather than daily) because i suspect the recursive nature of this process (described below) would have taken days/weeks if I tried to do it with daily data. Then for each week, recursively work out the running average for the last week, 2 weeks, 3 weeks, … years … and if the running average has reached 1.5C keep track of the number of weeks for that running average. Let it go right back to the earliest date (I used data from 1960-present) and then you have the longest-running-average for 1.5C for that date. E.g. The result showed that in the first week of December 1995 the longest running average which gives 1.5C was twenty years. Then do this process again for each of the global warming milestones: 0.5C, 0.75C, 1.00C, 1.25C, 1.50C. I had to do various optimisations to keep the run time down. Took about 20min to get the data. Then put it on a graph.
The second graphic, with the horizontal grey lines, which shows both running average and centred-moving-average … That is created as two separate graphs, which are then manually overlayed on top of each other. I have done my best to align them properly.
Sanity Testing
Below are various sanity checks. The first is a quick one, to confirm I am in the right ball-park, stating the three year average is reaching 1.5C GMST Anomaly in the Copernicus dataset.
High Level Quick Sanity Test
Here, I look at the data published by Copernicus, and Zeke Hausfathers post, regarding expectations for 2025. This shows that the 3 year average for 2023, 2024, 2025 is expected to exceed 1.5. The “My Calculations” column is for the data I user, as per: Dataset: GMST Data Sets and Data Handling: Copernicus 1850-1900 Baseline – Daily GMST Anomaly. I show it in this table, simple to show my data handling gives numbers that are very well aligned with that published by Copernicus on their website.

Here is the Bluesky post from Zeke Hausfather on 3rd October 2025, showing the expectations for 2025 full year.

Sanity Test – Sam Burgess
Another public figure, confirming that 2023, 2024, 2025 will likely average over 1.5C

Sanity Test – Eliot Jacobson – @climatecasino.net
As per a post by Eliot Jacobson on 28th October 2025, BlueSky (https://bsky.app/profile/climatecasino.net/post/3m4ay3rh4ak2q), he shows a graph of the 3-year-running-average approaching 1.5C. I got my data processing approach from Eliot (thanks!), so we do almost exactly the same processing, although I made a few tweaks regarding leap years and rounding, to improve how close my numbers are to those posted by Copernicus on their monthly bulletins. As per the About page, I have no climate credentials, and I’m a random anonymous person on the internet, so my only credibility is that the graphics are correct and can be easily reproduced, so I put extra effort to show my working, the sanity tests, and checks against trusted institutions.

Eliot Jacobson made another post on 10th November 2025 (as per screenshot below), calling the 8th November 2025 as the day that the 3-year-average has crossed 1.5C. This means I called it 4 days earlier (I posted on the 6th November, and my data had the 4th November as the day we crossed 1.5C 3-year-average). This is consistent with some other comparison (where Eliot counted the number of days in 2023, 2024, 2025 which are above 1.5C), as I seem to be running a tiny bit warmer/ahead of Eliot. Probably something to do with rounding/leap-year-handling. I make no claims to be more accurate than Eliot, and to be only 4 days difference in 1096 days is not bad. Would prefer if Copernicus just gave the temperatures relative to 1850-1900, rather than people working it out independently.

Sanity Test – Monthly Values
Given that I’m saying the running 3 year average crossed 1.5C on a particular date, this sanity check is more granular, at the monthly level. Here, I look at the data published by Copernicus. This shows that the 36 month average up to September 2025 (inclusive) is nearing 1.5C. The “My Calculations” column is for the data I user, as per: Dataset: GMST Data Sets and Data Handling: Copernicus 1850-1900 Baseline – Daily GMST Anomaly. I show it in this table, simply to show that my data handling is very well aligned with that published by Copernicus on their website. Note that for the months in 2022, Copernicus doesn’t explicitly give the warming anomalies relative to 1850, so I use the adjustments I have calculated as per Baseline Adjustment Evidence, to get from a Month-in-2022-relative-to-1991-2020-baseline, to the anomaly relative to 1850-1900.

Sanity Check – Spot Checks
I have a spreadsheet, which gives the daily anomalies, so I just did some spot checks in excel to check the numbers are the same as that created by the python program I wrote to create the “longest running averages” graphics displayed on this page.

Additional Sanity Check
I noticed that for Berkeley Earth the 3-year-average is also above 1.5C. This averaging is done by weighting each of the numbers in the table, by the number of days in that month / year. I almost messed up, as I initially didn’t bother weighting the different months differently (E.g. Feb 28 days, dec 31 days), but I did try that later, and it didn’t make any difference to 2dp.
Regarding December 2022, I should do some more sanity checking/refinement. I do have some data handling with Berkely Earth, but it isn’t as robustly tested as my Copernicus ERA5 data handling. E.g. as per Global Warming Baseline Adjustments … for Copernicus I have adjustments at the monthly level, but for Berkeley Earth I only have adjustments at the annual level. At some point I would like to do more on this.
