[Pandas 강좌 – 4] Pandas(판다스)를 활용한 데이터 정렬(값과 인덱스를 통한 정렬)

Pandas의 DataFrame과 Series 객체를 정렬하는 방법에는 주로 두 가지가 있습니다. 값에 따른 정렬방법과 인덱스에 따라 정렬하는 방법입니다. 이들은 각각 sort_values() 메서드와 sort_index() 메서드를 사용하여 수행됩니다. 먼저 DataFrame을 생성하고 이에 대해 설명하도록 하겠습니다.

 

import pandas as pd

# 예시 DataFrame 생성
data = {'Name': ['John', 'Anna', 'Peter', 'Linda'],
        'Age': [28, 24, 35, 32],
        'City': ['New York', 'Paris', 'Berlin', 'London']}
df = pd.DataFrame(data)

#출력
#   Name  Age       City
#0  John   28   New York
#1  Anna   24      Paris
#2  Peter  35     Berlin
#3  Linda  32     London

 


1. 값에 따른 정렬

 

sort_values() 메서드는 하나 이상의 열의 값을 기준으로 DataFrame을 정렬합니다. sort_values의 구문은 아래와 같고 매개변수는 다음과 같습니다.

 

 

DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last', ignore_index=False, key=None)

 

 

  • by : 정렬의 기준이 될 열의 이름(문자열)이나 열의 리스트.
  • axis : 0 또는 'index'로 설정하면 인덱스를 기준으로 정렬하며, 1 또는 'columns'로 설정하면 열을 기준으로 정렬합니다.
  • ascending : 정렬의 방식을 설정합니다. True는 오름차순 정렬, False는 내림차순 정렬을 의미합니다. 여러 열을 기준으로 정렬할 때는 리스트를 사용할 수 있습니다.
  • inplace : True로 설정하면 원래의 DataFrame을 변경하고, False로 설정하면 새로운 DataFrame을 반환합니다.
  • kind : 정렬 알고리즘을 선택합니다. 'quicksort', 'mergesort', 'heapsort' 중 하나를 선택할 수 있습니다.
  • na_position : 'first' 또는 'last'를 선택하여 결측치의 위치를 정할 수 있습니다.
  • ignore_index : True로 설정하면 정렬 후 인덱스를 재설정합니다.
  • key : 각 열에 적용하여 정렬을 결정하는 함수를 지정할 수 있습니다.

 

 

# Age 열을 기준으로 오름차순 정렬
df.sort_values(by='Age')

# Age 열을 기준으로 내림차순 정렬
df.sort_values(by='Age', ascending=False)

# 두 열을 기준으로 정렬. 먼저 'City'를 오름차순으로, 그 다음 'Age'를 내림차순으로 정렬
df.sort_values(by=['City', 'Age'], ascending=[True, False])

 


2. 인덱스에 따른 정렬

 

sort_index 함수는 DataFrame의 인덱스를 기준으로 정렬합니다. sort_index 의 구문은 아래와 같습니다. 매개변수는 sort_values()메서드와 유사하나 추가적으로 level 매개변수가 있습니다. 이 매개변수는 다중 인덱스가 있을 때 정렬하려는 인덱스의 레벨을 지정하는 매개변수입니다.

 

DataFrame.sort_index(axis=0, level=None, ascending=True, inplace=False, kind='quicksort', na_position='last', sort_remaining=True, ignore_index=False, key=None)

 

# 인덱스를 기준으로 오름차순 정렬
df.sort_index()

# 인덱스를 기준으로 내림차순 정렬
df.sort_index(ascending=False)