Make cftime dateoffsets public
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 4.2k
- Forks
- 1.4k
- Avg merge
- 2d 15h
- Merged PRs (30d)
- 14
Description
Consider the following cftime vector. It's fairly common to see users asking how to subtract "1 month" from this kind of vector:
xr.set_options(display_style="text")
time = xr.DataArray(
xr.cftime_range("1000-01-01", "1000-05-01", freq="MS", calendar="360_day"), dims="time", name="time"
)
time
<xarray.DataArray 'time' (time: 5)>
array([cftime.Datetime360Day(1000, 1, 1, 0, 0, 0, 0, has_year_zero=False),
cftime.Datetime360Day(1000, 2, 1, 0, 0, 0, 0, has_year_zero=False),
cftime.Datetime360Day(1000, 3, 1, 0, 0, 0, 0, has_year_zero=False),
cftime.Datetime360Day(1000, 4, 1, 0, 0, 0, 0, has_year_zero=False),
cftime.Datetime360Day(1000, 5, 1, 0, 0, 0, 0, has_year_zero=False)],
dtype=object)
Coordinates:
* time (time) object 1000-01-01 00:00:00 ... 1000-05-01 00:00:00
Subtracting pd.Timedelta("1 month") does not work because a month does not represent an absolute unit of time. Instead the solution appears to be:
time - xr.coding.cftime_offsets.MonthBegin(1)
<xarray.DataArray 'time' (time: 5)>
array([cftime.Datetime360Day(999, 12, 1, 0, 0, 0, 0, has_year_zero=False),
cftime.Datetime360Day(1000, 1, 1, 0, 0, 0, 0, has_year_zero=False),
cftime.Datetime360Day(1000, 2, 1, 0, 0, 0, 0, has_year_zero=False),
cftime.Datetime360Day(1000, 3, 1, 0, 0, 0, 0, has_year_zero=False),
cftime.Datetime360Day(1000, 4, 1, 0, 0, 0, 0, has_year_zero=False)],
dtype=object)
Coordinates:
* time (time) object 1000-01-01 00:00:00 ... 1000-05-01 00:00:00
I think pandas exposes this functionality as pd.DateOffset(months=1). Can we add a similar xr.DateOffset?
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with xarray.coding.cftime_offsets.MonthBegin and the surrounding cftime offset implementation. Compare the requested behavior with pandas.DateOffset and the shown DataArray subtraction example. Done means the cftime date-offset functionality is exposed through the requested public xarray API and the demonstrated month subtraction works as described.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- pandas, python
- Domain
- api, data
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100