Wie man mit Python Cluster von gestapelten Stäben hat (Pandas)

So sieht mein Datensatz aus:

In [1]: df1=pd.DataFrame(np.random.rand(4,2),index=["A","B","C","D"],columns=["I","J"])

In [2]: df2=pd.DataFrame(np.random.rand(4,2),index=["A","B","C","D"],columns=["I","J"])

In [3]: df1
Out[3]: 
          I         J
A  0.675616  0.177597
B  0.675693  0.598682
C  0.631376  0.598966
D  0.229858  0.378817

In [4]: df2
Out[4]: 
          I         J
A  0.939620  0.984616
B  0.314818  0.456252
C  0.630907  0.656341
D  0.020994  0.538303

Ich möchte gestapelte Balkendiagramme für jeden Datenrahmen haben, aber da sie denselben Index haben, möchte ich 2 gestapelte Balken pro Index haben.

Ich habe versucht, beide auf den gleichen Achsen zu zeichnen:

In [5]: ax = df1.plot(kind="bar", stacked=True)

In [5]: ax2 = df2.plot(kind="bar", stacked=True, ax = ax)

Aber es überschneidet sich.

Dann habe ich zuerst versucht, die beiden Datensätze zusammenzufassen:

pd.concat(dict(df1 = df1, df2 = df2),axis = 1).plot(kind="bar", stacked=True)

aber hier ist alles gestapelt

Mein bester Versuch ist:

 pd.concat(dict(df1 = df1, df2 = df2),axis = 0).plot(kind="bar", stacked=True)

Welches gibt:

Dies ist im Grunde das, was ich will, außer dass ich die Bar als bestellt haben möchte

(df1, A) (df2, A) (df1, B) (df2, B) etc ...

Ich denke, es gibt einen Trick, aber ich kann ihn nicht finden!

Nach @ bgschillers Antwort bekam ich folgendes:

Welches ist fast das, was ich will. Ich hätte gerne die Bargruppiert nach Index, um etwas visuell klar zu haben.

Bonus : Da das x-label nicht redundant ist, so etwas wie:

df1 df2    df1 df2
_______    _______ ...
   A          B

Danke fürs Helfen.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage