21

シリーズ ヒストグラムをプロットする方法はありますが、ヒストグラム カウントを取得してさらに計算を行う関数はありますか?

これを行うためにnumpyの関数を使用し続け、必要に応じて結果をDataFrameまたはSeriesに変換します。pandas のオブジェクトを常に使用できると便利です。

4

4 に答える 4

16

シリーズが個別の場合は、次を使用できますvalue_counts

In [11]: s = pd.Series([1, 1, 2, 1, 2, 2, 3])

In [12]: s.value_counts()
Out[12]:
2    3
1    3
3    1
dtype: int64

s.hist()と本質的に同等であることがわかりますs.value_counts().plot()

それがフロートの場合、ひどいハッキーな解決策は groupby を使用することです:

s.groupby(lambda i: np.floor(2*s[i]) / 2).count()
于 2013-06-17T13:38:48.173 に答える
14

histシリーズのインデックスを使用しvalue_countsないため、シリーズを通常の配列のように扱い、直接使用することもできますnp.histogram。次に、結果からシリーズを構築します。

In [4]: s = Series(randn(100))

In [5]: counts, bins = np.histogram(s)

In [6]: Series(counts, index=bins[:-1])
Out[6]: 
-2.968575     1
-2.355032     4
-1.741488     5
-1.127944    26
-0.514401    23
 0.099143    23
 0.712686    12
 1.326230     5
 1.939773     0
 2.553317     1
dtype: int32

これは、後続の計算のためにヒストグラムの結果を整理するための非常に便利な方法です。

左端ではなく各ビンの中心で索引付けするには、 を使用できますbins[:-1] + np.diff(bins)/2

于 2013-06-17T15:02:54.617 に答える
6

必要なビンの数がわかっている場合は、 pandas のcut関数を使用できます。これは、 からアクセスできるようになりvalue_countsました。同じランダムな例を使用します。

s = pd.Series(np.random.randn(100))
s.value_counts(bins=5)

Out[55]: 
(-0.512, 0.311]     40
(0.311, 1.133]      25
(-1.335, -0.512]    14
(1.133, 1.956]      13
(-2.161, -1.335]     8
于 2016-12-19T11:12:06.687 に答える
0

関連する質問からのこの回答に基づいて、次のようにビンのエッジとヒストグラムの数を取得できます。

s = pd.Series(np.random.randn(100))
ax = s.hist()

for rect in dd.patches:
    ((x0, y0), (x1, y1)) = rect.get_bbox().get_points()
    print(((x0, y0), (x1, y1)))
于 2021-11-16T07:52:05.227 に答える