EDIT 2016-01-24:此行为是由xarray(当时称为'xray')中的错误引起的。见下面skc的回答
我有一个包含多年每日数据的xarray.DataArray
。我想计算时间序列中每个月数据的时间趋势。我可以得到分子,即每个月的数量变化,用resample
。假设arr
是我的xarray.DataArray
对象,时间坐标命名为'time'
:
data_first = arr.resample('1M', 'time' how='first')
data_last = arr.resample('1M', 'time' how='last')
然后data_last - data_first
给出该变量在当月的变化。
但是,这对time=arr.time
对象本身不起作用:'first'
和'last'
的kwarg值产生相同的值,即该月的最后一天。此外,我不能使用groupby
方法,因为当我想要时间序列中每个单独月份内的第一个和最后一个时间值时,使用time.month
将所有一月和二月组合在一起,等等。
是否有一个简单的方法来做到这一点在xarray?我想是的,但是我刚接触这个包,失败得很惨。
由于'time'
是您提供的DataArray中的坐标,因此目前不可能1直接对其进行重新采样。一个可能的解决方案是创建一个新的DataArray,将时间坐标值作为一个变量(仍然与相同的坐标'time'
链接)
如果arr
是你开始的DataArray我会建议这样做:
time = xray.DataArray(arr.time.values, coords=[arr.time.values], dims=['time'])
time_first = time.resample('1M', 'time', how='first')
time_last = time.resample('1M', 'time', how='last')
time_diff = time_last - time_first
1这不是预期的行为——参见上面Stephan的评论。
更新: Pull request 648已经修复了这个问题,所以应该不再需要使用变通方法。