2017-05-07 75 views
2

我有以下df我從股票的財務數據CSV中篩選出來。如何在熊貓數據透視表上進行數學計算?

ticker comp_name per_fisc_year per_fisc_qtr tot_revnu 
47 A AGILENT TECH 2006 4 4973.0 
48 A AGILENT TECH 2007 4 5420.0 
58 A AGILENT TECH 2006 1 1167.0 
59 A AGILENT TECH 2006 2 1239.0 
60 A AGILENT TECH 2006 3 1239.0 
61 A AGILENT TECH 2006 4 1328.0 
62 A AGILENT TECH 2007 1 1280.0 
63 A AGILENT TECH 2007 2 1320.0 
64 A AGILENT TECH 2007 3 1374.0 
65 A AGILENT TECH 2007 4 1446.0 

然後我需要添加所有的季度數據來獲得每年的數據透視表。

mean_rev_table = pd.pivot_table(zacks_df_filter_1, values=['tot_revnu'], 
           index=['comp_name'],columns=['per_fisc_year'], 
           aggfunc=np.mean) 

mean_rev_table[:5] 

,給了我一個很好的格式化表格

    tot_revnu 
per_fisc_year 2006 2007 
comp_name  
1800FLOWERS.COM 390.962667 290.26000 
21ST CENTURY IN 550.114800 349.28200 
24/7 KID DOC 0.857600 1.09520 
24/7 REAL MEDIA 80.097200 57.66300 
3COM CORP 409.215333 506.99238 

現在我想calc下2006年和2007年之間的年均增長率,或只是增量,但我不知道如何引用年度總表中(2006年和2007年)。

我試過了。

mean_rev_table['rev_growth']= mean_rev_df['2007'] - mean_rev_df['2006'] 

但我得到一個關鍵錯誤,因爲我認爲它只識別tot_revnu作爲列。我可能需要重新創建數據透視表,但不知道如何。由於

回答

2

您需要的列中刪除[]爲避免MultiIndex

mean_rev_table=zacks_df_filter_1.pivot_table( 
           values='tot_revnu', <-[] create MultiIndex 
           index='comp_name', 
           columns='per_fisc_year',aggfunc=np.mean) 

另一種解決方案是droplevel

mean_rev_table.columns = mean_rev_table.columns.droplevel(0) 
+0

哇這很簡單 - 非常感謝@jezrael。我投了票,但沒有足夠的聲望點upvote。 – TEKOrchestrator

+0

Hi Tek,你可以通過點擊上面的複選標記來「接受」jezrael的回答,因爲它解決了你的問題。這就像最終的讚揚。 –

2

,你也可以使用groupby() + unstack()

mean_rev_table = (zacks_df_filter_1.groupby(['comp_name','per_fisc_year'])['tot_revnu'] 
            .sum() 
            .unstack('per_fisc_year') 
            .rename_axis(None, 1)) 

結果:

In [46]: mean_rev_table 
Out[46]: 
       2006  2007 
comp_name 
AGILENT TECH 9946.0 10840.0