Description
TLDR
I propose merging #8524 (docs) to provide this new API (after review).
from xarray.groupers import SeasonGrouper, SeasonResampler
ds.groupby(time=SeasonGrouper(["DJFM", "MAMJ", "JJAS", "SOND"])).mean()
ds.resample(time=SeasonResampler(["DJF", "MAM", "JJA", "SON"])).mean()
Is your feature request related to a problem?
Current Status
Xarray supports a very simple form of seasonal grouping: groupby("time.season")
which has a fixed definition of seasons: DJF, MAM, JJA, SON
, and doesn't enforce proper ordering of the output (the seasons get sorted as a string to give : DJF, JJA, MAM, SON
:/ )
We support a little more complex resampling using Pandas syntax .resample(time="QS-Jan")
for example, but I think this is limited to seasons of 3 months long.
User Requests
A quick scan of issues, discussions, and StackOverflow shows that our users want more control over how seasons are specified.
- Don't include "incomplete" seasons in output.
- allow custom season definitions (e.g. of varying length, overlapping seasons).
Here is a list of user requests:
- Closes Ordered Groupby Keys #757
- StackOverflow:
Describe the solution you'd like
The problem of custom seasons is simply that of converting the seasons to proper integer codes. Our relatively new Grouper objects provide this extension point.
I have implemented this in #9524 (docs). The code isn't pretty and probably doesn't scale well for very long time vectors, but I focused on correctness and tests.
Describe alternatives you've considered
This could live outside Xarray, but is such a common ask from our userbase, that it seems worth of inclusion.
Activity
trexfeathers commentedon Apr 3, 2025
Just in case this is useful to anyone. Not as flexible as the proposal, but available right now.
add_season()
add_season_membership()
add_season_number()
add_season_year()
dcherian commentedon Apr 8, 2025
Nice thanks @trexfeathers
Since there are 5 👍 I will open #8524 for review and bring it up for discussion at our regular meeting tomorrow.
dcherian commentedon Apr 29, 2025
A couple of weks ago, we decided to merge and possibly allow providing month indices as input in the future. I will merge the PR shortly
bweeding commentedon May 9, 2025
Hi @dcherian, this will be fantastic for tropical/growing season analysis! Do you know when it is likely to be released as part of a package update?
Cheers
Ben