2015-12-11 10 views
7

私は、年、殺菌剤、使用量、パンダDataFrameの無関係な列を含む殺菌剤使用に関するデータを使用しています。それは多少のようになります。私はそれから何をしたいです複数の値をグループ化し、結果をプロットする

Year, State,  Fungicide, Value 
2011, California, A,   12879 
2011, California, B,   29572 
2011, Florida, A,   8645 
2011, Florida, B,   19573 
2009, California, A,   8764 
2009, California, B,   98643, 
... 

は、ラインが(別の色で)、個々の殺菌剤のためにプロットして、時間をかけて使用された全殺菌剤の一つのプロットです。

Year, Fungicide, Value 
... 
2009, A,  128635 
     B,  104765 
2011, A,  154829 
     B,  129865 

は、今私はプロットする必要があります:

apple_fplot = df.groupby(['Year','Fungicide'])['Value'].sum() 

これは、私のようなものを私はプロットする値を与える:私は、毎年使用される各殺菌剤の総量を取得するために.groupby使用しましたそれ各殺菌剤(A、Bは、...)時間をかけて価値の単一プロット上の別の行

になるようにすると、すべてを分離せずにこれを行う方法はありますか?私の無知を許して、私はPythonには新しく、まだそれに精通しています。線に沿って

+0

あなたは単に殺菌剤と同様にグループ化できませんか? –

答えて

5

についてはこちらを参照してください。 :

あなたが行うことができます

enter image description here

+0

ありがとう、それは本当にうまく動作します。余談として;このコードを修正して、各行のプロットを作成することはできますか?データが不明瞭にならずに1つのプロットに表示する線が多すぎることが私には発生します。 (私がそれを示すならば、図の伝説はプロットの半分をカバーしていることは言うまでもない)。 私はunstacked groupby forループを実行しようとしましたが、そのループは機能しないようです。 –

+0

もう一度おねがいしますが、問題は、1つのプロットでサブプロットとしてプロットするときにプロットする線がたくさんあることです。それは完全に判読不能になるまで垂直に押しつぶされる。 理想的には、私はそれぞれの線を別々のプロットとしてプロットし、別々のファイルパスに保存します。 [コラム] .PLOT afplot; plt.figure(I):afplotで 'afplot = apple_fplot.unstack( 'ドメインカテゴリ')iに対する 、コラム: は、私はforループを行うにしようとしていたこれを行うには ValueError:アンパックする値が多すぎます()ValueError:アンパックする値が多すぎます()ValueError:アンパックする値が多すぎます –

1

何か:、(例えば、「A」又は「B」キーを割り当て、各群を反復しますGROUPBYオブジェクトに対してループの列の値を用いて

df_grouped = df.groupby('Fungicide') 
for key, group in df_grouped: 
    group.groupby('Year')['Value'].sum().plot(ax=ax,label=key) 

それグループごとに)、グループごとにデータフレームが作成されました。

あなたはsubplotsについては

apple_fplot = df.groupby(['Year','Fungicide'])['Value'].sum() 
plot_df = apple_fplot.unstack('Fungicide').loc[:, 'Value'] 
plot_df.index = pd.PeriodIndex(plot_df.index.tolist(), freq='A') 
plot_df.plot() 

enter image description here 、ちょうどそれぞれのkeywordTrueに設定することができ、適切にlegendxticksを印刷し、クリーンソリューションについては、例えば

http://pandas.pydata.org/pandas-docs/stable/groupby.html#iterating-through-groups

5

import matplotlib 
matplotlib.style.use('ggplot') 
import matplotlib.pyplot as plt 

plt.figure() 
df.groupby(['Year','Fungicide']).sum().unstack().plot() 

enter image description here

データ

Year  State Fungicide Value 
0 2011 California   A 12879 
1 2011 California   B 29572 
2 2011  Florida   A 8645 
3 2011  Florida   B 19573 
4 2009 California   A 8764 
5 2009 California   B 98643 
取得する
plot_df.plot(subplots=True) 
関連する問題