如何在同一图表上绘制两个DataFrame以进行比较

时间:2015-07-07 01:03:58

标签: python pandas matplotlib graph data-analysis

我有两个DataFrames(trail1和trail2),其中包含以下列:Genre,City和Number Sold。现在,我想创建两个数据集的条形图,以便并排比较流派与总销售数量。对于每个类型,我想要两个条形:一个代表轨迹1,另一个代表轨迹2.

如何使用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数据集与每种类型的试验2数据进行比较(例如:Spicy,Sweet,Sour等等)

我也尝试过使用concat,但我无法弄清楚如何在同一图表上绘制连接的DataFrame以比较两个键。

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

2 个答案:

答案 0 :(得分:10)

我找到了解决问题的方法。我欢迎其他人发布更好的方法。

<强>解决方案:

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

答案 1 :(得分:0)

你是一个正确的轨道,但你需要merge而不是concat。试试这个:

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