pshoon25 2022. 12. 16. 16:30

모든 프로그램 언어에서 정렬은 두 가지 종류가 있다.

그것은 '오름차순' '내림차순'이다.

모든 프로그램 언어의 기본은 '오름차순'으로 설정되어 있다.


😤판다스의 데이터프레임에서도 정렬을 할 수 있는 함수가 두 가지 있다.

  • 데이터 프레임의 Series의 정렬을 도와주는 함수
    • df.sort_values( )함수
  • 데이터 프레임의 컬럼 명(Column Label) 또는 열의 인덱스(Index)의 정렬을 도와주는 함수
    • df.sort_index( )함수 

순차적으로 하나씩 알아보자 !


 

데이터 프레임(Data Frame)에서 시리즈(Series)의 정렬을 위해서는 sort_values( )함수를 이용한다.

위 함수는 SQL의 order by와 유사하다.

 

Sort_values( ) 함수의 주요 파라미터는 아래와 같다.

  • by = '컬럼명'
    • 특정 컬럼명을 입력하면 해당 컬럼으로 정렬을 수행한다.
  • ascending=True | False
    • True 일 경우 오름차순으로 정렬 (Default)
    • False 일 경우 내림차순으로 정렬
  • na_position='first'|'last'
    • 'first'일 경우, Null값이 맨 위로 정렬
    • 'last'일 경우, Null값이 맨 하단으로 정렬

👉df.sort_values( )

import numpy as np
import pandas as pd

df = pd.DataFrame({"c1":[14, 5, 6, np.nan, 32],
                   "c2":['a', 'c', 'e', 'z', 'e'],
                   "c3":[np.nan, 25, 26, 3, 6],
                   "c4":[4, 5, 6, 34, 5]}, index=list('ABCDE'))
print(df)
'''
     c1 c2    c3  c4
A  14.0  a   NaN   4
B   5.0  c  25.0   5
C   6.0  e  26.0   6
D   NaN  z   3.0  34
E  32.0  e   6.0   5
'''

new_df = df.sort_values(by=['c1'])  # c1 컬럼으로 오름차순 정렬
print(new_df)
'''
     c1 c2    c3  c4
B   5.0  c  25.0   5
C   6.0  e  26.0   6
A  14.0  a   NaN   4
E  32.0  e   6.0   5
D   NaN  z   3.0  34
'''

new_df = df.sort_values(by=['c1'], ascending=False) # c1 컬럼으로 내림차순 정렬
print(new_df)
'''
     c1 c2    c3  c4
E  32.0  e   6.0   5
A  14.0  a   NaN   4
C   6.0  e  26.0   6
B   5.0  c  25.0   5
D   NaN  z   3.0  34
'''

new_df = df.sort_values(by=['c2'])    # c2 값을 오름차순으로 정렬
print(new_df)
'''
     c1 c2    c3  c4
A  14.0  a   NaN   4
B   5.0  c  25.0   5
C   6.0  e  26.0   6
E  32.0  e   6.0   5
D   NaN  z   3.0  34
'''

new_df = df.sort_values(by=['c1'], ascending=False, na_position='first')    #  c1 컬럼으로 내림차순 정렬, null 값 맨 앞으로 배치
print(new_df)
'''
     c1 c2    c3  c4
D   NaN  z   3.0  34
E  32.0  e   6.0   5
A  14.0  a   NaN   4
C   6.0  e  26.0   6
B   5.0  c  25.0   5
'''

new_df = df.sort_values(by=['c2', 'c1'], ascending=False)   # 다중정렬 c2 값을 우선 정렬, 그 후 c2에서 동일한 값은 c1값에서 내림차순으로 정렬
print(new_df)
'''
     c1 c2    c3  c4
D   NaN  z   3.0  34
E  32.0  e   6.0   5
C   6.0  e  26.0   6
B   5.0  c  25.0   5
A  14.0  a   NaN   4

데이터 프레임의 컬럼 명(Column Label) 또는 열의 인덱스(Index)의 정렬을 도와주는 함수는 df.sort_index(  )함수이다.

 

df.sort_index( ) 함수는 파라미터의 axis=0|1 을 지정하여 '인덱스'와 '컬럼명'의 정렬을 지정할 수 있다.

  • axis=0일 경우,
    • 행(Colums)의 인덱스를 정렬해준다. (B, C, D, A, E)를 정렬
  • axis=1일 경우,
    • 열의 레이블을 정렬해준다. 즉 컬럼명인 (c1, d2, c2, d1) 을 정렬

 

👉df.sort_index( )

import numpy as np
import pandas as pd

df = pd.DataFrame({"c1":[14,5,6,np.nan,32],
                   "d2":[14,15,16,5,np.nan],
                   "c2":[np.nan,25,26,3,6],
                   "d1":[4,5,6,34,5]}, index=list('BCDAE'))
print(df)
'''
     c1    d2    c2  d1
B  14.0  14.0   NaN   4
C   5.0  15.0  25.0   5
D   6.0  16.0  26.0   6
A   NaN   5.0   3.0  34
E  32.0   NaN   6.0   5
'''

# 행의 인덱스(레이블) 정렬

### 오름차순
new_df = df.sort_index(axis = 0)
print(new_df)
'''
     c1    d2    c2  d1
A   NaN   5.0   3.0  34
B  14.0  14.0   NaN   4
C   5.0  15.0  25.0   5
D   6.0  16.0  26.0   6
E  32.0   NaN   6.0   5
'''
### 내림차순
new_df = df.sort_index(axis = 0, ascending=False)
print(new_df)
'''
     c1    d2    c2  d1
E  32.0   NaN   6.0   5
D   6.0  16.0  26.0   6
C   5.0  15.0  25.0   5
B  14.0  14.0   NaN   4
A   NaN   5.0   3.0  34
'''

## 나. 열의 인덱스(레이블) 정렬

### 오름차순
new_df = df.sort_index(axis = 1)
print(new_df)
'''
     c1    c2  d1    d2
B  14.0   NaN   4  14.0
C   5.0  25.0   5  15.0
D   6.0  26.0   6  16.0
A   NaN   3.0  34   5.0
E  32.0   6.0   5   NaN
'''
### 내림차순
new_df = df.sort_index(axis = 1, ascending=False)
print(new_df)
'''
     d2  d1    c2    c1
B  14.0   4   NaN  14.0
C  15.0   5  25.0   5.0
D  16.0   6  26.0   6.0
A   5.0  34   3.0   NaN
E   NaN   5   6.0  32.0
'''