Python 仅使用冬季数据将xarray数据集重新采样到年度频率
我有一个数据集,它由几年来每日的x,y网格气象数据组成。我只对计算冬季数据的年平均值感兴趣,即不包括夏季数据 我认为我需要使用Python 仅使用冬季数据将xarray数据集重新采样到年度频率,python,python-xarray,Python,Python Xarray,我有一个数据集,它由几年来每日的x,y网格气象数据组成。我只对计算冬季数据的年平均值感兴趣,即不包括夏季数据 我认为我需要使用resample命令,例如使用AS-OCT的频率将时间序列重新采样到每年10月开始的冬季(北纬)的年频率 我无法解决的是如何指定我只希望使用从10月到4月/5月的数据,忽略6月、7月和8月 由于重采样函数适用于ndarray对象,因此我想出了一种非常不合适的方法来实现这一点: def winter(x,axis): # Only use data from 1 O
resample
命令,例如使用AS-OCT
的频率将时间序列重新采样到每年10月开始的冬季(北纬)的年频率
我无法解决的是如何指定我只希望使用从10月到4月/5月的数据,忽略6月、7月和8月
由于重采样函数适用于ndarray
对象,因此我想出了一种非常不合适的方法来实现这一点:
def winter(x,axis):
# Only use data from 1 October to end of April (day 211)
return np.sum(x[0:211,:,:],axis=0)
win_sum = all_data.resample('AS-OCT',how=winter,dim='TIME')
但我觉得应该有一个更优雅的解决方案。有什么想法吗?诀窍是为你想要排除的日期创建一个掩码。您可以通过使用groupby提取月份来实现这一点
将xarray作为xr导入
作为pd进口熊猫
将numpy作为np导入
#以每日分辨率创建一些示例数据,这些数据也具有空间维度
时间=局部放电日期范围('01-01-2000'、'01-01-2020')
空格=np.arange(0100)
data=np.random.rand(len(时间),len(空间))
da=xr.DataArray(数据,dims=['time','space'],coords={'time':time,'space':space})
#这就是诀窍——使用groupby提取每天的月数
month=da.groupby('time.month').apply(lambda x:x).month
#创建一个只有在冬季才适用的boolen Dataaray
冬季=(月份=10)
#遮罩冬季以外的值,并从10月份开始每年重新采样
da_winter_annmean=da.where(winter).重采样('AS-Oct','time'))
希望这对你有用。它稍微优雅一点,但groupby的把戏仍然让人感觉有点黑客味。也许还有更好的方法。Python没有重采样功能。如果您正在使用Pandas,请将标记添加到问题中。此问题是关于xarray数据集而不是Pandas数据帧的。您是否尝试过掩蔽(使用
。其中)然后重新采样?我想你会发现,这比尝试将掩蔽与重采样结合起来要容易得多。如果你有一个完全复制的例子,我可以用一个例子来回答。提取每个数据点的月份数的技巧对于任何类型的切片和过滤都非常有用。