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
'파이썬완전정복-Pandas DataFrame > 07. 정렬' 카테고리의 다른 글
Pandas DataFrame 07-03. 정렬후 추출 (nlargest, nsmallest) (0) | 2022.01.22 |
---|---|
Pandas DataFrame 07-02. 인덱스 기준 정렬 (sort_index) (0) | 2022.01.22 |