[Python] pandas - DataFrame/Series 에서 순위 구하는 함수 rank()

2021. 1. 14. 13:57·Programming/Python
목차
  1. 예제
반응형

데이터 분석을 처리하다보면 정렬을 하는 경우도 필요하고, 정렬에 대한 그룹별 순위를 구하는 것 또한 필요하다. 

그럴때 자주 사용되는 함수가 바로 rank() 함수이다. 

 

rank 함수는 아래와 같은 형식으로 사용한다. 

 

pd.Series.rank(method = 'average', ascending = True)

 

위와 같이 rank를 사용하는 경우, 두개의 중요한 옵션이 있다. 

1) 동점을 처리하는 방법 2) 오름차순/내림차순 유무 이다. 

 

순위를 구할 때 동점 처리하는 방법은 아래와 같다. 

  • method = 'average' : 동점 관측치일 때 그룹 내 평균 순위를 부여(default)
  • method = 'min' : 동점 관측치일 때 그룹 내 최소 순위 부여
  • method = 'max' : 동점 관측치일 때 그룹 내 최대 순위 부여
  • method = 'first' : 동점 관측치일 때 데이터 상에서 먼저 나타나는 관측치부터 순위 부여
  • method = 'dense' : 동점 관측치일 때 그룹 내 최소 순위를 부여하나, 순위가 1씩 증가함

출처 : R friend

순위를 오름차순/내림차순으로 구하는 방법은 아래와 같다. 

  • ascending = True : 오름차순으로 정렬(default)
  • ascending = False : 내림차순으로 정렬

예제

import numpy as np
import pandas as pd

df = pd.DataFrame({
    'name': ['kim', 'lee', 'park', 'choi', 'jung', 'gang', 'nam'],
    'score': [70, 95, 100, 95, 70, 90, 70]
}, columns=['name', 'score'])

df

>>>
name score
0 kim 70
1 lee 95
2 park 100
3 choi 95
4 jung 70
5 gang 90
6 nam 70

## 출처: https://rfriend.tistory.com/461 [R, Python 분석과 프로그래밍의 친구 (by R Friend)]
## 순위 구하기
df['rank_by_av'] = df['score'].rank() # method = 'average', ascending = True
df['rank_by_min_desc'] = df['score'].rank(method = 'min', ascending = False) # 동점이 나왔을 때 최소순의 부여, 내림차순

df
>>>
name	score	rank_by_av	rank_by_min_desc
0	kim	70	2.0	5.0
1	lee	95	5.5	2.0
2	park	100	7.0	1.0
3	choi	95	5.5	2.0
4	jung	70	2.0	5.0
5	gang	90	4.0	4.0
6	nam	70	2.0	5.0

그룹별로 순위를 구할 때에는 아래와 같이 작성해주면 된다.

df.groupby(column name).rank()

## 그룹별 순위 구하기
from itertools import chain, repeat

df2 = pd.DataFrame({'name': ['kim', 'lee', 'park', 'choi']*3,
                    'course': list(chain.from_iterable((repeat(course, 4)
                                                        for course in ['korean', 'english', 'math']))),
                    'score': [70, 95, 100, 95, 65, 80, 95, 90, 100, 85, 90, 90]
                   }, columns=['name', 'course', 'score'])


df2
>>>>

name	course	score
0	kim	korean	70
1	lee	korean	95
2	park	korean	100
3	choi	korean	95
4	kim	english	65
5	lee	english	80
6	park	english	95
7	choi	english	90
8	kim	math	100
9	lee	math	85
10	park	math	90
11	choi	math	90
df2['rank_by_min_per_course'] = df2.groupby('course')['score'].rank(method='min', ascending=False)

df2

>>>

name	course	score	rank_by_min_per_course
0	kim	korean	70	4.0
1	lee	korean	95	2.0
2	park	korean	100	1.0
3	choi	korean	95	2.0
4	kim	english	65	4.0
5	lee	english	80	3.0
6	park	english	95	1.0
7	choi	english	90	2.0
8	kim	math	100	1.0
9	lee	math	85	4.0
10	park	math	90	2.0
11	choi	math	90	2.0

 

참고 : 

rfriend.tistory.com/461

 

[Python pandas] DataFrame, Series에서 순위(rank)를 구하는 rank() 함수

이번 포스팅에서는 Python pandas의 DataFrame, Series 에서 특정 변수를 기준으로 순서를 구할 때 사용하는 rank() 함수를 소개하겠습니다. 순위(Rank)는 정렬(Sort)와 밀접한 관련이 있는데요, 참고로 Python

rfriend.tistory.com

 

반응형

'Programming > Python' 카테고리의 다른 글

[Python] Numpy Float(소수) 출력 표현 설정하기  (0) 2021.03.23
[Python] python 에서 이유를 알 수 없는 GPU 에러 정리(device-side assert triggered)  (0) 2021.02.04
[Python] 파이썬 파일 크기 사이즈 구하기 - os.path.getsize()  (0) 2021.01.12
[Python] 폴더 내 파일 리스트 가져오기 (os/glob)  (0) 2021.01.12
[Python] pytorch 모델 저장하기 - state_dict()  (0) 2021.01.06
  1. 예제
'Programming/Python' 카테고리의 다른 글
  • [Python] Numpy Float(소수) 출력 표현 설정하기
  • [Python] python 에서 이유를 알 수 없는 GPU 에러 정리(device-side assert triggered)
  • [Python] 파이썬 파일 크기 사이즈 구하기 - os.path.getsize()
  • [Python] 폴더 내 파일 리스트 가져오기 (os/glob)
자동화먹
자동화먹
많은 사람들에게 도움이 되는 생산적인 기록하기
자동화먹의 생산적인 기록많은 사람들에게 도움이 되는 생산적인 기록하기
    반응형
  • 자동화먹
    자동화먹의 생산적인 기록
    자동화먹
  • 전체
    오늘
    어제
    • 분류 전체보기 (144)
      • 생산성 & 자동화 툴 (30)
        • Notion (24)
        • Obsidian (0)
        • Make.com (1)
        • tips (5)
      • Programming (37)
        • Python (18)
        • Oracle (6)
        • Git (13)
      • AI Study (65)
        • DL_Basic (14)
        • ML_Basic (14)
        • NLP (21)
        • Marketing&Recommend (4)
        • chatGPT (0)
        • etc (12)
      • 주인장의 생각서랍 (10)
        • 생각정리 (4)
        • 독서기록 (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    LSTM
    노션
    딥러닝
    git commit
    머신러닝
    seq2seq
    자연어처리
    dl
    ML
    Github
    git
    cnn
    Python
    gcp
    GPT
    Transformer
    nlp
    파이토치로 시작하는 딥러닝 기초
    빅데이터
    Jupyter notebook
    데이터베이스
    pytorch
    빅데이터분석
    파이토치
    노션첫걸음
    기초
    python기초
    notion
    데이터분석
    Google Cloud Platform
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
자동화먹
[Python] pandas - DataFrame/Series 에서 순위 구하는 함수 rank()

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.