본문 바로가기
판다스/판다스 팁

[pandas] 정해진 임의 순서로 정렬 하기

by 김판다t 2024. 3. 28.

예제

 

import pandas as pd
data1 = {
    '지점': ['서초점', '서초점', '양재점', '양재점', '서초점', '양재점'], 
    '제품': ['환타', '콜라', '콜라', '사이다', '사이다', '콜라'], 
    '매출': [7000, 9000, 5000, 1000, 2000, 4000]
}

df = pd.DataFrame(data1)

 

 

정렬 문제

 

1. 지점을 서초→양재 순으로 먼저 정렬하고
2. 제품은 콜라→환타→사이다 순으로 정렬하고
3. 지점과 제품이 동일할 때는 매출이 적은 순서로 정렬하라

 

 

 

 

 

 

 

 

 

먼저 지점과 제품의 정렬 순서로 카테고리를 생성하는 코드를 만들어

지점과 제품 열에만 적용하면 됩니다.

 

# 정렬 순서
order = ['서초점', '양재점', '콜라', '환타', '사이다']

# 지점과 제품열만 카테고리인 것처럼 정렬
out = df.sort_values(
    ['지점', '제품', '매출'], 
    key=lambda x: pd.Categorical(x, categories=order, ordered=True) 
                  if x.name in ['지점', '제품'] else x
)

 

 

혹은 if문 대신 딕셔너리를 생성해 get 함수를 사용할 수도 있습니다.

 

# 정렬 순서
order = ['서초점', '양재점', '콜라', '환타', '사이다']

# 카테고리형으로 정렬 함수 생성
sorter = lambda s: pd.Categorical(s, categories=order, ordered=True)

# 지점과 제품 열만 sorter 함수로 정렬
out = df.sort_values(
    ['지점', '제품', '매출'], 
    key=lambda x: {'지점': sorter, '제품': sorter}.get(x.name, lambda s: s)(x)
)

 

 

out:

 

 

 

 

sort_values의 매개변수 key를 사용해 카테고리로 변환하는 함수를 입력하면

실제로 카테고리로 변환되지는 않고 카테고리인 것과 같이 정렬만 수행합니다.