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
Я хочу иметь составные гистограммы для каждого кадра данных, но, поскольку они имеют одинаковый индекс, я бы хотел иметь по 2 сложенных столбца на каждый индекс.
Я пытался построить оба столбца по одним и тем же осям:
In [5]: ax = df1.plot(kind="bar", stacked=True)
In [5]: ax2 = df2.plot(kind="bar", stacked=True, ax = ax)
Но они перекрываются.
Затем я попытался сначала объединить два набора данных:
pd.concat(dict(df1 = df1, df2 = df2),axis = 1).plot(kind="bar", stacked=True)
но здесь все сложено
Моя лучшая попытка:
pd.concat(dict(df1 = df1, df2 = df2),axis = 0).plot(kind="bar", stacked=True)
Что дает:

Это в основном то, что я хочу, за исключением того, что я хочу, чтобы панель была упорядочена как
(df1,A) (df2,A) (df1,B) (df2,B) и т. д...
Я думаю, что есть трюк, но я не могу его найти!
После ответа @bgschiller я получил это:

Это почти то, что я хочу. Я бы хотел, чтобы панель была кластеризована по индексу, чтобы было что-то визуально понятное.
Бонус: чтобы метка x не была лишней, что-то вроде:
df1 df2 df1 df2
_______ _______ ...
A B
Подробнее здесь: https://stackoverflow.com/questions/227 ... acked-bars
Мобильная версия