I have pandas dataframe like:
In [61]: df = DataFrame(np.random.rand(3,4), index=['art','mcf','mesa'], columns=['pol1','pol2','pol3','pol4']) In [62]: df Out[62]: pol1 pol2 pol3 pol4 art 0.661592 0.479202 0.700451 0.345085 mcf 0.235517 0.665981 0.778774 0.610344 mesa 0.838396 0.035648 0.424047 0.866920
and I want to create a line with the average value for the policies in the tests, and then build it.
Currently, the way I do this is:
df = df.T df['average'] = df.apply(average, axis=1) df = df.T df.plot(kind='bar')
Is there an elegant way to avoid double transposition?
I tried:
df.append(DataFrame(df.apply(average)).T) df.plot(kind='bar')
This will add the correct values, but will not update the index correctly, and the graph is corrupted.
Clarification. The result of the double transposition code is the following:
This is what I want. To show both benchmarks and average policies, not just average. I was just curious if I could do it better.
Note that the legend is usually confused. For correction:
ax = df.plot(kind='bar') ax.legend(patches, list(df.columns), loc='best')