pandasデータフレーム内のグループ化されたデータからヒストグラムのブロックをプロットする方法を理解するためのガイダンスが必要です。ここに私の質問を説明する例を示します。
from pandas import DataFrame
import numpy as np
x = ['A']*300 + ['B']*400 + ['C']*300
y = np.random.randn(1000)
df = DataFrame({'Letter':x, 'N':y})
grouped = df.groupby('Letter')
私の無知で、私はこのコードコマンドを試しました:
df.groupby('Letter').hist()
「TypeError: 'str'および 'float'オブジェクトを連結できません」というエラーメッセージで失敗しました
どんな助けも大歓迎です。
私はロールバック中です。histメソッドでbyキーワードを使用して、さらに簡単な方法を見つけました。
df['N'].hist(by=df['Letter'])
これは、グループ化されたデータをすばやくスキャンするための非常に便利な小さなショートカットです!
将来の訪問者にとって、このコールの製品は次のチャートです。
最終的にはgroupbyデータフレームには階層インデックスと2つの列(LetterおよびN)があるため、関数は失敗します。したがって、.hist()
を実行すると、両方の列のヒストグラムを作成しようとするため、strエラーになります。
これは、pandasプロット関数(列ごとに1つのプロット)のデフォルトの動作です。したがって、各文字が列になるようにデータフレームを再形成すると、希望どおりになります。
_df.reset_index().pivot('index','Letter','N').hist()
_
reset_index()
は、現在のインデックスをindex
という列に押し込むだけです。次に、pivot
がデータフレームを取得し、各N
のすべての値Letter
を収集し、それらを列にします。結果のデータフレームは400行(欠損値をNaN
で埋める)と3列(_A, B, C
_)になります。 hist()
は列ごとに1つのヒストグラムを生成し、必要に応じてプロットのフォーマットを取得します。
1つの解決策は、グループ化された各データフレームでmatplotlibヒストグラムを直接使用することです。ループで取得したグループをループできます。各グループはデータフレームです。そして、それぞれにヒストグラムを作成できます。
from pandas import DataFrame
import numpy as np
x = ['A']*300 + ['B']*400 + ['C']*300
y = np.random.randn(1000)
df = DataFrame({'Letter':x, 'N':y})
grouped = df.groupby('Letter')
for group in grouped:
figure()
matplotlib.pyplot.hist(group[1].N)
show()
Pandasの最新バージョンでは、df.N.hist(by=df.Letter)
を実行できます
上記のソリューションと同様に、軸はサブプロットごとに異なります。まだ解決していません。