在多年的同一日期上,如何计算某个变量的均值?
我有一个xarray DataArray,其中包含从1970年到2023年、十月至次年三月之间的每日数据,我想计算每天变量的平均值(例如所有1月1日的平均值)。
我的数据如下:
<xarray.DataArray 'u' (valid_time: 9990, latitude: 321, longitude: 361)> Size: 5GB
dask.array<getitem, shape=(9990, 321, 361), dtype=float32, chunksize=(260, 161, 181), chunktype=numpy.ndarray>
Coordinates:
number int64 8B 0
pressure_level float64 8B 500.0
* latitude (latitude) float64 3kB 0.0 -0.25 -0.5 ... -79.5 -79.75 -80.0
* longitude (longitude) float64 3kB -100.0 -99.75 -99.5 ... -10.25 -10.0
* valid_time (valid_time) datetime64[ns] 80kB 1970-01-01 ... 2023-12-31
我也尝试了 groupby,但只能按月或按日对数据进行分组(即按月的所有1日,不管月份),两者都无法同时实现。我可以对这些分组中的每一个再进行重新分组,但我猜还有更优雅的解决方案。对这些分组重新分组的结果是这样的:
da.groupby('valid_time.month')[1].groupby('valid_time.day')[1]
这将得到所有1月1日的日子,理论上我也可以把它推广到所有日期。
我还尝试了类似于 这篇帖子 中的方法:
da.groupby(da.index.strftime('%m-%d')).mean()
但我得到的提示是:
AttributeError: 'DataArray' object has no attribute 'index'
期望的结果应该是形状为 (D, 纬度, 经度) 的数组,其中D 是从10月1日到3月31日之间的天数(不包含已移除的2 月29日)。
解决方案
可以通过传入一个维度列表来按多个维度进行分组。
da.groupby(['valid_time.month', 'valid_time.day']).mean()
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。