파이썬・ML/pandas

판다스 카테고리 타입 데이터 커스텀 정렬하기

truezero 2023. 7. 30. 23:32

sort_index 메서드를 사용해서 데이터프레임의 인덱스를 정렬하던 중 원하는 순서대로 정렬할 수 없는 문제가 발생했습니다.

알파벳 순서로 아무리 오름차순/내림차순 정렬을 시도해도 원하는 순서대로 나열할 수 없었습니다.

고민하던 중 해당 데이터 타입을 카테고리형으로 변환해야겠다는 생각이 들었습니다.

해당 데이터는 Medal 관련 값들로 'Gold', 'Silver', 'Bronze'로 분류가 가능했습니다.

 

from pandas.api.types import CategoricalDtype

cat_medal = CategoricalDtype(
  ['Bronze', 'Silver', 'Gold'],
  ordered=True
)

type(cat_medal)
# pandas.core.dtypes.dtypes.CategoricalDtype

Gold, Silver, Bronze 순으로 Medal 인덱스를 정렬하기 위해 CategoricalDtype 클래스를 사용했습니다.

해당 클래스를 사용해 순서가 존재하는 카테고리 타입을 인스턴스화할 수 있었습니다.

 

df_target['Medal'] = df_target['Medal'].astype(cat_medal)

기존 Medal 컬럼의 데이터 타입을 변경했습니다.

이제 Medal 컬럼은 sort_values 메서드를 사용해서 정렬할 수 있습니다.

 

df_kor = (
  df_target
  .pivot_table(
    index=['Year', 'Medal'],
    ...
  )
  .sort_index(ascending=[False, False])
)

하지만 Medal 컬럼을 인덱스로 사용해야 하기 때문에 sort_index 메서드를 사용했습니다.

df_kor은 멀티인덱스를 갖는 데이터프레임으로, 두 중첩 인덱스 Year과 Medal을 모두 내림차순 정렬합니다.

그 결과 Medal 인덱스를 Gold, Silver, Bronze 순으로 정렬하는 데 성공했습니다.