2016-11-06 1 views
2

값의 데이터 프레임이 두 개의 열로 그룹화 된 파일을 구성하며 집계의 수를 반환합니다. 지금은 그러나 나는 다음과 같은 오류 얻을, 최대 카운트 값을 기준으로 정렬 할 :팬다 수와 정렬

KeyError: 'count'

가 AGG 카운트 열을 기준으로 그룹을 보이는을 인덱스의 일종 그래서이 작업을 수행하는 방법을 잘하지, 난 초보자 해요 파이썬과 팬더에게.

FutureWarning: sort(columns=....) is deprecated, use sort_values(by=.....) .sort_values(['count'], ascending=False)

df = df[['STNAME','CTYNAME']].groupby(['STNAME'])['CTYNAME'] \ 
          .count() \ 
          .reset_index(name='count') \ 
          .sort_values(['count'], ascending=False) \ 
          .head(5) 

샘플 : 난 당신이 sort_valuessort 때문에 반환에 다음 reset_index, 매개 변수 ascending=False를 추가 할 필요가 있다고 생각

def answer_five(): 
    df = census_df#.set_index(['STNAME']) 
    df = df[df['SUMLEV'] == 50] 
    df = df[['STNAME','CTYNAME']].groupby(['STNAME']).agg(['count']).sort(['count']) 
    #df.set_index(['count']) 
    print(df.index) 
    # get sorted count max item 
    return df.head(5) 

답변

10

: 는 여기에 실제 코드, 당신은 자세한 내용이 필요하면 알려 주시기 바랍니다 :

df = pd.DataFrame({'STNAME':list('abscscbcdbcsscae'), 
        'CTYNAME':[4,5,6,5,6,2,3,4,5,6,4,5,4,3,6,5]}) 

print (df) 
    CTYNAME STNAME 
0   4  a 
1   5  b 
2   6  s 
3   5  c 
4   6  s 
5   2  c 
6   3  b 
7   4  c 
8   5  d 
9   6  b 
10  4  c 
11  5  s 
12  4  s 
13  3  c 
14  6  a 
15  5  e 

df = df[['STNAME','CTYNAME']].groupby(['STNAME'])['CTYNAME'] \ 
          .count() \ 
          .reset_index(name='count') \ 
          .sort_values(['count'], ascending=False) \ 
          .head(5) 

print (df) 
    STNAME count 
2  c  5 
5  s  4 
1  b  3 
0  a  2 
3  d  1 

그러나 당신이 Series.nlargest 필요 보인다

df = df[['STNAME','CTYNAME']].groupby(['STNAME'])['CTYNAME'].count().nlargest(5) 

또는 :

df = df[['STNAME','CTYNAME']].groupby(['STNAME'])['CTYNAME'].size().nlargest(5) 

The difference between size and count is:

size counts NaN values, count does not.

샘플 : 나는 당신의 DF의 모습을 정확히 모르는

df = pd.DataFrame({'STNAME':list('abscscbcdbcsscae'), 
        'CTYNAME':[4,5,6,5,6,2,3,4,5,6,4,5,4,3,6,5]}) 

print (df) 
    CTYNAME STNAME 
0   4  a 
1   5  b 
2   6  s 
3   5  c 
4   6  s 
5   2  c 
6   3  b 
7   4  c 
8   5  d 
9   6  b 
10  4  c 
11  5  s 
12  4  s 
13  3  c 
14  6  a 
15  5  e 

df = df[['STNAME','CTYNAME']].groupby(['STNAME'])['CTYNAME'] 
          .size() 
          .nlargest(5) 
          .reset_index(name='top5') 
print (df) 
    STNAME top5 
0  c  5 
1  s  4 
2  b  3 
3  a  2 
4  d  1 
+0

다양한 옵션을 설명해 주셔서 감사합니다. – Rubans

2

. 이 시리즈는 인덱스와 같은 범주의 이름을 사용합니다

series = df.count().sort_values(ascending=False) 
series.head() 

하는 것으로 : 당신은 그것의 개수에 의해 여러 종류의 주파수를 정렬해야한다면, DF에서 시리즈를 슬라이스하고 시리즈를 정렬하는 것이 더 쉽습니다 !