2015-10-15 74 views
1

編輯2016-01-24:此行爲來自xarray中的錯誤(當時稱爲'xray')。請參閱下面的skc answerPython xarray:在時間序列的每個月內提取第一個和最後一個時間值

我有一個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

skc在這裏的答案絕對是現在正確的工作。但是,這種行爲絕對是一個錯誤 - 與這些問題的原因相同:https://github.com/xray/xray/issues/634 https://github.com/xray/xray/issues/367 看起來我需要優先考慮重構:)。 – shoyer

回答

2

由於'time'爲您提供的DataArray中,座標的時刻這是不可能預製棒重採樣直接在其上。可能的解決方法是創建(座標'time'仍然使用相同的鏈接)

隨着時間的新DataArray中的座標值作爲變量如果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 

這不是預期的行爲 - 請參閱以上Stephan的評論。

更新:Pull request 648已修復此問題,因此應該不再需要使用解決方法。

相關問題