Xarray 获取数据集中每个月的每小时均值(无需手动循环?)
Xarray get hourly means for each month in a dataset (without manual looping?)
在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 等?
您可以将堆叠的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) 操作来保留暗淡的名称,但它可以满足您的大部分需求。
在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 等?
您可以将堆叠的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) 操作来保留暗淡的名称,但它可以满足您的大部分需求。