Cómo tener grupos de barras apiladas con pitón (pandas)
Así es como se ve mi conjunto de datos:
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
Quiero tener un gráfico de barras apiladas para cada marco de datos, pero como tienen el mismo índice, me gustaría tener 2 barras apiladas por índice.
He intentado trazar ambos en los mismos ejes:
In [5]: ax = df1.plot(kind="bar", stacked=True)
In [5]: ax2 = df2.plot(kind="bar", stacked=True, ax = ax)
Pero se superpone.
Luego intenté concatenar los dos conjuntos de datos primero:
pd.concat(dict(df1 = df1, df2 = df2),axis = 1).plot(kind="bar", stacked=True)
pero aquí todo está apilado
Mi mejor intento es:
pd.concat(dict(df1 = df1, df2 = df2),axis = 0).plot(kind="bar", stacked=True)
Lo que da :
Esto es básicamente lo que quiero, excepto que quiero que la barra se ordene como
(df1, A) (df2, A) (df1, B) (df2, B), etc.
¡Supongo que hay un truco pero no puedo encontrarlo!
Después de la respuesta de @ bgschiller obtuve esto:
Que es casi lo que quiero. Me gustaría que el bar seaagrupados por índice, para tener algo visualmente claro.
Prima : Tener la etiqueta x no es redundante, algo como:
df1 df2 df1 df2
_______ _______ ...
A B
Gracias por ayudar.