使用groupby从Dataframe中堆积条形图

时间:2019-06-27 15:12:39

标签: python-3.x pandas group-by bar-chart

我有以下数据框,正在尝试创建堆积的条形图 导入操作系统 从pprint导入pprint 导入matplotlib.pyplot作为plt 将熊猫作为pd导入

def classify_data():
    race = ['race1','race1','race1','race1','race2','race2','race2', 'race2']
    qualifier = ['last','first','first','first','last','last','first','first']
    participant = ['rat','rat','cat','cat','rat','dog','dog','dog']
    df = pd.DataFrame(
        {'race':race,
         'qualifier':qualifier,
         'participant':participant

        }
    )
    pprint(df)
    df2 = df.groupby(['race','qualifier'])['race'].count().unstack('qualifier').fillna(0)
    df2[['first','last']].plot(kind='bar', stacked=True)
    plt.show()



classify_data()

我可以设法获得下图。但是,我想在数据框中创建两个图

一个包含以下数据的图,用于限定词'last'

Race1 rat 1
Race1 cat 0
Race1 dog 0 
Race2 rat 1
Race2 dog 1
Race2 cat 0

因此,第一个条形图将包含2个条形,每个条形用不同的颜色编码,以计算participant

同样,限定词“ first”的第二个图

编辑:

  Race1 rat 1
  Race1 cat 2
  Race1 dog 0 
  Race2 rat 0
  Race2 dog 2
  Race2 cat 0

从原始数据框开始,我必须创建以上两个数据框以创建堆叠图 plot

我不确定如何使用groupby函数并获取给定“竞赛”的每个“限定词”的“参与者”计数

编辑2:对于预选赛“最后”,所需的情节看起来像(老鼠是蓝色,狗是红色)。

enter image description here

对于限定词“第一”

enter image description here

有人可以建议我从这里继续吗?

1 个答案:

答案 0 :(得分:0)

IIUC,这就是您想要的:

df2 = (df.groupby(['race','qualifier','participant'])
         .size()
         .unstack(level=-1)
         .reset_index()
      )

fig,axes = plt.subplots(1,2,figsize=(12,6),sharey=True)
for ax,q in zip(axes.ravel(),['first','last']):
    tmp_df = df2[df2.qualifier.eq(q)]
    tmp_df.plot.bar(x='race', ax=ax, stacked=True)

输出:

enter image description here