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