07-02. 인덱스 기준 정렬 (sort_index)
DataFrame.sort_index(axis=0, level=None, ascending=True, inplace=False, kind='quicksort', na_position='last', sort_remaining=True, ignore_index=False, key=None)
개요
sort_index 메서드는 인덱스를 기준으로 레이블을 정렬하는 메서드입니다.
사용법
기본 사용법
df.sort_index(axis=0, level=None, ascending=True, inplace=False, kind='quicksort', na_position='last', sort_remaining=True, ignore_index=False, key=None)
axis : {0 : index / 1: columns} 정렬할 레이블입니다. 0이면 행, 1이면 열을 기준으로 정렬합니다.
level : multi index의 경우 정렬을 진행할 level입니다.
ascending : 오름차순으로할지 여부 입니다. 기본은 True로 오름차순입니다.
inplace : 원본을 대체할지 여부입니다. True일 경우 원본을 대체하게 됩니다.
kind : 알고리즘 모드 입니다. 모드는 총 4종으로 quicksort, mergesort, heapsort, stable이 있는데,
속도와 효율성의 차이를 갖습니다. 기본적으로 quicksort이며, 자세한건 numpy doc에서 확인 가능합니다.
na_position : {first / last} Na값의 위치입니다. 기본값은 last로 정렬시 맨 뒤에 위치합니다.
sort_remaining : multi index의 경우 다른 레벨에 대해서도 정렬을할지 여부입니다. True로 할 경우
한 레벨에 대한 정렬이 완료되면, 다른 레벨도 정렬합니다.
ignore_index : 인덱스의 무시 여부입니다. True일 경우 인덱스의 순서와 상관없이 0,1,2,... 로 정해집니다.
key : 이 인수를 통해 정렬방식으로 함수를 사용할 수 있습니다. lamba의 사용이 가능합니다.
예시
※ na_position, ignore_index, inplace, key인수의 경우 sort_value와 사용이 동일하므로 참고 바랍니다.
※ na_position, ignore_index는 multi index에서 작동하지 않습니다.
먼저 np.NaN이 포함된 간단한 multi index 데이터를 만들어보겠습니다.
na = np.NaN
index_tuples = [('row1', 'val1'), ('row1', 'val2'), ('row3', 'val3'), ('row3', 'val1'), ('row3', 'val2'), ('row2', 'val5'),('row2', 'val2')]
values = [ [1,2,3], [4,na,6], [7,8,9], [na,11,12], [13,14,15], [16,17,18], [19,20,21]]
index = pd.MultiIndex.from_tuples(index_tuples) # 인덱스 설정
df = pd.DataFrame(values, columns=['col4', 'col1', 'col2'], index = index)
print(df)
>>
col4 col1 col2
row1 val1 1.0 2.0 3
val2 4.0 NaN 6
row3 val3 7.0 8.0 9
val1 NaN 11.0 12
val2 13.0 14.0 15
row2 val5 16.0 17.0 18
val2 19.0 20.0 21
level의 지정
level을 지정하므로써 해당 level에서의 정렬이 가능합니다.
level이 0인 경우 row기준으로 정렬되는것을 확인 할 수 있습니다.
print(df.sort_index(axis=0, level=0))
>>
col4 col1 col2
row1 val1 1.0 2.0 3
val2 4.0 NaN 6
row2 val2 19.0 20.0 21
val5 16.0 17.0 18
row3 val1 NaN 11.0 12
val2 13.0 14.0 15
val3 7.0 8.0 9
level이 1인 경우 val기준으로 정렬되는것을 확인 할 수 있습니다.
print(df.sort_index(axis=0, level=1))
>>
col4 col1 col2
row1 val1 1.0 2.0 3
row3 val1 NaN 11.0 12
row1 val2 4.0 NaN 6
row2 val2 19.0 20.0 21
row3 val2 13.0 14.0 15
val3 7.0 8.0 9
level별 ascending의 병용
level과 ascending의 값을 list형태로 입력하므로써, 각 level에 다른 정렬방식의 사용이 가능합니다.
level이 1인 val이 내림차순 정렬되고, level이 0인 row가 오름차순 정렬된것을 확인 할 수 있습니다.
print(df.sort_index(axis=0, level=[1,0],ascending=[False,True]))
>>
col4 col1 col2
row2 val5 16.0 17.0 18
row3 val3 7.0 8.0 9
row1 val2 4.0 NaN 6
row2 val2 19.0 20.0 21
row3 val2 13.0 14.0 15
row1 val1 1.0 2.0 3
row3 val1 NaN 11.0 12
sort_remaining 인수의 사용
multi index에서 sort_remaining인수를 True로 할 경우 level별로 순차적으로 정렬이 진행됩니다.
만약 level을 따로 지정했다면, 해당 level부터 정렬한 후 나머지 level을 순차적으로 정렬합니다.
row정렬 후 val의 정렬까지 완료된 것을 확인할 수 있습니다.
print(df.sort_index(axis=0, sort_remaining=True))
>>
col4 col1 col2
row1 val1 1.0 2.0 3
val2 4.0 NaN 6
row2 val2 19.0 20.0 21
val5 16.0 17.0 18
row3 val1 NaN 11.0 12
val2 13.0 14.0 15
val3 7.0 8.0 9
'파이썬완전정복-Pandas DataFrame > 07. 정렬' 카테고리의 다른 글
Pandas DataFrame 07-03. 정렬후 추출 (nlargest, nsmallest) (0) | 2022.01.22 |
---|---|
Pandas DataFrame 07-01. 값 기준 정렬 (sort_values) (0) | 2022.01.22 |