반응형
Pandas 정렬 고급편: 다중 조건 정렬과 GroupBy 후 정렬 완전 정복
Pandas는 데이터 분석에서 가장 널리 사용되는 도구입니다. 그만큼 "정렬" 또한 강력하고 유연한 기능을 제공합니다.
특히 실무에서는 하나의 조건만이 아니라, 여러 조건으로 정렬하거나 groupby로 묶은 후 정렬해야 하는 경우가 매우 많습니다.
이번 글에서는 Pandas의 다중 조건 정렬과 groupby 후 정렬을 예제 중심으로 완벽하게 설명합니다.
✅ 1. 다중 조건 정렬 (sort_values + by 리스트)
Pandas에서 여러 조건으로 정렬하려면 sort_values()의 by에 리스트 형태로 컬럼을 넣어주면 됩니다.
📌 예제 데이터
import pandas as pd
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Alice', 'Bob', 'Alice'],
'score': [85, 90, 80, 70, 95],
'age': [25, 30, 22, 30, 23]
})
📌 이름 오름차순 → 점수 내림차순 정렬
sorted_df = df.sort_values(by=['name', 'score'], ascending=[True, False])
print(sorted_df)
결과:
name score age
4 Alice 95 23
0 Alice 85 25
2 Alice 80 22
1 Bob 90 30
3 Bob 70 30
ascending=[True, False]로 각각 정렬 방향을 따로 지정 가능!
✅ 2. inplace 정렬과 ignore_index
df.sort_values(by=['name', 'score'], ascending=[True, False], inplace=True, ignore_index=True)
- inplace=True: 원본을 직접 수정
- ignore_index=True: 기존 인덱스를 리셋하여 0부터 재지정
실무에서는 ignore_index=True를 자주 사용해요.
인덱스가 엉킬 일 없이 깔끔하게 정렬 결과를 사용할 수 있기 때문이죠.
✅ 3. GroupBy 후 정렬 — 실무에서 자주 등장
📌 그룹별 평균 점수 계산
grouped = df.groupby('name')['score'].mean().reset_index()
print(grouped)
결과:
name score
0 Alice 86.67
1 Bob 80.00
📌 그룹 결과를 평균 점수 기준으로 내림차순 정렬
sorted_group = grouped.sort_values(by='score', ascending=False)
반응형
✅ 4. GroupBy 결과 내부 정렬
groupby로 묶은 후 그룹 내부에서 특정 기준으로 정렬하고 싶다면?
df_sorted = df.sort_values(by=['name', 'score'], ascending=[True, False])
이처럼 먼저 정렬을 해두고 groupby 하면 정렬된 채로 그룹 처리됩니다.
✅ 5. GroupBy + 정렬 후 다시 DataFrame으로 병합
# 각 그룹에서 점수 상위 1개만 추출
top_scores = df.sort_values('score', ascending=False).groupby('name').head(1)
print(top_scores)
결과:
name score age
4 Alice 95 23
1 Bob 90 30
이 방식은 그룹별 Top-N 추출에 매우 자주 사용됩니다. (groupby().head(n))
✅ 6. 실무에서 유용한 패턴
🧠 정렬 후 인덱스 초기화
df.sort_values(by='score', ascending=False, ignore_index=True)
🧠 정렬된 상태로 groupby 처리
df.sort_values(by='score').groupby('name').tail(1) # 각 그룹의 최고 점수
✅ 정리 요약
목적 | 코드 |
다중 조건 정렬 | sort_values(by=['col1', 'col2'], ascending=[True, False]) |
그룹별 통계 정렬 | groupby().agg().sort_values() |
그룹 내부 정렬 | sort_values(by=['group', 'value']) |
그룹별 top-N 추출 | groupby('col').head(N) |
인덱스 재정렬 | ignore_index=True |
반응형
'코딩취미 > Python' 카테고리의 다른 글
Python psutil 라이브러리로 시스템 정보 수집 및 실시간 모니터링 만들기 (0) | 2025.05.03 |
---|---|
경로 생성 시 오류 없이 안전하게 처리하는 구조 (0) | 2025.05.03 |
os.path.join에서 NoneType 오류가 발생하는 이유와 해결 방법 (0) | 2025.05.02 |
파이썬 리스트 vs Pandas vs NumPy 정렬 성능 비교 (0) | 2025.04.26 |
파이썬 정렬 성능 비교: sorted(), sort(), key=lambda 성능 차이는? (0) | 2025.04.26 |