Python xarray:提取时间序列每个月内的第一个和最后一个时间值
Python xarray: Extract first and last time value within each month of a timeseries
编辑 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 已修复此问题,因此不再需要使用解决方法。
编辑 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 已修复此问题,因此不再需要使用解决方法。