2017-04-13 87 views
0

我有一个三维网格数据集:lat,lon和time。使用xarray为网格中的每个点获得时间总和

<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 ... 

我想通过时间来获得所有u和v的意思,我可以通过以下操作:

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

不过,我只想要得到的数据集的平均对于存在50%或更多时间数据的每个网格点。

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

我只是在学习如何使用xarray进行计算。这是可能的xarray?

回答

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) 
相关问题