html_url,issue_url,id,node_id,user,created_at,updated_at,author_association,body,reactions,performed_via_github_app,issue
https://github.com/pydata/xarray/issues/2007#issuecomment-747376047,https://api.github.com/repos/pydata/xarray/issues/2007,747376047,MDEyOklzc3VlQ29tbWVudDc0NzM3NjA0Nw==,10194086,2020-12-17T11:14:33Z,2020-12-17T16:02:25Z,MEMBER,"I just need to find the **three warmest consecutive months** from a temperature dataset for my work, so I thought I add a complete example. First, create an example dataset with monthly temperature:
```python
import xarray as xr
import numpy as np
import pandas as pd
time = pd.date_range(""2000"", periods=12 * 30, freq=""M"")
temp = np.sin((time.month - 5) / 6 * np.pi) + np.random.randn(*time.shape) * 0.3
da = xr.DataArray(temp, dims=[""time""], coords=dict(time=time))
print(da)
```
```python
array([-0.676731, -0.812742, -1.367547, ..., 0.186731, 0.237676, -0.343879])
Coordinates:
* time (time) datetime64[ns] 2000-01-31 2000-02-29 ... 2029-12-31
```
Currently we can achieve this like:
```python
n_months = 3
monthly = da.groupby(""time.month"").mean()
padded = monthly.pad(month=n_months, mode=""wrap"")
rolled = padded.rolling(center=True, month=n_months).mean(skipna=False)
sliced = rolled.isel(month=slice(3, -3))
central_month = sliced.idxmax()
```
Implementing `pad_mode` in `rolling` would allow to do:
```python
monthly = da.groupby(""time.month"").mean()
rolled = monthly.rolling(center=True, month=n_months, pad_mode=""wrap"").mean(skipna=False)
central_month = rolled.idxmax()
```
","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,307783090
https://github.com/pydata/xarray/issues/2007#issuecomment-499548285,https://api.github.com/repos/pydata/xarray/issues/2007,499548285,MDEyOklzc3VlQ29tbWVudDQ5OTU0ODI4NQ==,10194086,2019-06-06T15:36:58Z,2019-06-06T15:36:58Z,MEMBER,"I am coming back to @shoyer suggestion in #2011 - your idea would be to do first a `pad` and then a `rolling` operation as e.g.:
``` python
import numpy as np
import xarray as xr
x = np.arange(1, 366)
y = np.random.randn(365)
ds = xr.DataArray(y, dims=dict(dayofyear=x))
ds.pad(dayofyear=15, mode='wrap').rolling(center=True, dayofyear=31).mean()
```
","{""total_count"": 1, ""+1"": 1, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,307783090
https://github.com/pydata/xarray/issues/2007#issuecomment-375455202,https://api.github.com/repos/pydata/xarray/issues/2007,375455202,MDEyOklzc3VlQ29tbWVudDM3NTQ1NTIwMg==,10194086,2018-03-22T20:57:59Z,2018-03-22T20:57:59Z,MEMBER,"I think what I want is like the `filter` [function in R](https://stat.ethz.ch/R-manual/R-devel/library/stats/html/filter.html) with `circular=True`.
I found two possibilities but they are quite ""hand made"" and certainly not very efficient
Solution with slicing:
``` python
# take the last and first elements and append/ prepend them
first = ds[:15]
last = ds[-15:]
extended = xr.concat([last, ds, first], 'dayofyear')
# do the rolling on the extended ds and get rid of NaNs
sol1 = extended.rolling(dayofyear=31, center=True).mean().dropna('dayofyear')
```
Solution with `roll`:
``` python
roll1 = ds.roll(dayofyear=150).rolling(dayofyear=31, center=True).mean()
roll2 = ds.rolling(dayofyear=31, center=True).mean()
sol2 = xr.concat([roll1, roll2], dim='r').mean('r')
```
Call `rolling` on original and `roll`ed dataset, and put them together again.","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,307783090
https://github.com/pydata/xarray/issues/2007#issuecomment-375445915,https://api.github.com/repos/pydata/xarray/issues/2007,375445915,MDEyOklzc3VlQ29tbWVudDM3NTQ0NTkxNQ==,10194086,2018-03-22T20:26:24Z,2018-03-22T20:27:59Z,MEMBER,"Probably a mix of both - I want to compute a moving average, but with periodic boundaries. `rolling` sets `window_length - 1` elements to nan. However I want to calculate these like so:
running_mean_0 = xr.concat([ds[-15:], ds[:16]]).mean()
running_mean_1 = xr.concat([ds[-14:], ds[:17]]).mean()
and so on...
","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,307783090