2017-09-05 6 views
2

私は、カテゴリデータを数え、毎月の高、中、低の割合をプロットしようとしています。件数月別カテゴリデータPandas

の下には、この画像のようになります。私は日付を持つデータフレームを持っていると私は私が得るためにこれを行うことができます知っている

------------------------------- 
|Date     | Score | 
|2016-1-02 00:00:00 | High | 
|2016-2-02 00:00:00 | Low | 
|2016-4-23 00:00:00 | Med | 
|2016-5-03 00:00:00 | High | 
|2016-6-02 00:00:00 | High | 
|2016-6-04 00:00:00 | Low | 
|2016-7-02 00:00:00 | Med | 
|2016-12-02 00:00:00 | High | 
------------------------------- 

の下に次のようになりますスコア

enter image description here

それぞれの分割は、私は月にこれを分割し、これらのそれぞれを数える方法を知りません。

df.groupby('Score').size() 

Score: 
High: 5 
Med: 15 
Low: 155 

+1

は最初df.Date.dt [( 'df.groupbyを月ごとについて、そのグループのために新しい列を作成して、列 – edyvedy13

+1

スコア私がプロットする方法を知りませんが、 .month、 'Score'])。size() ' –

+0

@coldspeed、私は' .plot.bar(stacked = True) 'を追加すると思います。しかし、私は正規化についてはわかりません^^ – Quickbeam2k1

答えて

5

まず割合をデータ

In [2056]: dff = (df.set_index('Date').groupby('Score') 
        .resample('MS').count().unstack('Score')) 

In [2057]: dff 
Out[2057]: 
      Score 
Score  High Low Med 
Date 
2016-01-01 1.0 NaN NaN 
2016-02-01 0.0 1.0 NaN 
2016-03-01 0.0 0.0 NaN 
2016-04-01 0.0 0.0 1.0 
2016-05-01 1.0 0.0 0.0 
2016-06-01 1.0 1.0 0.0 
2016-07-01 0.0 NaN 1.0 
2016-08-01 0.0 NaN NaN 
2016-09-01 0.0 NaN NaN 
2016-10-01 0.0 NaN NaN 
2016-11-01 0.0 NaN NaN 
2016-12-01 1.0 NaN NaN 

ノーマライズを準備いただき、ありがとうございます。

In [2058]: dff.div(dff.sum(1), axis=0).plot.bar(stacked=True) 
Out[2058]: <matplotlib.axes._subplots.AxesSubplot at 0x1386ca58> 

enter image description here

+0

( 'Score')のような列のMultiindexを削除するgroupby( 'Score') .resample( 'MS')。count()。unstack( 'Score')['Score']) 'dff = - タプルなしのより良いグラフ(スコア、高) – jezrael

関連する問題