繁体   English   中英

通过分组数据与大熊猫堆积条形图

[英]Stacked bar plot by grouped data with pandas

我们假设我有pandas数据帧,它有很多功能,我对两个感兴趣。 我将它们feature1feature2

feature1可以有三个可能的值。 feature2可以有两个可能的值。

我需要按feature1分组的feature1并按行数计算,每个值都包含feature2 (这样会有三个堆叠,每个堆叠有两个柱子)。

怎么做到这一点?

目前我有

import pandas as pd
df = pd.read_csv('data.csv')
df['feature1'][df['feature2'] == 0].value_counts().plot(kind='bar',label='0')
df['feature1'][df['feature2'] == 1].value_counts().plot(kind='bar',label='1')

但这不是我真正想要的,因为它不会叠加它们。

另外,我找到了另一种方法(使用pandas):

df.groupby(['feature1', 'feature2']).size().unstack().plot(kind='bar', stacked=True)

来源: 在熊猫中制作堆积条形图

我不知道如何在matplotlib(pandas默认绘图库)中执行此操作,但如果您愿意尝试使用不同的绘图库,则可以使用Bokeh轻松完成。

这是一个例子

import pandas as pd
from bokeh.charts import Bar, output_file, show
x = pd.DataFrame({"gender": ["m","f","m","f","m","f"],
                  "enrolments": [500,20,100,342,54,47],
                  "class": ["comp-sci", "comp-sci",
                            "psych", "psych",
                            "history", "history"]})

bar = Bar(x, values='enrolments', label='class', stack='gender',
         title="Number of students enrolled per class",
         legend='top_right',bar_width=1.0)
output_file("myPlot.html")
show(bar)

堆积条形图

size生成一个列,该列具有该分组的简单行数,它产生y轴的值。 unstack生成matplotlib创建堆积条形图所需的行和列信息。

基本上它需要

>>> s
one  a   1.0
     b   2.0
two  a   3.0
     b   4.0

并生产:

>>> s.unstack(level=-1)
     a   b
one  1.0  2.0
two  3.0  4.0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM