Python 熊猫:如何用多个索引绘制一个图,其中只有一个索引值

Python 熊猫:如何用多个索引绘制一个图,其中只有一个索引值,python,pandas,matplotlib,Python,Pandas,Matplotlib,当上面的代码运行时,下面是图形的外观 在x轴上可以看到四分之一,y轴上只能看到一家公司(蓝色或绿色)的情况下,如何绘制图表 我对熊猫很陌生,我不能让它工作。请帮我理解。谢谢当您调用取消堆栈时,您有以下数据帧: import pandas as pd data = pd.DataFrame([ ('Q1','Blue',100), ('Q1','Green',300), ('Q2','Blue',200), ('Q2','Gree

当上面的代码运行时,下面是图形的外观

在x轴上可以看到四分之一,y轴上只能看到一家公司(蓝色或绿色)的情况下,如何绘制图表


我对熊猫很陌生,我不能让它工作。请帮我理解。谢谢

当您调用
取消堆栈
时,您有以下数据帧:

import pandas as pd

data = pd.DataFrame([
        ('Q1','Blue',100),
        ('Q1','Green',300),
        ('Q2','Blue',200),
        ('Q2','Green',350),
        ('Q3','Blue',300),
        ('Q3','Green',400),
        ('Q4','Blue',400),
        ('Q4','Green',450),
    ], 
    columns=['quarter', 'company', 'value']
)
data = data.set_index(['quarter', 'company']).value

data.unstack().plot(kind='bar', stacked=True)
因此,如果您只想为company
Blue
绘图,您可以像选择任何其他列一样选择它

data.unstack()['Blue'].plot(kind='bar')
创建此图形:


当您在设置索引后取消对数据的堆叠时,它将纯粹转换为分类值


您可以直接删除要绘制的类别

是的,使用多级索引很难做到这一点

如果可能的话,一个解决方案是构建稍微不同的数据帧

data.unstack()['Green'].plot(kind='bar',legend=True)
data.unstack()['Blue'].plot(kind='bar',legend=True)
或者,如果需要保持结构不变,则可以使用pandas函数重塑数据帧

import pandas as pd

data = pd.DataFrame([
        (100, 300),
        (200, 350),
        (300, 400),
        (400, 450)
    ], 
    index = ['Q1','Q2','Q3','Q4'],
    columns=['Blue', 'Green']
)

# Both Blue and Green Grouped bar
data.plot.bar()

# Just Blue
data.plot.bar(x='Blue')

#Just Green
data.plot.bar(x='Green')
import pandas as pd

data = pd.DataFrame([
        (100, 300),
        (200, 350),
        (300, 400),
        (400, 450)
    ], 
    index = ['Q1','Q2','Q3','Q4'],
    columns=['Blue', 'Green']
)

# Both Blue and Green Grouped bar
data.plot.bar()

# Just Blue
data.plot.bar(x='Blue')

#Just Green
data.plot.bar(x='Green')
import pandas as pd

data = pd.DataFrame([
        ('Q1','Blue',100),
        ('Q1','Green',300),
        ('Q2','Blue',200),
        ('Q2','Green',350),
        ('Q3','Blue',300),
        ('Q3','Green',400),
        ('Q4','Blue',400),
        ('Q4','Green',450),
    ], 
    columns=['quarter', 'company', 'value']
)
data = data.pivot(index='quarter', columns='company', values='value')

data.plot.bar()

# Just Blue
data.plot.bar(x='Blue')

#Just Green
data.plot.bar(x='Green')