web-dev-qa-db-fra.com

Pandas Tracer avec Multi-Index

Après avoir effectué une groupby.sum() sur un DataFrame, je ne parviens pas à créer le tracé souhaité.

grouped dataframe with multi-index

Comment créer une sous-parcelle (kind='bar') pour chaque Code, où l’axe des x est le Month et les barres sont ColA et ColB?

54
Reustonium

J'ai trouvé que la méthode unstack (level) fonctionnait parfaitement, ce qui présente l'avantage supplémentaire de ne pas nécessiter une connaissance a priori du nombre de codes.

df.unstack(level=0).plot(kind='bar', subplots=True)
83
Reustonium

Utilisation du DataFrame suivant ...

DataFrame

# using pandas version 0.14.1
from pandas import DataFrame
import pandas as pd
import matplotlib.pyplot as plt

data = {'ColB': {('A', 4): 3.0,
('C', 2): 0.0,
('B', 4): 51.0,
('B', 1): 0.0,
('C', 3): 0.0,
('B', 2): 7.0,
('Code', 'Month'): '',
('A', 3): 5.0,
('C', 1): 0.0,
('C', 4): 0.0,
('B', 3): 12.0},
'ColA': {('A', 4): 66.0,
('C', 2): 5.0,
('B', 4): 125.0,
('B', 1): 5.0,
('C', 3): 41.0,
('B', 2): 52.0,
('Code', 'Month'): '',
('A', 3): 22.0,
('C', 1): 14.0,
('C', 4): 51.0,
('B', 3): 122.0}}

df = DataFrame(data)

... vous pouvez tracer les éléments suivants (à l'aide d'une section transversale):

f, a = plt.subplots(3,1)
df.xs('A').plot(kind='bar',ax=a[0])
df.xs('B').plot(kind='bar',ax=a[1])
df.xs('C').plot(kind='bar',ax=a[2])

enter image description here

Un pour A, un pour B et un pour C, axe des abscisses: "Mois", les barres sont ColA et ColB. Peut-être que c'est ce que vous recherchez.

15
segmentationfault