web-dev-qa-db-ja.com

Numpy&Pandas:pandasヒストグラムプロットからヒストグラム値を返しますか?

私はパンダごとにヒストグラムをプロットできることを知っています:

_df4 = pd.DataFrame({'a': np.random.randn(1000) + 1})
df4['a'].hist()
_

enter image description here

しかし、どうすればそのようなプロットからヒストグラム数を取得できますか?

(from a Pandas Series )のヒストグラム値)

_count,division = np.histogram(df4['a'])
_

しかし、これを使用してdf.hist()の後にカウント値を取得すると、非常に冗長に感じます。パンダから直接周波数値を取得することは可能ですか?

14
cqcn1991

簡単な答えは次のとおりです。

_pd.cut(df4['a'], 10).value_counts().sort_index()
_

ドキュメント から:

_bins: integer, default 10
Number of histogram bins to be used
_

だからpd.cut(df4['a'], 10).value_counts()を見てください

値が_np.histogram_からのものと同じであることがわかります

16
piRSquared

これは、パンダのヒストグラムを計算するもう1つの方法です。より複雑ですが、_pd.cut_がプロットを破壊する奇妙な文字列ビンを回避するため、IMOの方が優れています。 .pipe()を使用するためのスタイルポイントも取得します。

_(df['a']
 .pipe(lambda s: pd.Series(np.histogram(s, range=(0, 100), bins=20)))
 .pipe(lambda s: pd.Series(s[0], index=s[1][:-1]))
)
_

その後、次のように、最後にさらに多くのものをパイプ処理できます。

_.pipe(lambda s: s/s.sum())
_

それはあなたに分布を与えるでしょう。

理想的には、_pd.hist_に賢明なdensityがあり、これを行うことができます。 Pandasには_density=False_キーワードがありますが、無意味です。 this one のように、説明を何千回も読んだことがありますが、実際に誰がを使用するのか理解できませんでした。ヒストグラムに分数が表示される時間の99.9%は、_density=True_が実際に計算するnp.sum(pdf * np.diff(bins))ではなく、「分布」だと思います。泣きたい気持ちにさせます。

0
Alex Spangher