【发布时间】:2019-09-23 15:42:00
【问题描述】:
我有 2 个十年的空间可变风数据,每 6 小时记录一次。我需要在每六个小时的时间间隔内平均 2 个十年的数据,所以我最终得到 365 * 4 个时间步长。数据为 netcdf 格式。
数据如下所示:
import xarray as xr
filename = 'V-01011999-01012019.nc'
ds = xr.open_dataset(filename)
print(ds)
<xarray.Dataset>
Dimensions: (lat: 8, lon: 7, time: 29221)
Coordinates:
* lat (lat) float32 -2.5 -5.0 -7.5 -10.0 -12.5 -15.0 -17.5 -20.0
* lon (lon) float32 130.0 132.5 135.0 137.5 140.0 142.5 145.0
* time (time) datetime64[ns] 1999-01-01 1999-01-01T06:00:00 .. 2019-01-01
Data variables:
vwnd (time, lat, lon) float32 ...
#remove feb 29 from records
ds = ds.sel(time=~((ds.time.dt.month == 2) & (ds.time.dt.day == 29)))
我已经能够按一年中的一天进行分组,以获得一年中一天的 2 个十年平均值。
tsavg = ds.groupby('time.dayofyear').mean('time')
print(tsavg)
<xarray.Dataset>
Dimensions: (dayofyear: 366, lat: 8, lon: 7)
Coordinates:
* lat (lat) float32 -2.5 -5.0 -7.5 -10.0 -12.5 -15.0 -17.5 -20.0
* lon (lon) float32 130.0 132.5 135.0 137.5 140.0 142.5 145.0
* dayofyear (dayofyear) int64 1 2 3 4 5 6 7 8 ... 360 361 362 363 364 365 366
Data variables:
vwnd (dayofyear, lat, lon) float32 -2.61605 -1.49012 ... -0.959997
我真正想要的是长度为 365 * 4(一天 4 x 6 小时间隔)的时间坐标,每个时间步长是该时间步长过去 20 年的平均值。 此外,由于某种原因 tsavg.dayofyear 长度仍然是 366,即使我删除了 2 月 29 日。 我无法申请或关注this post 的答案。 我已经广泛研究了groupby 资源并尝试了很多东西,但我无法弄清楚。我正在寻求一些编码方面的帮助。
【问题讨论】:
-
有方法
ds.groupby('time.hourofyear').mean('time')吗?如果没有,您可以编写一种方法,根据一年中的小时值对数据进行平均。
标签: python-xarray