2017-01-13 183 views
1
 error Months Year 
0 15.198688  Jan 2011.0 
1 13.793969 Jan_Feb 2011.0 
2 15.171848 Jan_Mar 2011.0 
3 5.779007 Jan_Apr 2011.0 
4 1.615044 Jan_May 2011.0 
5 1.536096 Jan_Jun 2011.0 
6 1.159742 Jan_Jul 2011.0 
0 1.697396  Jan 2012.0 
1 5.149847 Jan_Feb 2012.0 
2 0.876639 Jan_Mar 2012.0 
3 1.865001 Jan_Apr 2012.0 
4 0.333077 Jan_May 2012.0 
5 2.056728 Jan_Jun 2012.0 
0 9.676028  Jan 2013.0 
1 3.919200 Jan_Feb 2013.0 
2 4.171534 Jan_Mar 2013.0 
3 2.318090 Jan_Apr 2013.0 
4 0.786901 Jan_May 2013.0 
5 0.936041 Jan_Jun 2013.0 
6 0.115029 Jan_Jul 2013.0 

上記のパンダデータフレームをプロットして、プロットに3行(3つの固有の年ごとに1つずつ)があるようにする方法はありますか? Y軸には「エラー」欄があり、X軸には月が表示されます。伝説は3年でなければなりません:2011年、2012年、2013年年数によるパンダのデータフレームのプロット

X軸の場合、月が 'Jan_Feb'の場合、ラベルは「Feb」と表示されます。月は「月」である場合、ラベルは「月」

私はdf.plotを()しようとしたと言うべきですが、それはあなたが最初にいくつかのデータクリーニングを行うことができます

+0

これは、 'groupby'で行うことができます。この[前の質問を参照してください](http://stackoverflow.com/questions/15465645/plotting-results-of-pandas-groupby) – Jakub

答えて

1

1つのプロットですべてをプロット - intyearsをキャストし、 monthsordered categoricalを月単位で正確にソートしてからpivotで再フォーマットし、必要に応じてNaNをある値で置き換えます。 fillnaによって0

df.Year = df.Year.astype(int) 
df.Months = df.Months.str[-3:].astype('category', 
             ordered=True, 
             categories=['Jan','Feb','Mar','Apr','May','Jun','Jul']) 

df = df.pivot(index='Months', columns='Year', values='error').fillna(0) 
print (df) 
Year   2011  2012  2013 
Months        
Jan  15.198688 1.697396 9.676028 
Feb  13.793969 5.149847 3.919200 
Mar  15.171848 0.876639 4.171534 
Apr  5.779007 1.865001 2.318090 
May  1.615044 0.333077 0.786901 
Jun  1.536096 2.056728 0.936041 
Jul  1.159742 0.000000 0.115029 

df.plot() 

graph

正しい順序付けのためのもう1つの可能な解決策はlistで注文ヶ月でreindex次のとおりです。このデータセットでは、数ヶ月から識別できることに留意

df.Year = df.Year.astype(int) 
df.Months = df.Months.str[-3:] 
df = df.pivot(index='Months', columns='Year', values='error') 
     .fillna(0) 
     .reindex(['Jan','Feb','Mar','Apr','May','Jun','Jul']) 

print (df) 
Year   2011  2012  2013 
Months        
Jan  15.198688 1.697396 9.676028 
Feb  13.793969 5.149847 3.919200 
Mar  15.171848 0.876639 4.171534 
Apr  5.779007 1.865001 2.318090 
May  1.615044 0.333077 0.786901 
Jun  1.536096 2.056728 0.936041 
Jul  1.159742 0.000000 0.115029 
0

インデックス、すなわち。 - [0..6]>[Jan..Jul]、所望のプロットは、以下のコードを生成しなければならない:

plt = df.pivot(values='error', columns='Year').plot() 

しかし、今x軸目盛りテキストは数値です。

plt.set_xticklabels(['Jan','Feb','Mar','Apr','May','Jun','Jul']) 
関連する問題