Pandas: how to draw a bar plot with two categories and four series each?
<p>I have the following dataframe, where <code>pd.concat</code> has been used to group the columns:</p>

<pre><code>    a               b            
   C1  C2  C3  C4  C5  C6  C7  C8
0  15  37  17  10   8  11  19  86
1  39  84  11   5   5  13   9  11
2  10  20  30  51  74  62  56  58
3  88   2   1   3   9   6   0  17
4  17  17  32  24  91  45  63  48
</code></pre>

<p>Now I want to draw a bar plot where I only have two categories (<code>a</code> and <code>b</code>), and each category has four bars representing the average of each column. Columns C1 and C5 should have the same color, as should columns C2 and C6, and so forth. </p>

<p><strong>How can I do it with <em>df.plot.bar()?</em></strong></p>

<p>The plot should resemble the following image. Sorry for it being hand-drawn but it was very hard for me to find a relevant example:
<a href="http://i.stack.imgur.com/8I1Z6.jpg" rel="nofollow"><img src="http://i.stack.imgur.com/8I1Z6.jpg" alt="enter image description here"></a></p>

<p><strong>EDIT</strong></p>

<p>This is the header of my actual DataFrame:</p>

<pre><code>    C1  C2  C3  C4  C5  C6  C7  C8
0   34  34  34  34  6   40  13  26
1   19  19  19  19  5   27  12  15
2   100 100 100 100 0   0   0   0
3   0   0   0   0   0   0   0   0
4   100 100 100 100 0   0   0   0
</code></pre>

<p>You could simply perform <code>unstack</code> after calculating the <code>mean</code> of the <code>DF</code> to render the bar plot.</p>

<pre><code>import seaborn as sns
sns.set_style('white')

#color=0.75(grey)
df.mean().unstack().plot.bar(color=list('rbg')+['0.75'], rot=0, figsize=(8,8)) 
</code></pre>

<p><a href="http://i.stack.imgur.com/crBu3.png" rel="nofollow"><img src="http://i.stack.imgur.com/crBu3.png" alt="Image"></a></p>

<hr>

<p><strong>Data:</strong> (As per the edited post)</p>

<pre><code>df
</code></pre>

<p><a href="http://i.stack.imgur.com/DTy03.png" rel="nofollow"><img src="http://i.stack.imgur.com/DTy03.png" alt="Image"></a></p>

<p>Prepare the multiindex <code>DF</code> by creating an extra column by repeating the labels according to the selections of columns(Here, 4).</p>

<pre><code>df_multi_col = df.T.reset_index()
df_multi_col['labels'] = np.concatenate((np.repeat('A', 4), np.repeat('B', 4)))
df_multi_col.set_index(['labels', 'index'], inplace=True)
df_multi_col
</code></pre>

<p><a href="http://i.stack.imgur.com/fMbiK.png" rel="nofollow"><img src="http://i.stack.imgur.com/fMbiK.png" alt="Image"></a></p>

<pre><code>df_multi_col.mean(1).unstack().plot.bar(color=list('rbg')+['0.75'], rot=0, figsize=(6,6), width=2)
</code></pre>

<p><a href="http://i.stack.imgur.com/uGYVO.png" rel="nofollow"><img src="http://i.stack.imgur.com/uGYVO.png" alt="Image"></a></p>

python pandas matplotlib bar-chart categories