2017-09-05 201 views
2

我正在計數分類數據並繪製每個月高,中,低的百分比。每月計算分類數據熊貓

它應該看起來像下面這個圖片:

enter image description here

我有日期數據幀和評分,它看起來像下面這樣

------------------------------- 
|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 | 
------------------------------- 

我知道我能做到這一點得到每一個的分裂,但我不知道如何分裂這個月,然後計算每個這些

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

Score: 
High: 5 
Med: 15 
Low: 155 

謝謝

+1

首先由每月月供,那麼組創建新列和得分列 – edyvedy13

+1

我不知道如何繪製,但'df.groupby([df.Date.dt .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')。groupby('Score') .resample('MS')。count()。unstack('Score')['Score'])在列中移除Multiindex,如'dff =(df.set_index - 沒有元組的更好的圖(Score,High) – jezrael