개발고생일지/파이썬

pandas Dataframe 데이터 값 정렬 .sort_index(), .sort_values()

Fartist 2023. 3. 27. 10:00
- 목차
들어가는 말
1. 데이터 값을 기준으로 정렬 sort_values()
2. index 값을 기준으로 정렬 sort_index()
갈무리

[그림 1] 데이터프레임 정렬
[그림 1] 데이터프레임 정렬


들어가는 말

 Open API의 내용이나 기타 데이터들을 pandas Dataframe으로 관리할 때, 우리는 데이터프레임에 있는 데이터 값을 필요에 따라 재정렬하여 가공할 필요가 있습니다. 그럴 때는 pandas 라이브러리에서 제공하는 정렬 메서드를 이용하면 손쉽게 데이터 값을 본인이 원하는 기준에 따라 정렬할 수 있습니다. 이번 글에서는 index와 columns(열) 이름을 기준으로 각각 오름차순, 내림차순으로 데이터프레임을 정렬하는 법에 대해서 알아보겠습니다.

import pandas as pd

name = ['홍길동', '김철수', '나일류','박민수','변지성','민지선', '강민지', '고목나','홍길동']
ID = ['apple', 'banaba', 'coconut','durian','egg','jazz', 'kiwi', 'lemon','honey']
mail = ['apple@gaegosaeng.com', 'banana@gaegosaeng.com', 'coconut@gaegosaeng.com',
         'durian@gaegosaeng.com','egg@gaegosaeng.com','jazz@gaegosaeng.com', 
         'kiwi@gaegosaeng.com', 'lemon@gaegosaeng.com','honey@gaegosaeng.com']


df_01 = pd.DataFrame({'ID': ID, 'name': name, 'E-mail': mail})

[코드 1] 연습용 데이터프레임

[그림 2] 연습용 데이터프레임
[그림 2] 연습용 데이터프레임


1.  데이터 값을 기준으로 정렬 sort_values()

 .sort_values()는 데이터 값을 기준으로 정렬하는 메서드입니다. 메서드의 사용 방법에 따라 1) 특정 열을 추출하여 해당 열의 값을 기준으로 정렬할 수 있고, 2) 특정 열의 값을 기준으로 전체 데이터프레임을 정렬할 수 있습니다.  3) 옵션으로 asending=인자를 이용하여 '오름차순'과 '내림차순'을 지정하여 정렬할 수 있습니다. 4) 기준이 되는 열이 복수일 경우에는 리스트로 열과 asending=인자를 지정할 수 있습니다.

1) 특정 열을 추출하여 해당 열의 값을 기준으로 정렬

#특정 열을 추출하여 정렬
#데이터프레임['열 이름'].sort_values()

df_01['name'].sort_values()

[코드 2] 특정 열을 추출하여 정렬

먼저 데이터프레임['열 이름']을 이용해서 데이터프레임의 특정 열을 선택합니다. 이후 .sort_values()를 입력해 정렬 메서드를 붙여줍니다. 그 결과는 [그림 3]과 같습니다. 'name'열만을 추출해서 오름차순으로 정렬되었습니다. 다음에 내림차순, 오름차순 지정에 대해서 배우므로 여기서는 간단하게 .sort_values() 메서드는 '오름차순 정렬이 디폴트 값'이라는 점만 알고 있으면 됩니다. 

[그림 3] 특정 열을 추출하여 오름차순 정렬
[그림 3] 특정 열을 추출하여 오름차순 정렬


2) 특정 열의 값을 기준으로 전체 데이터프레임을 정렬

#특정 열을 기준으로 전체 데이터프레임을 정렬
#데이터프레임.sort_values(by=['열 이름'])

df_01.sort_values(by=['name'])

[코드 3] 특정 열을 기준으로 전체 데이터프레임을 정렬

 이번에는 [코드 2]와 달리 [코드 3]에서 데이터프레임 전체에 .sort_values() 메서드를 붙이고, 그 안에 by=[] 인자를 넣어줍니다. 대괄호[] 안에는 기준이 되는 열 이름을 입력합니다. 그 결과 [그림 4]에서 기준이 되는 열('name')이 갖는 데이터 값을 오름차순 기준으로 전체 데이터프레임을 재정렬하는 것을 볼 수 있습니다. 

