2017-06-08 36 views
0

投稿の延長について質問したいと思います。 "Plotting grouped data in same plot using Pandas"このような拡張は、 'groupby'という関数を複数回適用すると有効になります。具体的には、私はこの関数をプロットすることに興味があります。私は下の行を扱っていますが、これは関数プロットと互換性がありません。パンダのデータフレームgroupbyプロット(延長)

ライン:

f=s['Amount'].groupby([s['classe'],s['Month'],s['Year']]).sum() 

「金額およびグループのクラッセ」、 '月' と '年' の上に合計します。簡単にするために聞かせて「年」は常に同じ値である:「クラッセ」 の特定の種類の

  • プロット「金額VS月」:2017年

    は、今私は、次のプロットを作成したいと思います

私の試み:家賃は上記の 'クラッセ' の特定を表し

for label, df in s.groupby('classe').get_group('Rent'): 
     df.plot.scatter(x='Month', y='Amount', s=50) 
plt.show() 

。この試みはうまくいかず、「金額」の合計を考慮しません。私はそのような 'sum()'を関数plotと一緒に使うことができませんでした。明らかに、get_group('Rent')のないこれらの行は、クラスの数と同じくらい多くのプロットを与えてくれます。彼らはまだ '金額'を超えない。任意のアイデア/提案?

私はまた、次のコードで見ることができるようpivot_table使用しようとしました。私はすべて一緒にプロットすることができますが、私は単一のクラスをプロットすることはできません。ここに私の試み:

test=pd.pivot_table(s,index=['classe','Month','Year'],values=['Amount'],aggfunc=np.sum) 
test.unstack('classe').unstack('Year').plot(kind='area', figsize,[16,6],stacked=False,colormap='autumn').legend(loc=2,prop={'size':9}) 
plt.show() 

image

任意のアイデア/提案や良い例?私はこれらのpivot_tablegroupbyの機能から私が望むものをプロットする方法を理解したいと思います。

+0

編集キューがいっぱいになったので、私はすることができますそれを追加しませんが、[this](https://stackoverflow.com/questions/28293028/plotting-grouped-data-in-same-plot-using-pandas)のように見えるのは、クエストですあなたが言っているのは? – whrrgarbl

+0

私はそれを読んだが、それは私の場合ではなかった。 'groupby'は一度だけ使用されます:p_df.groupby( 'class')。私の場合は、複数の列でグループ化したい:「クラッセ」、「月」、「年」:( – fdrigo

+0

ガッチャ、私はちょうど私が編集を提案することができた誰かにそれを見て時間を節約するためにそれをリンクされましたちょうど今とてもうまくいけばより多くのパンダの知識を持つ誰かがそれを見ることができます!それはPythonのバージョン固有である場合は、[編集]後ろにバージョンタグ気軽に、以下の点を追加し、タグを更新する。 – whrrgarbl

答えて

0

現在のpivot_tableおよびunstackルーチンでループする各固有のクラッセによるフィルタリングを検討してください。以下は常に定義種で同じことを再現する必要がある正の数、ランダムなデータを示しています

import pandas as pd 
import numpy as np 
import random 
from matplotlib import pyplot as plt 

np.random.seed(176) 
random.seed(16) 

df = pd.DataFrame({'classe': random.sample(list('ABCDE')*50, k=15), 
        'Amount': np.random.sample(15)*100, 
        'Year': random.sample(list(range(2010,2018))*50, k=15), 
        'Month': random.sample(list(range(1,12))*50, k=15)}) 

for cls in df['classe'].unique(): 
    # AREA GRAPH 
    test = pd.pivot_table(df[df['classe']==cls], index=['classe', 'Month', 'Year'], values=['Amount'], aggfunc=np.sum) 
    test.unstack('classe').unstack('Year').plot(kind='area', figsize=(16,6), stacked=False, colormap='autumn').legend(loc=2,prop={'size':9}) 

    # SCATTER PLOT 
    test = pd.pivot_table(df[df['classe']==cls], index=['classe', 'Month', 'Year'], values=['Amount'], aggfunc=np.sum).reset_index()  
    test.plot(kind='scatter', x='Month',y='Amount', figsize=(16,6), stacked=False).legend(loc=2,prop={'size':9}) 
    plt.show() 

plt.clf() 
plt.close() 

エリアグラフ出力

Class A Graph Class B Graph Class C Graph Class D Graph Class E Graph

+0

感謝を。今、それは明らかです!最後の質問。私が「エリア」種類のプロットの代わりに散布図を取得したいのであれば、どのようにコードを変更できますか? plot.scatter(x = 'Month'、y = 'Amount'、figsize =(16,6)、stacked = False、colormap( 'x'))次のコードは、 "test.unstack( 'classe'私はエラー "KeyError:Month"を返します...アドバイスありがとうございました – fdrigo

+0

あなたは 'unstack'メソッドを必要としません(例:loc = 2、prop = {'size':9}) 。 'reset_index()'で 'pivot_table'を実行するだけで、階層レベル1ではなく、レベル0の列として* Month *を取得します。編集を参照してください。 do note * colormap *が削除されました。 – Parfait

+0

ありがとうございました。私は1つの散布図で得られるすべての情報を要約したいと思います。この反復メソッドを使用することで可能ですか?さまざまな色でより良い。さらに、あなたのコードを使って、各散布図に特定の文章を見たいのであれば、どうすればいいですか?多くのおかげで@パルフェット – fdrigo

関連する問題