Xarray получает почасовые средства за каждый месяц в наборе данных (без ручного зацикливания?) - PullRequest
0 голосов
/ 29 декабря 2018

В xarray легко получить месячные средства:

ds.groupby('time.month').mean(dim='time')

и почасовые средства:

ds.groupby('time.hour').mean(dim='time')

, ноЯ не могу найти эффективный способ получения почасовой оплаты за каждый месяц ... вы можете создать свой собственный индекс, объединяющий месяц и час, но он очень медленный (примерно в 12 раз дольше, чем группировка по часам из-за сумерек)..)

Я хочу что-то вроде этого:

<xarray.Dataset>
Dimensions:    (hour: 24, latitude: 721, longitude: 1440, month: 12)
Coordinates:
  * longitude  (longitude) float32 0.0 0.25 0.5 0.75 ... 359.25 359.5    359.75
  * latitude   (latitude) float32 90.0 89.75 89.5 89.25 ... -89.5 -89.75 -90.0
  * month      (month) int64 1 2 3 4 5 6 7 8 9 10 11 12
  * hour       (hour) int64 0 1 2 3 4 5 6 7 8 9 ... 15 16 17 18 19 20 21 22 23

Data variables:
    value       (hour, month, latitude, longitude) float32 dask.array<shape=(24, 12, 721, 1440), chunksize=(1, 1, 721, 1440)>

возможно ли это?

РЕДАКТИРОВАТЬ: Возможно установка значений на первый день каждого месяца, например 2014-01-01 01:00, 2014-02-01 02:00 и т. Д. Возможно?

1 Ответ

0 голосов
/ 30 декабря 2018

Вы можете назначить составной MultiIndex в качестве новой координаты, затем сгруппировать по этой координате:

da.coords['monthhour'] = (
    ('time', ),
    pd.MultiIndex.from_arrays([da.time.dt.month, da.time.dt.hour])

da.groupby('monthhour').mean(dim='time')

результирующая координата затем может быть не сложена (da.unstack('monthour')).Я не нашел способа сохранить тусклые имена с помощью операции groupby (MultiIndex), но он выполняет большую часть того, что вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...