9

次のようなパンダデータフレームがあります。

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

ベンチマーク全体のポリシーの平均を含む行を生成し、それをプロットしたいと考えています。

現在、私がこれを行う方法は次のとおりです。

df = df.T
df['average'] = df.apply(average, axis=1)
df = df.T
df.plot(kind='bar')

二重転置を回避するエレガントな方法はありますか?

私は試した:

df.append(DataFrame(df.apply(average)).T)
df.plot(kind='bar')

これにより正しい値が追加されますが、インデックスが適切に更新されず、グラフがめちゃくちゃになります。

明確化。二重転置を使用したコードの結果は次のとおりここに画像の説明を入力 です。これが私の望みです。ポリシーの平均だけでなく、ベンチマークと平均の両方を表示する。もっとうまくできるかどうか、ただ興味がありました。

凡例は通常めちゃくちゃであることに注意してください。修正するには:

ax = df.plot(kind='bar')
ax.legend(patches, list(df.columns), loc='best')
4

1 に答える 1

14

meanand のインスタンス メソッドを使用するだけでDataFrame、結果をプロットできます。転置の必要はありません。

In [14]: df.mean()
Out[14]: 
pol1    0.578502
pol2    0.393610
pol3    0.634424
pol4    0.607450

In [15]: df.mean().plot(kind='bar')
Out[15]: <matplotlib.axes.AxesSubplot at 0x4a327d0>

ポリシー.png

アップデート

すべての列のバーと平均をプロットしたい場合は、平均を次のように計算できますappend

In [95]: average = df.mean()

In [96]: average.name = 'average'

In [97]: df = df.append(average)

In [98]: df
Out[98]: 
             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
average  0.578502  0.393610  0.634424  0.607450

In [99]: df.plot(kind='bar')
Out[99]: <matplotlib.axes.AxesSubplot at 0x52f4390>

2番目のプロット

レイアウトがサブプロットに収まらない場合はtight_layout、matplotlib パラメーターが調整されます。

于 2012-12-15T09:36:15.513 に答える