plot系列ヒストグラムを作成する方法はありますが、ヒストグラムカウントを取得して、さらに計算を行う関数はありますか?
私はこれを行うためにnumpyの関数を使い続け、これが必要なときに結果をDataFrameまたはSeriesに変換します。ずっとpandasオブジェクトと一緒にいるといいでしょう。
シリーズが離散的である場合は、 _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()
_
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
_
これは、後続の計算のためにヒストグラムの結果を整理するための非常に便利な方法です。
左端ではなく各ビンのcenterでインデックスを作成するには、bins[:-1] + np.diff(bins)/2
を使用できます。
必要なビンの数がわかっている場合は、パンダの 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