76

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」オブジェクトを連結できません」で失敗しました

どんな助けでも大歓迎です。

4

6 に答える 6

207

hist メソッドでbyキーワードを使用して、さらに簡単な方法を見つけました。

df['N'].hist(by=df['Letter'])

これは、グループ化されたデータをすばやくスキャンするための非常に便利な小さなショートカットです。

将来の訪問者にとって、この呼び出しの成果物は次のチャートです。 ここに画像の説明を入力

于 2013-10-26T06:59:47.310 に答える
9

最終的に得られる groupby データフレームには階層インデックスと 2 つの列 (文字と N) があるため、関数は失敗し.hist()ます。したがって、両方の列のヒストグラムを作成しようとすると、str エラーが発生します。

これは pandas プロット関数 (列ごとに 1 つのプロット) のデフォルトの動作であるため、データ フレームの形状を変更して各文字が列になるようにすると、必要なものが正確に得られます。

df.reset_index().pivot('index','Letter','N').hist()

これreset_index()は、現在のインデックスを という列に押し込むだけindexです。次に、データ フレームを取得し、それぞれpivotのすべての値を収集して列にします。結果のデータ フレームは 400 行 (欠損値を で埋めます) と 3 列 ( ) です。 次に、列ごとに 1 つのヒストグラムを生成し、必要に応じてプロットをフォーマットします。NLetterNaNA, B, Chist()

于 2013-10-25T14:33:29.247 に答える
8

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()
于 2013-10-25T12:17:21.073 に答える