2016-07-25 363 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