Конечно - вот короткий пример использования resample
для этого. Сначала мы создадим DataArray, который имеет структуру, аналогичную вашей.
import numpy as np
import pandas as pd
import xarray as xr
ntimes = 24000
time = np.arange(ntimes)
times = xr.DataArray(pd.date_range('2000', periods=ntimes, freq='H'))
xtime = xr.DataArray(times, dims=['time'], coords=[time], name='XTIME')
da = xr.DataArray(np.random.random(ntimes), dims=['time'], coords=[time], name='T2')
da['XTIME'] = xtime
Здесь da
индексируется измерением с именем 'time'
с целочисленной координатой. У этого также есть координата даты и времени, названная 'XTIME'
:
<xarray.DataArray 'T2' (time: 24000)>
array([0.285948, 0.046776, 0.0814 , ..., 0.47595 , 0.241202, 0.453325])
Coordinates:
* time (time) int64 0 1 2 3 4 5 6 ... 23994 23995 23996 23997 23998 23999
XTIME (time) datetime64[ns] 1999-01-01 ... 2001-09-26T23:00:00
Чтобы использовать resample
, нам нужно сделать 'XTIME'
координату измерения в массиве данных вместо 'time'
. Полезный метод для этого: swap_dims
:
result = da.swap_dims({'time': 'XTIME'}).resample(XTIME='D').mean()
result
тогда выглядит так:
<xarray.DataArray 'T2' (XTIME: 1000)>
array([0.487798, 0.422622, 0.497371, ..., 0.487836, 0.500065, 0.482849])
Coordinates:
* XTIME (XTIME) datetime64[ns] 1999-01-01 1999-01-02 ... 2001-09-26
Тогда, если я правильно понимаю вещи, разделение вещей на "водные годы" - это просто вопрос поднабора result
, например ::
water_year_2000 = result.sel(XTIME=slice('1999-10-01', '2000-09-30'))