我正在使用的xarray数据集是ERA-5数据,包含多年(1991-2020)的每日数据。我试图找出所有年份的第一天,当某个门槛被跨越时。我想将得到的30个DataArrays保存为一个DataArray或Dataset,并带有一个包含年份数值的坐标/维度年份。因此,结果将类似于如果我计算年平均值的结果,例如。
dsxr.groupby('time.year').mean()
在数据集“dsxr”中,变量“ends”包含值零,表示没有超过阈值,其他正值表示超过阈值。
如果我获取整个数据(包含所有年份),可以使用idxmin()方法在时间维度上检索一年中的第一天(DoY)。到目前为止,我一直在尝试将相同的逻辑应用于较小的数据集,每个数据集包含1年的数据。但是,我无法将(组合)结果保存为新的DataArray/Dataset。
下面是我到目前为止得到的代码。如何修改它,或使之更好,以便我得到一个新的DataArray/DataSet包含idxmin()的年度结果沿着维度“年”?
for year in range(1991, 2021):
yr = str(year)
hwt_da = dsxr.ends.sel(time=slice(yr,yr)) # Gets yearly subset of original dataset, dsxr, for the variable "ends"
dT = hwt_da.indexes['time'].strftime('%j').astype(int) # Formats cftime to DoY as integers
hwt_da['time'] = dT # Assigns DoY as time
hh = hwt_da.where(hwt_da>0).idxmin(dim='time').assign_coords({'year': year}) # Gets first DoY (idxmin()) when the threshold is above 0
if year == '1991':
da = hh.copy() # copy the first year's result
else:
xr.concat([da, hh], dim='year') # Concatenates the rest year's results
循环x1c 0d1x得到的结果
1条答案
按热度按时间uz75evzq1#
我犯了个愚蠢的错误。我没有将串联数组赋给变量da。下面是更新后的代码。我还发现xr.nested_合并()方法也工作得很好。