2012-11-14 48 views
0

我使用的是熊貓時間序列索引DatetimeIndex,我需要支持半年度頻率。基本的半年度頻率有1H=Jan-Jun2H=Jul-Dec,儘管有些系列的上個月可能是12月以外的一個月,例如1H=Dec-May2H=Jun-Nov使用內置熊貓頻率來模擬半年度頻率

我想我可以通過製作一個來自熊貓'DateOffset類的自定義類來獲得我想要的東西。但是,在我去那之前,我很好奇是否有一種方法可以簡單地使用內置頻率,例如6個月的頻率?我試圖做到這一點,但無法按照我想要的方式重新採樣。

例如:

import numpy as np 
import pandas as pd 
from datetime import datetime 

data = np.arange(12) 
s = pd.Series(data, pd.date_range(start=datetime(2007,1,31), periods=len(data), freq="M")) 
s.resample("6M") 

Out[11]: 
2007-01-31 0.0 
2007-07-31 3.5 
2008-01-31 9.0 
Freq: 6M 

通知大熊貓是如何聚集使用Windows從8 - - 2月,七月在這個基本情況下,我想要Jan-Jun和Jul-Dec。

回答

0

您可以使用兩個Series.resample()參數loffset=closed=的組合。

例如:

In [1]: import numpy as np, pandas as pd 

In [2]: data = np.arange(1, 13) 

In [3]: s = pd.Series(data, pd.date_range(start='1/31/2007', periods=len(data), freq='M')) 

In [4]: s.resample('6M', how='sum', closed='left', loffset='-1M') 
Out[4]: 
2007-06-30 21 
2007-12-31 57 

我以前loffset='-1M'告訴大熊貓聚集一個週期早於它的默認(讓我們感動到16月)。

我用closed='left'來使聚合包括樣本窗口的'左'端和排除'右'端(closed='right'是默認行爲)。

注:我使用how='sum'只是爲了確保它正在做我的想法。您可以使用任何適當的how's。

+0

謝謝,這是一個合理的答案。但我注意到一些問題。首先,如果我們將開始日期移至2月底,我們需要使loffset =' - 2M'。其次,如果我們分解而不是彙總(比如原始系列是「A」),那麼我們需要去掉loffset。這可能需要一個包裝函數來處理重採樣,如果我們想使這個通用(所以用戶不必擔心日期或者我們是上採樣還是下采樣)。如果沒有更清潔的解決方案,我很樂意接受答案。 – Abiel

+0

我同意你說2月份開始的數據需要'loffset = - '2M''。用戶只需瞭解他們的數據就足夠了解如何設置它們。我不確定我是否理解你的第二點。你說'說原來的系列是'A''。我不知道「A」是什麼。你能澄清嗎? – spencerlyon2

+0

我的意思是如果原始系列是年度頻率('freq =「A」') – Abiel