2016-07-19 10 views
1

Dataframe에 숫자 값이있는 열이 있습니다. 거리를 말하십시오. 나는 어떤 그룹의 거리 (범위)가 가장 많은 수의 레코드 (행)인지 알아 내고 싶다. 간단한 이렇게팬더의 숫자 값 그룹화

: 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:])