반응형

07-01. 값 기준 정렬 (sort_values)

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

 

개요


sort_values 메서드는 값을 기준으로 레이블을 정렬하는 메서드입니다.

 

사용법


기본 사용법
df.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} 정렬할 레이블입니다. 0이면 행, 1이면 열을 기준으로 정렬합니다.
inplace : 원본을 대체할지 여부입니다. True일 경우 원본을 대체하게 됩니다.
kind : 알고리즘 모드 입니다. 모드는 총 4종으로 quicksort, mergesort, heapsort, stable이 있는데,
속도와 효율성의 차이를 갖습니다. 기본적으로 quicksort이며, 자세한건 numpy doc에서 확인 가능합니다.
na_position : {first / last} Na값의 위치입니다. 기본값은 last로 정렬시 맨 뒤에 위치합니다.
ignore_index : 인덱스의 무시 여부입니다. True일 경우 인덱스의 순서와 상관없이 0,1,2,... 로 정해집니다.
key : 이 인수를 통해 정렬방식으로 함수를 사용할 수 있습니다. lamba의 사용이 가능합니다.

반응형

 

예시


먼저 np.NaN이 포함된 간단한 5x3짜리 데이터를 만들어보겠습니다.

na = np.NaN
data = [[-3,'A',17],
        [na,'D',31],
        [ 7,'D',-8],
        [15,'Z', 3],
        [ 0, na,-7]]
col = ['col1','col2','col3']
row = ['row1','row2','row3','row4','row5']
df = pd.DataFrame(data = data, index = row, columns= col)
print(df)
>>
      col1 col2  col3
row1  -3.0    A    17
row2   NaN    D    31
row3   7.0    D    -8
row4  15.0    Z     3
row5   0.0  NaN    -7

기본적인 사용법
정렬의 기준이 되는 by에는 레이블명이 되는 str이 올수도 있고, 레이블명들의 list가 올 수 있습니다.
list형태가 올 경우, 첫 값부터 정렬합니다.

print(df.sort_values(by='col3'))
>>
      col1 col2  col3     #col3을 기준으로 오름차순 정렬된 것을 확인할 수 있습니다.
row3   7.0    D    -8
row5   0.0  NaN    -7
row4  15.0    Z     3
row1  -3.0    A    17
row2   NaN    D    31
print(df.sort_values(by=['col2','col3']))
>>
      col1 col2  col3   # col2 기준으로 정렬 후 같은값인 'D'에 대해서는 
row1  -3.0    A    17   # col3 기준으로 정렬된 것을 확인 할 수 있습니다.
row3   7.0    D    -8
row2   NaN    D    31
row4  15.0    Z     3
row5   0.0  NaN    -7


axis인수의 사용
axis인수를 사용하여 어떤축을 기준으로 정렬할지 설정이 가능합니다.
단, 문자와 숫자의 혼용시 오류가 발생합니다. ※ Na는 무시됩니다.
열 기준 col3으로 오름차순 정렬

print(df.sort_values(by='col3',axis=0))
>>
      col1 col2  col3
row3   7.0    D    -8
row5   0.0  NaN    -7
row4  15.0    Z     3
row1  -3.0    A    17
row2   NaN    D    31

행 기준 row1의 오름차순 정렬. 문자와 숫자의 혼용으로 오류가 발생합니다.

print(df.sort_values(by='row1',axis=1))
>>
오류 발생

행 기준 row5의 오름차순 정렬. 문자와 NaN의 혼용이기 때문에 정상적으로 정렬됩니다.

print(df.sort_values(by='row5',axis=1))
>>
      col3  col1 col2
row1    17  -3.0    A
row2    31   NaN    D
row3    -8   7.0    D
row4     3  15.0    Z
row5    -7   0.0  NaN


ascending인수의 사용
ascending인수를 이용하여 오름차순과 내림차순을 설정할 수 있습니다.
기본값은 True로 오름차순입니다. 내림차순의 경우 False로 아래와 같습니다.

print(df.sort_values(by='col3',ascending=False))
>>
      col1 col2  col3  # col3 기준으로 내림차순정렬이 된 것을 알 수 있습니다.
row2   NaN    D    31
row1  -3.0    A    17
row4  15.0    Z     3
row5   0.0  NaN    -7
row3   7.0    D    -8

na_position인수의 사용
na_position인수를 이용하여 결측값의 위치를 지정할 수 있습니다.
결측값이 맨 뒤(기본값)

print(df.sort_values(by='col1',na_position='last'))
>>
      col1 col2  col3
row1  -3.0    A    17
row5   0.0  NaN    -7
row3   7.0    D    -8
row4  15.0    Z     3
row2   NaN    D    31

결측값이 맨 앞

print(df.sort_values(by='col1',na_position='first'))
>>
      col1 col2  col3
row2   NaN    D    31
row1  -3.0    A    17
row5   0.0  NaN    -7
row3   7.0    D    -8
row4  15.0    Z     3


ignore_index인수의 사용
ignore_index인수를 사용하여 인덱스를 미사용 할 수 있습니다. 어떤식으로 정렬 되더라도
인덱스는 0, 1, 2, 3, ... 순서로 표시됩니다.

print(df.sort_values(by='col3',ignore_index=True))
>>
   col1 col2  col3
0   7.0    D    -8
1   0.0  NaN    -7
2  15.0    Z     3
3  -3.0    A    17
4   NaN    D    31


key인수의 사용
key인수를 사용하여 정렬에 함수를 이용할 수 있습니다

print(df.sort_values(by='col2',key=lambda col: col.str.lower()))
>>
      col1 col2  col3
row1  -3.0    A    17
row2   NaN    D    31
row3   7.0    D    -8
row4  15.0    Z     3
row5   0.0  NaN    -7


inplcae 인수의 사용
inplace 인수를 사용해서 원본을 대체할지의 여부를 설정할 수 있습니다.

df.sort_values(by='col3',inplace=True)
print(df) #그냥 df를 출력함으로써 원본의 대체 여부가 확인 가능합니다.
>>
      col1 col2  col3
row3   7.0    D    -8
row5   0.0  NaN    -7
row4  15.0    Z     3
row1  -3.0    A    17
row2   NaN    D    31
반응형

+ 최근 글