2016-10-10 19 views
1

パンダのデータフレームからヒストグラムを作成したいと思います。私はパーセント値を保存する1列を持っています。私はvalue_counts()を使用しましたが、パーセント値が大きすぎます。 例:パンダの値のグループ化value_counts()

0.752  1 
0.769  2 
0.800  1 
0.823  1 
      ... 
80.365  1 
84.000  1 
84.615  1 
85.000  10 
85.714  1 

この値を同じレートでグループ化する必要があります。例えば5%。 ( - 4999、5000 - 0 9999、...)私はこの結果をしたい:

(例)

0 - 4,999  24 
5 - 9,999  12 
10 - 14,999  30 
... 
+1

ヒストグラムを作成するだけですか?なぜこれらの値に 'df.plot.hist()' –

+0

が足りないのですか?私はヒストグラムに10-20カラムを入れたいのですが、 – Parfi

+0

には 'bins '引数を渡すことができます:' ' df.plot.hist(bins = 20) 'は20列のヒストグラムを与えます。 –

答えて

1

あなたがpd.cut()法の結果により、グループのデータをすることができます:

In [38]: df 
Out[38]: 
    value count 
0 0.752  1 
1 11.769  3 
2 22.800  4 
3 33.823  5 
4 55.365  1 
5 84.000  1 
6 84.615  1 
7 85.000  10 
8 99.714  1 

In [39]: df.groupby(pd.cut(df.value, bins=np.linspace(0, 100, 21)))['count'].sum().fillna(0) 
Out[39]: 
value 
(0, 5]  1.0 
(5, 10]  0.0 
(10, 15]  3.0 
(15, 20]  0.0 
(20, 25]  4.0 
(25, 30]  0.0 
(30, 35]  5.0 
(35, 40]  0.0 
(40, 45]  0.0 
(45, 50]  0.0 
(50, 55]  0.0 
(55, 60]  1.0 
(60, 65]  0.0 
(65, 70]  0.0 
(70, 75]  0.0 
(75, 80]  0.0 
(80, 85]  12.0 
(85, 90]  0.0 
(90, 95]  0.0 
(95, 100]  1.0 
Name: count, dtype: float64 

代わりにあなたがNaNのドロップすることができます:

In [40]: df.groupby(pd.cut(df.value, bins=np.linspace(0, 100, 21)))['count'].sum().dropna() 
Out[40]: 
value 
(0, 5]  1.0 
(10, 15]  3.0 
(20, 25]  4.0 
(30, 35]  5.0 
(55, 60]  1.0 
(80, 85]  12.0 
(95, 100]  1.0 
Name: count, dtype: float64 

説明:

In [41]: pd.cut(df.value, bins=np.linspace(0, 100, 21)) 
Out[41]: 
0  (0, 5] 
1  (10, 15] 
2  (20, 25] 
3  (30, 35] 
4  (55, 60] 
5  (80, 85] 
6  (80, 85] 
7  (80, 85] 
8 (95, 100] 
Name: value, dtype: category 
Categories (20, object): [(0, 5] < (5, 10] < (10, 15] < (15, 20] ... (80, 85] < (85, 90] < (90, 95] < (95, 100]] 
+0

よく見えます。しかし、データフレームに.value_counts()を使用したとき、実際にはdtype:int64の列名がなくなりました。このチャートから新しいpdデータフレームを作成できますか? – Parfi

+0

@Parfi、確かに、このようにすることができます: 'df.col_name.value_counts()。reset_index()' – MaxU

+0

完璧ですが、それらの合計は間違っています。どうしてか分かりません。 (0,5)の結果は5ですが、間違っています。合計は高くなる可能性があります。 – Parfi

関連する問題