[그림 4] 기준이 되는 열을 가지고 전체 데이터프레임 정렬
[그림 4] 기준이 되는 열을 가지고 전체 데이터프레임 정렬


3) 오름차순과 내림차순 지정

#오름, 내림차순 기준으로 데이터프레임을 정렬
#데이터프레임.sort_values(by=['열이름1'], ascending=Bool타입)

df_01.sort_values(by=['name'], ascending=False)

[코드 4] 오름차순, 내림차순 지정

 앞서 우리는 모든 정렬이 오름차순으로 정렬하는 것을 확인했습니다. 이는 sort() 메서드가 기본적으로 오름차순을 디폴트 값으로 가지고 있기 때문이었습니다. 소괄호() 안에 'ascending=Bool타입'인자를 넣어주어, 내림차순과 오름차순을 수동으로 지정할 수 있습니다. ascending은 영어로 '오르는', '상승적인'이라는 뜻을 가지고 있습니다. True를 할당하면 디폴트값과 마찬가지로 오름차순 정렬이 됩니다. False를 할당하면 내림차순 정렬을 합니다.

 [코드 4]는 내림차순 정렬로 'name'열의 데이터 값을 기준으로 전체 데이터프레임을 정렬합니다. 그 결과는 [그림 5]로 확인할 수 있습니다.

[그림 5] 내림차순 정렬
[그림 5] 내림차순 정렬


4) 기준이 되는 열이 복수일 경우

#여러 열을 각각 오름, 내림차순 기준으로 데이터프레임을 정렬
#데이터프레임.sort_values(by=['열이름1','열이름2'], ascending=[True, False])

df_01.sort_values(by=['name','ID'], ascending=[False,True])

[코드 5] 기준이 되는 열이 복수일 경우

 기준이 되는 열이 복수이고 각 열이 가진 데이터 값을 각각 내림차순, 오름차순으로 정렬하고 싶을 때는, 각 열 이름과 정렬기준을 리스트타입으로 입력해 줍니다. 열 이름은 기본 형태가 리스트타입이므로 쉼표로 나열해 주면 되고, 내림/오름차순 지정은 별로도 리스트타입으로 입력해야 합니다. 

 [코드 5]를 실행하면 [그림 6]처럼 'name'열에서 '홍길동' 이름을 가진 두 개의 행이 가장 먼저 등장합니다. 두 행 중에서 'ID'가 오름차순으로 정렬되므로, 'apple'을 ID로 갖는 행이 최상단에 위치하게 됩니다. 

[그림 6] 복수의 열을 기준으로 데이터프레임 정렬
[그림 6] 복수의 열을 기준으로 데이터프레임 정렬


2.  index 값을 기준으로 정렬 sort_index()

 .sort_index()는 데이터 값을 기준으로 정렬하는 메서드입니다. 메서드의 사용 방법에 따라 1) 특정 열을 추출하여 index의 값을 기준으로 정렬할 수 있고, 2) index의 값을 기준으로 전체 데이터프레임을 정렬할 수 있습니다. 옵션으로 asending=인자를 이용하여 '오름차순'과 '내림차순'을 지정하여 정렬할 수 있습니다. index 정렬을 연습하기 위해 [그림 7]처럼 인덱스가 뒤죽박죽인 데이터프레임을 준비합니다.

[그림 7] index 값이 뒤죽박죽인 데이터프레임
[그림 7] index 값이 뒤죽박죽인 데이터프레임 df_02


1) 특정 열을 추출하여 index의 값을 기준으로 정렬

#특정 열을 추출하여 index 값을 기준으로 정렬
#데이터프레임['열 이름'].sort_index()

df_02['name'].sort_index()​

[코드 6] 특정 열을 추출하여 index 값을 기준으로 정렬

  데이터프레임['열이름']을 이용해 특정 열을 선택하고 .sort_index()메서드를 붙여서 index 값을 기준으로 정렬하도록 합니다. 그 결과 [그림 8]처럼 뒤죽박죽이었던 데이터프레임 df_02가 index 값 오름차순으로 정렬된 것을 확인할 수 있습니다.

