xarray: вычислить ежедневные аномалии из среднемесячного пересчитанного значения (не для климатологии)

Документация xarray объясняет, как вычислить аномалии для ежемесячной климатологии. Здесь я пытаюсь сделать что-то немного другое: от ежедневных временных рядов я бы хотел вычислить дневную аномалию до среднего значения за месяц (не из ежемесячной климатологии).

Мне удалось сделать это с помощью группового и ручной ежемесячной печати (код ниже). Есть ли лучший, менее хакерский способ получить тот же результат?

import xarray as xr
import numpy as np
import pandas as pd

# Create a data array
t = pd.date_range('2001', '2003', freq='D')
da = xr.DataArray(np.arange(len(t)), coords={'time':t}, dims='time')

# Monthly time stamp for groupby
da.coords['stamp'] = ('time', [str(y) + '-' + str(m) for (y, m) in 
                               zip(da['time.year'].values, 
                                   da['time.month'].values)])

# Anomaly
da_ano = da.groupby('stamp') - da.groupby('stamp').mean()

da_ano.plot();

вывод сюжета

1 ответ

Решение

Вы можете явно пересчитать месячные временные ряды средств в ежедневные временные ряды. Пример:

monthly = da.resample(time='1MS').mean()
upsampled_monthly = monthly.resample(time='1D').ffill()
anomalies = da - upsampled_monthly
Другие вопросы по тегам