python - Xarray 获取数据集中每个月的每小时平均值(无需手动循环?)

标签 python dask netcdf python-xarray

在 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) 操作保留暗淡名称的方法,但它可以完成您正在寻找的大部分功能。

关于python - Xarray 获取数据集中每个月的每小时平均值(无需手动循环?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53970885/

相关文章:

netcdf - 在批处理脚本中使用时强制 NCKS 尝试附加

python - 如何在 python 中设置 netCDF4 的 block 大小?

python - 更改或关闭 _FillValues

python - 安装pyhdf报错: hdf. h: No such file or directory

python - 为什么在cx_Oracle.SYSDBA模式下系统登录被拒绝

python - 从 dask 对象查看 dask 图

dask - 如何设置登录 dask 分布式 worker ?

python - 对不适合内存的集合进行 Daskcompute()

parquet - 使用从 parquet 文件创建的 dask 数据帧时内存使用过多

python - 如何使python可移植?