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')
내림차순 정렬
df.sort_values(by='score', ascending=False)
여러 컬럼 기준 정렬 (tie-breaker)
df.sort_values(by=['score', 'age'], ascending=[False, True])
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')
→ 점수순 정렬과 함께 등수도 컬럼으로 표시
주의할 점
- sort_values()와 rank()는 기본적으로 원본을 수정하지 않음
→ 항상 df = df.sort_values(...) 식으로 재할당 필요 - rank()는 동점 처리 방식에 따라 분석 결과가 크게 달라질 수 있음
→ 상황에 맞는 method 지정이 중요함 - 정렬 기준이 여러 개일 경우, 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 |