在具有3D数据的自定义功能上应用滚动窗口操作?

时间:2020-01-01 08:19:00

标签: python pandas numpy scipy

我正在寻找如何将xarray滚动窗口应用于此功能。我确实进行了很多搜索,但我的努力仍然徒劳。.

我的数据分别是形状(时间,经度,纬度)(323x180x360)的xarray数据

def get_grps(s,axis=0, thresh=-1, Nmin=2):
"""
Nmin : int > 0
    Min number of consecutive values below threshold.
"""
s = pd.Series(s)
m = np.logical_and.reduce([s.shift(-i).le(thresh) for i in range(Nmin)])
if Nmin > 1:
    m = pd.Series(m, index=s.index).replace({False: np.NaN}).ffill(limit=Nmin-1).fillna(False)
else:
    m = pd.Series(m, index=s.index)

# Form consecutive groups
gps = m.ne(m.shift(1)).cumsum().where(m)

# Return None if no groups, else the aggregations
if gps.isnull().all():
    return [0]
else:
    d = s.groupby(gps).agg([list, sum, 'size']).reset_index(drop=True)

    data = len((d['sum']))  ### returning frequency

    data = np.array(data)
    return (data)

我尝试过

### create some dummy data and apply xarray rolling window

spi = xr.DataArray(dims=("time", "lon", "lat"), data=np.random.randn(324, 180, 360))
spi.rolling(time=59).reduce(get_grps)

但是我得到这个错误::

Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/Users/mada0007/anaconda3/envs/RESEARCH_QUESTION_TWO/lib/python3.7/site-packages/xarray. /core/rolling.py", line 287, in reduce
result = windows.reduce(func, dim=rolling_dim, **kwargs)
File "/Users/mada0007/anaconda3/envs/RESEARCH_QUESTION_TWO/lib/python3.7/site-packages/xarray/core/dataarray.py", line 2216, in reduce
var = self.variable.reduce(func, dim, axis, keep_attrs, keepdims, **kwargs)
File "/Users/mada0007/anaconda3/envs/RESEARCH_QUESTION_TWO/lib/python3.7/site-packages/xarray/core/variable.py", line 1529, in reduce
data = func(input_data, axis=axis, **kwargs)
File "<input>", line 7, in get_grps
File "/Users/mada0007/anaconda3/envs/RESEARCH_QUESTION_TWO/lib/python3.7/site-packages/pandas /core/series.py", line 314, in __init__
data = sanitize_array(data, index, dtype, copy, raise_cast_failure=True)
File "/Users/mada0007/anaconda3/envs/RESEARCH_QUESTION_TWO/lib/python3.7/site-packages/pandas/core/internals/construction.py", line 730, in sanitize_array
raise Exception("Data must be 1-dimensional")
Exception: Data must be 1-dimensional

如何修改函数以接受此3D数据并仅在时间范围内操作,以便可以使用xarray滚动窗口函数? 我曾尝试查看numpy均值函数以获取一些启发,但无济于事。

0 个答案:

没有答案