[그림 8] 특정 열을 추출하여 index 값을 기준으로 정렬
[그림 8] 특정 열을 추출하여 index 값을 기준으로 정렬


2) index의 값을 기준으로 전체 데이터프레임을 정렬

#전체 데이터프레임을 인덱스를 기준으로 정렬
#데이터프레임.sort_index()
#values와 다르게 by를 쓸 수 없음. 자동으로 index만을 기준으로 삼기 때문.
#다만 ascending=False 등 오름,내림차순으로 설정 인자를 입력할 수 있다.

df_02.sort_index()

[코드 7] 전체 데이터프레임을 index 값을 기준으로 정렬

 [코드 7]을 살펴보면 데이터프레임 전체에 .sort_index() 메서드를 결합하여 전체 데이터프레임을 index 값을 기준으로 오름차순 정렬하는 것을 알 수 있습니다. [그림 9]는 코드의 실행 결과입니다.

[그림 9] 전체 데이터프레임을 index 값을 기준으로 정렬
[그림 9] 전체 데이터프레임을 index 값을 기준으로 정렬


3) index 정렬에서 오름차순 내림차순 지정

 index 정렬인 sort_index() 메서드도 sort_values()메서드처럼 내림차순, 오름차순 정렬을 지정할 수 있습니다. 디폴트 값은 오름차순 정렬입니다. 내림차순을 지정하려면 소괄호() 안에 'ascending=False'인자를 넣어주어 구현할 수 있습니다. [코드 8]은 그에 해당하는 코드이며 [그림 10]은 그 결과입니다.

df_02.sort_index(ascending=False)

[코드 8] 내림차순으로 index 정렬

[그림 10] index 정렬에서 내림차순 지정
[그림 10] index 정렬에서 내림차순 지정


갈무리

-전체 코드 보기

import pandas as pd

name = ['홍길동', '김철수', '나일류','박민수','변지성','민지선', '강민지', '고목나','홍길동']
ID = ['apple', 'banaba', 'coconut','durian','egg','jazz', 'kiwi', 'lemon','honey']
mail = ['apple@gaegosaeng.com', 'banana@gaegosaeng.com', 'coconut@gaegosaeng.com',
         'durian@gaegosaeng.com','egg@gaegosaeng.com','jazz@gaegosaeng.com', 
         'kiwi@gaegosaeng.com', 'lemon@gaegosaeng.com','honey@gaegosaeng.com']


df_01 = pd.DataFrame({'ID': ID, 'name': name, 'E-mail': mail})

#1) 특정 열을 추출하여 정렬
#데이터프레임['열 이름'].sort_values()

df_01['name'].sort_values()

#2) 특정 열을 기준으로 전체 데이터프레임을 정렬
#데이터프레임.sort_values(by=['열 이름'])

df_01.sort_values(by=['name'])

#3) 오름차순, 내림차순 지정
#디폴트값은 오름차순(ascending=True), 내림차순은 (ascending=False)로 지정해준다.
df_01.sort_values(by=['name'], ascending=False)

#4) 여러 열을 각각 오름, 내림차순 기준으로 데이터프레임을 정렬
#데이터프레임.sort_values(by=['열이름1','열이름2'], ascending=[True, False])
df_01.sort_values(by=['name','ID'], ascending=[False,True])

#연습용 무작위 index를 가진 데이터프레임
df_02= df_01.sort_values(by=['name'], ascending=True)

#1) 특정 열을 추출하여 index 값을 기준으로 정렬
df_02['name'].sort_index()

#2) 전체 데이터프레임을 인덱스를 기준으로 정렬
#데이터프레임.sort_index()
#values와 다르게 by를 쓸 수 없음. 자동으로 index만을 기준으로 삼기 때문.

df_02.sort_index()

#3) 다만 ascending=False 등 오름,내림차순으로 설정 인자를 입력할 수 있다.
df_02.sort_index(ascending=False)

[코드 9] 코드 전체 보기

 이상으로 pandas Dataframe에서 데이터값, index값을 기준으로 오름차순, 내림차순을 지정하여 정렬하는 방법에 대해서 알아보았습니다. 감사합니다.

반응형