[Pandas] 정렬과 순위 매기기 – sort_values, rank

2025. 4. 24. 10:49·python/Pandas | Numpy
728x90

데이터 분석 중 "누가 제일 높지?", "상위 10개만 보여줘", "등수별로 나열하고 싶어" 같은 요청은 정말 많다.
이런 요청을 해결하려면 데이터를 정렬하고 순위를 매길 수 있어야 한다.

Pandas는 이를 위해 매우 직관적인 API를 제공한다.

 

먼저 사용 예제 df를 만들겠습니다.

import pandas as pd

df = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
    'score': [88, 92, 85, 70, 92],
    'age': [25, 30, 35, 40, 22]
})


sort_values() – 값 기준 정렬

기본 사용법

df.sort_values(by='score')

→ score 를 오름차순으로 정렬

내림차순 정렬

df.sort_values(by='score', ascending=False)

→ score 가 높은 순으로 정렬

여러 컬럼 기준 정렬 (tie-breaker)

df.sort_values(by=['score', 'age'], ascending=[False, True])

→ score 는 내림차순, 같은 점수면 나이가 적은 순으로 정렬


sort_index() – 인덱스 기준 정렬

df.set_index('name').sort_index()

→ 인덱스를 기준으로 알파벳 순 정렬 (주로 정렬된 출력용으로 사용)


rank() – 순위 매기기

기본 사용법

df['score_rank'] = df['score'].rank()

→ 낮은 점수 = 낮은 순위 (오름차순 기준)

 

점수 높은 순으로 1등부터

df['score_rank_desc'] = df['score'].rank(ascending=False)

 

같은 점수 처리 방식 지정

df['score_rank_min'] = df['score'].rank(method='min', ascending=False)

 

Method 설명
average 기본값, 같은 순위끼리 평균
min 같은 값은 가장 늦은 순위 부여
max 가장 높은 순위 부여
first 순서대로 부여
dense 중복 없이 순위 부여 (연속 순위)

1. 예제: 상위 3명만 추출

top3 = df.sort_values(by='score', ascending=False).head(3)

→ score 기준 상위 3명 추출 (타이브레이크 가능)

 

2. 예제: 등수 컬럼 추가하고 정렬

df['rank'] = df['score'].rank(ascending=False, method='min')
df = df.sort_values(by='rank')

→ 점수순 정렬과 함께 등수도 컬럼으로 표시

 

주의할 점

 

  1. sort_values()와 rank()는 기본적으로 원본을 수정하지 않음
    → 항상 df = df.sort_values(...) 식으로 재할당 필요
  2. rank()는 동점 처리 방식에 따라 분석 결과가 크게 달라질 수 있음
    → 상황에 맞는 method 지정이 중요함
  3. 정렬 기준이 여러 개일 경우, by=[...]에 리스트 형태로 넣기

 

데이터를 단순히 출력하는 데서 그치는 것이 아니라,
정렬하고, 등수를 매기고, 상위만 보여주고, 타이브레이크 처리까지 하는 것이 진짜 데이터 분석이다.

Pandas의 sort_values()와 rank()를 잘만 활용하면 복잡한 랭킹 로직도 손쉽게 구현할 수 있다.

 

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'python > Pandas | Numpy' 카테고리의 다른 글

[Pandas] 데이터 타입 확인 및 변환 – dtypes, astype()  (0) 2025.04.24
[Pandas] 결측치(NaN) 처리  (0) 2025.04.24
[Pandas] Boolean Indexing (조건 필터링)  (0) 2025.04.24
[Pandas] 인덱싱 – loc vs iloc  (0) 2025.04.24
[Pandas] Series와 DataFrame  (0) 2025.04.24
'python/Pandas | Numpy' 카테고리의 다른 글
  • [Pandas] 데이터 타입 확인 및 변환 – dtypes, astype()
  • [Pandas] 결측치(NaN) 처리
  • [Pandas] Boolean Indexing (조건 필터링)
  • [Pandas] 인덱싱 – loc vs iloc
Balang
Balang
음악 전공생의 개발일지
  • Balang
    Balang
    Balang
  • 전체
    오늘
    어제
  • 반응형
    • All Post (146)
      • python (45)
        • selenium (4)
        • algorithm (9)
        • Django (6)
        • Pandas | Numpy (22)
      • SQL (9)
      • Data Engineer (29)
      • Data Scientist (3)
      • Data Analysis (9)
      • Computer Science (35)
      • Why? (15)
      • 마음가짐 (1)
  • 인기 글

  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
Balang
[Pandas] 정렬과 순위 매기기 – sort_values, rank
상단으로

티스토리툴바