使用不同的方法对 xarray 数据集进行重采样

Resampling xarray DataSet using different methods

我需要对 DataSet 重新采样,其中一个使用 mean(),另一个数据变量使用 sum()。我正在使用这种有点麻烦的方法:

import xarray as xr
import numpy as np

airtemps = xr.tutorial.load_dataset('air_temperature')
airtemps = airtemps.sel(time=slice('2013-01-01', '2013-12-31'))
airtemps['air'] = airtemps.air - 273.15
airtemps['data'] = (('time', 'lat', 'lon'), np.random.random(airtemps.air.shape))

dataSummed = airtemps.data.resample('M', dim='time', how='sum')
airtemps_month = airtemps.resample('M', dim='time', how='mean')
airtemps_month['data_summed'] = dataSummed

Can/should这有什么不同吗?

您想要 DataArrays 的集合,在 xarray 中称为 Dataset。因此,对每个 DataArray 单独重新采样并构建一个新的数据集。有很多方法可以做到这一点,这里是一个:

In [22]: ds = airtemps.air.resample('M', dim='time', how='mean').to_dataset()

In [23]: ds['data_summed'] = airtemps.data.resample('M', dim='time', how='sum')

In [24]: ds
Out[24]: 
<xarray.Dataset>
Dimensions:      (lat: 25, lon: 53, time: 12)
Coordinates:
  * lat          (lat) float32 75.0 72.5 70.0 67.5 65.0 62.5 60.0 57.5 55.0 ...
  * lon          (lon) float32 200.0 202.5 205.0 207.5 210.0 212.5 215.0 ...
  * time         (time) datetime64[ns] 2013-01-31 2013-02-28 2013-03-31 ...
Data variables:
    air          (time, lat, lon) float64 -28.68 -28.49 -28.48 -28.67 -28.99 ...
    data_summed  (time, lat, lon) float64 63.47 66.98 63.67 65.82 61.17 ...