我有以下数据框,正在尝试创建堆积的条形图 导入操作系统 从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
我不确定如何使用groupby函数并获取给定“竞赛”的每个“限定词”的“参与者”计数
编辑2:对于预选赛“最后”,所需的情节看起来像(老鼠是蓝色,狗是红色)。
对于限定词“第一”
有人可以建议我从这里继续吗?
答案 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)
输出: