2016-07-19 15 views
1

私のDataframeには、数値の列が1つあります。私はどのグループの距離(範囲)がレコード(行)の最大数を持っているかを知りたい。シンプル行うパンダの数値のグループ化

df.distance.count_values()リターン:

74   1 
90   1 
94   1 
893  1 
889  1 
885  1 
877  1 
833  1 
122  1 
545  1 

私は何を達成したいことは、ヒストグラムからバケツのようなものがあるので、私はこのような出力を期待しています:

900   4 #all values < 900 and > 850 
100   3 
150   1 
550   1 
850   1 

私は」一つのアプローチを今まで考え出したことはありますが、最良で最も最適なのは、最大値と最小値を見つけ出し、ステップ(この場合は50)で除算し、すべての値をループチェックして適切なグループに割り当てることです。

他にも優れたアプローチがありますか?私は「this例に基づいて

df.groupby('bin')['val'].count() 
+3

バケットの範囲を 'pd.cut'に渡してそれらをグループ化することができます – EdChum

+0

バケットサイズ/スペーシングの基準は何ですか? – Alex

+0

@Alex特定の基準はありません。スペーシングは10または100でもかまいません。私は本当に大きな数の類似した値を持っており、今はそれを減らしたいだけです。 – sebap123

答えて

1
私はあなたの値列を想定し、以下を実行することをお勧めしたい

がラベル付けされ val

import numpy as np 
df['bin'] = df['val'].apply(lambda x: 50*np.floor(x/50)) 

結果は以下のとおりです。わかったことは、少なくとも私にとって最良の方法は次のようなことです:

import numpy as np 

step = 50 

#... 

max_val = df.distance.max() 
bins = list(range(0,int(np.ceil(max_val/step))*step+step,step)) 
clusters = pd.cut(df.distance,bins,labels=bins[1:]) 
関連する問題