我有一个 xarray 数据数组,其中包含从 0 到 34 的值。该数组有 3 个维度,时间(30 年的每日数据),然后是位置的纬度和经度。应该注意的是,对于某些经纬度位置,在整个时间维度上所有值均为零。
我想找出第一次非负出现的日期,我想 idxmin() 或 argmin() 方法应该可以解决这个问题。但是如果我沿着时间维度应用这些,我会得到从 idxmin() 方法返回的所有“NaT”,并且 argmin() 方法遇到全 nan 切片。
我怀疑这是因为位置没有非零值。如何通过忽略全零的位置来避免返回所有“NaT”?
我已经尝试过了,
da.idxmin(dim='time') # this works but it takes the zero values into account
da.where(da>0).idxmin(dim='time') # it returns all 'NaT' array since da.where(da>0) returns a array where some locations are all nan values
您可以使用以下方法来做到这一点:
da_min_index = da.where(da > 0).argmin(dim='time')
if np.isnan(da_min_index).all():
da_min_index = xr.DataArray(np.nan, dims='time')
可能你需要使用skipna选项:
da.where(da>0).idxmin(dim='time', skipna=True)