2015-07-07 2 views
4

У меня есть два DataFrames (trail1 и trail2) со следующими столбцами: Жанр, Город и номер Продано. Теперь я хочу создать гистограмму обоих наборов данных для сопоставления по размеру Genre и Total Number Sold. Для каждого жанра я хочу два бара: один, представляющий след 1, а другой представляющий след 2.Как построить два DataFrame на одном графике для сравнения

Как я могу достичь этого с помощью Pandas?

Я пробовал следующий подход, который НЕ работал.

gf1 = df1.groupby(['Genre']) 
gf2 = df2.groupby(['Genre']) 
gf1Plot = gf1.sum().unstack().plot(kind='bar, stacked=False) 
gf2Plot = gf2.sum().unstack().plot(kind='bar, ax=gf1Plot, stacked=False) 

Я хочу, чтобы иметь возможность видеть, как trail1 набор данных по сравнению с trial2 данных для каждого жанра (например: Пряный, сладкий, кислый, и т.д ...)

Я также попытался с помощью CONCAT , но я не могу понять, как скопировать конкатенированный DataFrame на один и тот же граф, чтобы сравнить два ключа.

DF = pd.concat([df1,df2],keys=['trail1','trail2']) 

ответ

9

Я нашел решение по моему вопросу. Я приветствую других, чтобы опубликовать лучший подход.

Решение:

df1 = pd.DataFrame(myData1, columns=['Genre', 'City', 'Sold']) 
df2 = pd.DataFrame(myData2, columns=['Genre', 'City', 'Sold']) 

df1['Key'] = 'trail1' 
df2['Key'] = 'trail2' 

DF = pd.concat([df1,df2],keys=['trail1','trail2']) 

DFGroup = DF.groupby(['Genre','Key']) 

DFGPlot = DFGroup.sum().unstack('Key').plot(kind='bar') 

Вот пример полученного графика: enter image description here

0

Вы на правильном пути, но вы хотите merge, а не concat. Попробуйте следующее:

DF = pd.merge(df1,df2,on=['Genre','City']) 
DF.Groupby([['Genre','City']]).sum().unstack().plot(kind = 'bar') 
+0

Это решение не работает для меня. Мне нужно группировать только жанр или город; не оба. На моей гистограмме я хочу два бара для каждого жанра: один бар для представления набора данных 1 и другой строки, представляющей набор данных 2. – Zythyr

Смежные вопросы