2017-05-07 6 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 

私はその後、ピボットテーブルで、年間取得するために、すべての四半期のデータを追加する必要があります。私は2006年と2007年の間の年間成長またはちょうどデルタをカルクしたいが、私はテーブル内の総年次を参照する方法を知らない今、私にきれいにフォーマットテーブル

    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 

を与える

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] 

(2006 2007年)。

試しました。

しかし、私はそれが列として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

こんにちは、あなたはまだ問題を解決したので、上記のチェックマークをクリックしてjezraelの回答を「受け入れる」ことができます。それは究極のupvoteのようなものです。 –

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 
関連する問題