xarray:根据每月重采样平均值(不是气候学)计算每日异常
xarray: compute daily anomalies from monthly resampled average (not the climatology)
xarray 的 documentation 解释了如何计算每月 气候学 的异常。在这里,我试图做一些稍微不同的事情:从每日时间序列,我想计算本月平均值的每日异常(不是来自每月气候学)。
我设法使用 groupby 和手动创建的月戳(下面的代码)来做到这一点。有没有更好、更简单的方法来获得相同的结果?
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();
您可以明确地 resample 将每月 time-series 的手段转换为每天 time-series。示例:
monthly = da.resample(time='1MS').mean()
upsampled_monthly = monthly.resample(time='1D').ffill()
anomalies = da - upsampled_monthly
xarray 的 documentation 解释了如何计算每月 气候学 的异常。在这里,我试图做一些稍微不同的事情:从每日时间序列,我想计算本月平均值的每日异常(不是来自每月气候学)。
我设法使用 groupby 和手动创建的月戳(下面的代码)来做到这一点。有没有更好、更简单的方法来获得相同的结果?
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();
您可以明确地 resample 将每月 time-series 的手段转换为每天 time-series。示例:
monthly = da.resample(time='1MS').mean()
upsampled_monthly = monthly.resample(time='1D').ffill()
anomalies = da - upsampled_monthly