【问题标题】:Count Categorical data monthly Pandas每月统计分类数据 Pandas
【发布时间】:2018-02-13 13:22:34
【问题描述】:

我正在尝试统计分类数据并绘制每个月的高、中、低百分比。

它应该如下图所示:

我有一个包含日期和分数的数据框,如下所示

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

谢谢

【问题讨论】:

  • 首先为该月创建一个新列,然后按月分组和得分列
  • 我不会绘图,但是df.groupby([df.Date.dt.month, 'Score']).size()
  • @coldspeed,我想只需添加一个.plot.bar(stacked=True)。但我不确定规范化^^
  • 我认为,您应该将分数转换为每月百分比
  • df.groupby([df.Date.dt.month, 'Score']).size() 给了我正确的数据,谢谢,但遗憾的是 .plot.bar(stacked=True) 没有给我那个条形图。相反,X 轴是 (1, High) (1, Med) (1, Low) (2, High) ... (12, Low) 数字是月份,Y 轴作为计数出现

标签: python pandas matplotlib dataframe seaborn


【解决方案1】:

首先准备数据

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>

【讨论】:

  • 也许你可以删除像dff = (df.set_index('Date').groupby('Score') .resample('MS').count().unstack('Score')['Score']) 这样的列中的Multiindex - 没有元组的更好的图表(分数,高)
猜你喜欢
  • 2019-09-07
  • 2017-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多