2014-01-13 6 views
5

에서 컬럼의 가장 빈번한 데이터를 선택 :찾아 나는 다음과 같은 열이있는 dataframe이 팬더 DataFrame

file['DirViento'] 

Fecha 
2011-01-01 ENE 
2011-01-02 ENE 
2011-01-03 ENE 
2011-01-04 NNE 
2011-01-05 ENE 
2011-01-06 ENE 
2011-01-07 ENE 
2011-01-08 ENE 
2011-01-09 NNE 
2011-01-10 ENE 
2011-01-11 ENE 
2011-01-12 ENE 
2011-01-13 ESE 
2011-01-14 ENE 
2011-01-15 ENE 
... 
2011-12-17 ENE 
2011-12-18 ENE 
2011-12-19 ENE 
2011-12-20 ENE 
2011-12-21 ENE 
2011-12-22 ENE 
2011-12-23 ENE 
2011-12-24 ENE 
2011-12-25 ENE 
2011-12-26 ESE 
2011-12-27 ENE 
2011-12-28  NE 
2011-12-29 ENE 
2011-12-30 NNE 
2011-12-31 ENE 
Name: DirViento, Length: 290, dtype: object 

열은 올해 매달 바람의 방향을 매일 기록을 가지고 있습니다. 나는 매월 지배적 인 방향을 찾으려고 노력하고있다. 이를 위해, 데이터는 대부분 한 달 동안 반복 선택

file['DirViento'].groupby(lambda x: x.month).value_counts() 


1 ENE 23 
    NNE  6 
    E  1 
    ESE  1 
2 ENE 21 
    NNO  3 
    NNE  2 
    NE  1 
3 ENE 21 
    OSO  1 
    ESE  1 
    SSE  1 
4 ENE 21 
    NNE  2 
    ESE  1 
    NNO  1 
6 ENE 15 
    ESE  2 
    SSE  2 
    ONO  1 
    E  1 
7 ENE 22 
    ONO  1 
    OSO  1 
    NE  1 
    NNE  1 
    NNO  1 
8 ENE 23 
    NNE  5 
    NE  1 
    ONO  1 
    ESE  1 
9 ENE 17 
    NNE  7 
    ONO  2 
    NE  1 
    E  1 
    ESE  1 
    NNO  1 
10 ENE 16 
    NNE  2 
    ESE  2 
    NNO  2 
    ONO  1 
    NE  1 
    E  1 
11 ENE 13 
    NNE  2 
    ESE  2 
    ONO  1 
12 ENE 26 
    NNE  3 
    NE  1 
    ESE  1 
Length: 54, dtype: int64 

wind_moda=file['DirViento'].groupby(lambda x: x.month).agg(lambda x: stats.mode(x)[0][0]) 

 1 ENE  
    2 ENE  
    3 ENE 
    4 ENE 
    6 ENE 
    7 ENE  
    8 ENE  
    9 ENE 
    10 ENE 
    11 ENE 
    12 ENE 

같은 것을 얻을해야하지만 얻을 다음 코드 줄을 실행 다음 :

1   E 
2  ENE 
3  ENE 
4  ENE 
6   E 
7  ENE 
8  ENE 
9   E 
10   E 
11  ENE 
12  ENE 

12 개월 중 4 개월 동안 가장 빈번하게 발생하는 데이터를 고려하지 않은 이유는 무엇입니까?

내가 잘못 했나요?

매월 가장 일반적인 데이터를 얻으려는 아이디어가 있습니까?

+0

당신이 하나 개 이상의 방향이 동일 (최대)가있는 경우 해당 월에 계산 일어날 하시겠습니까? – DSM

답변

3

이것은 직설적이지는 않습니다.

가장 일반적인 값에 대한 통계 전문 용어는 "모드"입니다. Numpy는 내장 함수가 없지만 scipy는이를 지원합니다. 그래서처럼 가져옵니다

from scipy.stats.mstats import mode 

그것은 단순히 가장 일반적인 값, as you can read about in the docs을 돌아보다 더하지, 그래서 그냥 가장 일반적인 값을 얻을 수 mode를 사용하는 함수를 정의하기 편리합니다.

f = lambda x: mode(x, axis=None)[0] 

그리고 지금, 대신 value_counts(), apply(f)를 사용합니다. 다음은 예입니다

In [20]: DataFrame([1,1,2,2,2,3], index=[1,1,1,2,2,2]).groupby(level=0).apply(f) 
Out[20]: 
1 1.0 
2 2.0 
dtype: object 

업데이트 : Scipy의 mode 문자열 작동하지 않습니다. 문자열 데이터의 경우보다 일반적인 모드 함수를 정의해야합니다. This answer 트릭을해야합니다.

6

팬더 0.15.2는 DataFrame.mode() 방법을 갖는다. 내가 원했던 것처럼 이것을 찾는 누군가에게 유용 할 수 있습니다.

여기에 the docs입니다.

편집 : 값 :

DataFrame.mode()[0] 
관련 문제