使用xarray获取网格中每个点的时间总和

时间:2017-04-13 15:55:52

标签: python-xarray

我有一个三维网格数据集:lat,lon和time。

<xarray.Dataset>
Dimensions:      (lat: 185, lon: 155, time: 8760)
Coordinates:
  * lon          (lon) float64 -76.98 -76.92 -76.86 -76.8 -76.74 ...
  * lat          (lat) float64 33.55 33.6 33.66 33.71 33.76 33.82 ...
  * time         (time) datetime64[ns] 2010-01-01 2010-01 01T01:00:00.028800 ...
Data variables:
    u            (time, lat, lon) float64 nan nan nan nan nan nan nan nan ...
    v            (time, lat, lon) float64 nan nan nan nan nan nan nan nan ...
    u_err        (time, lat, lon) float64 nan nan nan nan nan nan nan nan ...
    v_err        (time, lat, lon) float64 nan nan nan nan nan nan nan nan ...

我希望得到所有你的意思和时间,我可以通过以下方式做到:

ds_seasonal = ds.groupby('time.season').mean('time')

但是,我只希望获得每个网格点的数据集的平均值,其中有50%的时间或更多数据存在。

在MATLAB中,我会将所有内容放入结构化数组中,它就像nans=sum(~isnan(u),3);一样简单,然后我会将其与4335或50%的时间维度进行比较。

我正在学习如何使用xarray进行计算。这对xarray有可能吗?

1 个答案:

答案 0 :(得分:1)

where是掩盖xarray中值的方法。您可以使用它来编写带groupby.apply()的自定义聚合函数,例如

def custom_mean(ds):
    missing_frac = result.isnull().mean('time')
    return result.mean('time').where(missing_frac < 0.5)

result = ds.groupby('time.season').apply(custom_mean)