python中的Pct_change缺少数据

时间:2016-07-25 20:34:34

标签: python numpy pandas

我有季度时间序列数据,我正在计算衍生品。问题是,原始数据在时间序列中存在差距。因此,如果我试图找到一个变量的季度变化百分比,有时候它不会意识到它计算的变化百分比远远超过四分之一。如果前面的数据点来自上一季度(不是后面的),我如何确保pct_change()仅被执行

与此相关,我希望计算年度变化百分比,这将不得不追溯到4个时期。我可以使用pct_change,让它回顾4个时段而不是1个,但是再次假设所有数据都存在。

处理这种情况的最佳方法是什么?

以下是我在数据完美时使用的代码:

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

我在下面列出了示例数据。该数据有两点需要关注:(1)有自动收报机的A',2006-09-30'之间的差距。和' 2007-12-31&#39 ;; (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 个答案:

答案 0 :(得分: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_changestack返回reset_index,以便在适当的数据框中恢复列。

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

enter image description here