2016-07-25 133 views
2

我有季度時間序列數據,我正在計算衍生工具。問題是,原始數據在時間序列上存在差距。因此,如果我試圖找到一個變量的季度變化百分比,有時候它不會意識到它正在計算一個比四分之一長的時間段的百分比變化。如何確保pct_change()僅在前一個數據點來自上一個季度時纔會完成(而不是後面的數據點)python缺少數據pct_change

與此相關的,我期望計算每年百分比變化,其中將不得不返回4個時期。我可以使用pct_change,只是讓它回顧4個週期而不是1個,但同樣,假設所有數據都存在。

處理這種情況的最佳方法是什麼?

下面是代碼,如果該數據是完美的,我會用:

dataRGQoQ = rawdata.groupby("ticker")['revenueusd'].pct_change() 

我已經包含下面的樣本數據。在這些數據中有兩點要重點關注:(1)帶有'A'的股票,'2006-09-30'和'2007-12-31'之間的差距; (2)與ABV之間的差距(這一次稍有不同,因爲它有日期而沒有數據)在'2012年12月31日'和'2013年12月31日'之間。

ticker,calendardate,revenueusd 
A,2005-12-31,5139000000 
A,2006-03-31,4817000000 
A,2006-06-30,4560000000 
A,2006-09-30,4325000000 
A,2007-12-31,5420000000 
A,2008-03-31,5533000000 
A,2008-06-30,5669000000 
A,2008-09-30,5739000000 
AA,2005-12-31,26159000000 
AA,2006-03-31,27242000000 
AA,2006-06-30,28438000000 
AA,2006-09-30,29503000000 
AA,2006-12-31,30379000000 
AA,2007-03-31,31338000000 
AA,2007-06-30,31445000000 
AA,2007-09-30,31201000000 
AA,2007-12-31,30748000000 
ABBV,2012-12-31,18380000000 
ABBV,2013-03-31, 
ABBV,2013-06-30,  
ABBV,2013-09-30,  
ABBV,2013-12-31,18790000000 
ABBV,2014-03-31,19024000000 
ABBV,2014-06-30,19258000000 
ABBV,2014-09-30,19619000000 
ABBV,2014-12-31,19960000000 
ABBV,2015-03-31,20437000000 

回答

1

我打算將['calendardate', 'ticker']放在索引中以便於擺動。然後unstack在列中獲取股票價值。

df.set_index(['calendardate', 'ticker']).unstack().head(10) 

enter image description here

與索引calendardate,我們可以使用resample('Q')插入所有宿舍。這將確保我們得到適當的NaN的失蹤季度。

df.set_index(['calendardate', 'ticker']).unstack().resample('Q').mean().head(10) 

分配這df1,然後我們可以做pct_changestackreset_index得到列回數據幀正確。

df1 = df.set_index(['calendardate', 'ticker']).unstack().resample('Q').mean() 
df1.pct_change().stack().reset_index() 

enter image description here

+0

感謝您的答覆!這有助於它的一部分。它填補了空白空間,儘管當它變成百分比時,ABBV'2012-12-31'百分比變成了-91%。不知道爲什麼會這樣。此外,它沒有解決在「2006-09-30」和「2007-12-31」之間有差距的股票「A」系列的第一個問題。對這兩件事有任何想法? – JohnSmith

+0

你可以刪除'limit = 4'。你的問題是,你想要它做什麼?你想爲這些地區提供'0%'嗎?我會落在離開他們的那一邊'NaN' – piRSquared

+0

是的讓他們成爲NaN – JohnSmith