The trap
Climate grids are usually a regular lat/lon mesh — say 0.25° × 0.25°. That sounds uniform, but the Earth is a sphere: meridians (lines of longitude) converge toward the poles. A 0.25° cell at the equator is a ~28 × 28 km square; the same 0.25° cell at 60° latitude is only ~14 km wide — half the ground. At 80° it's a sliver.
So if you just average every cell equally (field.mean()), you give a tiny patch of Arctic the same vote as a big patch of tropics. With thousands of skinny polar cells, that bias is real — it can shift a "global mean" by a noticeable amount and exaggerate polar swings.
The fix
Weight each cell by how much area it actually covers. That area is proportional to the cosine of its latitude (cos 0° = 1 at the equator, cos 90° = 0 at the pole):
That's it. Every honest spatial mean on this site — including the ERA5 trends on /verify — uses it.
Play with it
Each row is a latitude band; its drawn width is its true ground area (cos lat) — see them shrink toward the pole. Add a polar anomaly and watch the naïve average chase it while the area-weighted average barely moves.
Do it yourself
Two footnotes for later: cos-latitude is the right weight for a regular lat/lon grid; other projections (equal-area grids, EASE-Grid) bake the area in differently. And for a small region the effect is tiny — it matters most for wide or high-latitude domains.