페이지 불러오는 중
정렬은 값 기준(sort_values) 과 라벨 기준(sort_index) 두 가지입니다.
"상위 N개"만 필요하면 전체 정렬(sort_values().head())보다 nlargest/nsmallest 가 빠릅니다.
값의 "몇 등인지"가 필요하면 rank 를 씁니다 (동점 처리 방식이 핵심 옵션).
import pandas as pdsort_valuesdf.sort_values("amount") # 오름차순
df.sort_values("amount", ascending=False) # 내림차순
df.sort_values(["city", "amount"], ascending=[True, False]) # 다중 키
df.sort_values("amount", na_position="first") # 결측 위치
df.sort_values("amount", key=lambda s: s.abs()) # 변환 후 정렬 (절댓값)
df.sort_values("name", key=lambda s: s.str.lower()) # 대소문자 무시key는 Series 전체를 받아 Series를 돌려줘야 합니다 (원소별 아님).kind="stable"(기본은 quicksort)로 안정 정렬 보장 — 동점의 원래 순서 유지.sort_indexdf.sort_index() # 행 인덱스 오름차순
df.sort_index(axis=1) # 열 이름 정렬
df.sort_index(level=["city", "year"]) # MultiIndex 레벨별💡 이럴 때:
merge·concat·pivot후 인덱스가 뒤섞이면sort_index()로 정돈합니다. MultiIndex 슬라이싱 전에는sort_index()가 사실상 필수입니다.
nlargest, nsmallestdf.nlargest(5, "amount") # amount 상위 5행
df.nsmallest(3, "amount")
df.nlargest(5, ["amount", "qty"]) # 동점 시 두 번째 키
df["amount"].nlargest(5) # Series 버전전체를 정렬하지 않고 힙으로 상위 N개만 추리므로, 큰 데이터에서 sort_values(...).head(5)보다 빠릅니다.
💡 이럴 때: "매출 상위 10개 지점", "지연 시간 최악 20건"처럼 꼬리만 필요할 때.
ranks = pd.Series([40, 10, 40, 20])
s.rank() # [3.5, 1.0, 3.5, 2.0] - 동점은 평균 순위 (기본)
s.rank(method="min") # [3.0, 1.0, 3.0, 2.0] - 동점 최소
s.rank(method="dense") # [3.0, 1.0, 3.0, 2.0] - 동점 간격 없음(1,2,3)
s.rank(method="first") # 등장 순서로 동점 해소
s.rank(ascending=False) # 큰 값이 1등
s.rank(pct=True) # 백분위(0~1)df["rank_in_city"] = df.groupby("city")["amount"].rank(method="dense", ascending=False)💡 이럴 때: "각 지점 내에서 매출 순위", "고객별 최근 주문 순번" 같은 그룹 상대 순위 :
group_by의transform성격.
댓글
GitHub 계정으로 의견이나 질문을 남길 수 있습니다.