基于 Pandas 列的堆积条形图 - Python

Stacked Bar Chart based on Pandas Column - Python

我有一组数据可以用下面的代码复制:

import numpy as np

import pandas as pd

Neurons = np.array([
    20, 600, 300, 300, 200,  50,  20, 100,  50, 300, 100, 600, 20,20,
    600, 200, 200, 600, 600, 100, 200, 200, 300, 200, 100, 50, 100,
    600, 200, 300,  20,  20, 200, 300, 600, 600, 100, 300, 200, 300])

Option = np.array([
    'Put', 'Put', 'Put', 'Put', 'Put', 'Put', 'Put', 'Put',
    'Put', 'Put', 'Put', 'Put', 'Put', 'Put', 'Put', 'Put',
    'Call', 'Call', 'Call', 'Call', 'Call', 'Call', 'Call', 'Call',
    'Call', 'Call', 'Call', 'Call', 'Call', 'Call', 'Call', 'Call',
    'Call', 'Call', 'Call', 'Call', 'Call', 'Call', 'Call', 'Call'])

df = pd.DataFrame({"Neurons" : Neurons, "Option": Option})

“神经元”和“选项”列应该被视为绝对的。我想构建一个条形图,其中神经元在 x 轴上按升序显示,在 y 轴上按模型数量显示。

例如,有 6 个模型,其中有 20 个神经元,由四个 Put 和 2 个 Call 组成。因此,条形图应显示两个条形图,y 轴读数分别为 4 和 2,以两种不同的颜色显示在图例中。这应该对神经元的所有分类值重复。 (一共六个)

这只是数据的一小部分,在整个数据集中,选项列最多有六个分类选项。我想在同一张图表上为每个单独的条形图。

如有任何帮助,我们将不胜感激。提前致谢!

根据您的评论,试试这个:

df.groupby('Option').Neurons.value_counts().unstack(0).plot.bar()

在这段代码中,我们首先按选项分组,然后获取选项组中每个神经元值的值计数。然后,拆开堆叠,使一列用于 Option="Put",一列用于 Option="Call"。然后,使用这种格式的数据,您将获得所需的绘图。

输出:

我不确定这是否是解决此问题的最理想的解决方案,但经过深思熟虑后,我确实找到了解决方法。

ct = pd.crosstab(df.Option,df.Neurons)
ct.transpose().plot.bar(stacked=False)