-
-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Enable more ergonomic seasonal grouping and resampling #10198
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
Just in case this is useful to anyone. Not as flexible as the proposal, but available right now. from pathlib import Path
from tempfile import TemporaryDirectory
from iris.coord_categorisation import add_season
from ncdata.iris_xarray import cubes_to_xarray, cubes_from_xarray
from ncdata.threadlock_sharing import enable_lockshare
import requests
import xarray as xr
enable_lockshare(iris=True, xarray=True)
with TemporaryDirectory() as tmpdirname:
url = "https://github.com/pydata/xarray-data/raw/refs/heads/master/air_temperature.nc"
response = requests.get(url)
file_path = Path(tmpdirname) / "air_temperature.nc"
with file_path.open("wb") as file_write:
file_write.write(response.content)
dataset = xr.open_dataset(file_path)
(cube,) = cubes_from_xarray(dataset)
# NOTE: this can't support overlapping seasons.
add_season(cube, "time", name="season", seasons=["DJFM", "AM", "JJ", "ASON"])
season_dataset = cubes_to_xarray(cube) |
Nice thanks @trexfeathers Since there are 5 👍 I will open #8524 for review and bring it up for discussion at our regular meeting tomorrow. |
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 |
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 |
Uh oh!
There was an error while loading. Please reload this page.
TLDR
I propose merging #8524 (docs) to provide this new API (after review).
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.
Here is a list of user requests:
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.
The text was updated successfully, but these errors were encountered: