2017-09-05 162 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