为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

MM们 2021-09-28 17:16:25
在 xarray 中很容易获得每月的平均值:ds.groupby('time.month').mean(dim='time')每小时意味着:ds.groupby('time.hour').mean(dim='time')但我找不到一种有效的方法来获得每个月的每小时平均值……您可以创建自己的组合月份和小时的索引,但这非常慢(由于 dask. ..)我想要这样的东西:<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 23Data 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 等?
查看完整描述

1 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

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


查看完整回答
反对 回复 2021-09-28
  • 1 回答
  • 0 关注
  • 372 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号