使用groupby从Dataframe中堆积条形图

娜塔莎(Natasha)

我有以下数据框,我正在尝试创建堆积的条形图

import os
from pprint import pprint
import matplotlib.pyplot as plt
import pandas as 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

同样,预选赛“第一”的第二个情节

编辑:

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

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

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

编辑2:对于预选赛'最后'想要的情节看起来像(蓝色为老鼠,红色为狗)。

在此处输入图片说明

对于资格赛“第一”

在此处输入图片说明

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

广晃

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)

输出:

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章