Python xarray:在时间序列的每个月内提取第一个和最后一个时间值

时间:2015-10-15 21:07:13

标签: python datetime time-series python-xarray

编辑2016-01-24:此行为来自xarray中的错误(当时称为'xray')。请参阅下面的skc answer

我有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将所有Januaries组合在一起,将所有Februaries组合在一起等等。在时间序列中的一个月。

在xarray中有一种简单的方法吗?我怀疑是的,但我是新手,并且失败了。

1 个答案:

答案 0 :(得分:2)

由于'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修复了此问题,因此不再需要使用解决方法。