개요
DataFrame을 특정 컬럼들을 기준으로 정렬하고 싶다. 방법을 적어둔다.
+ 이전에 2022.12.20 - [Python] Pandas - 데이터프레임 데이터 조작 1에서 적어두긴 했지만…… 검색에 걸리지도 않아서 다시 작성한다!
DataFrame.sort_values
DataFrame.sort_values 함수는 값을 기준으로 데이터프레임을 정렬한다.
DataFrame.sort_values(by, *,
axis=0, ascending=True,
inplace=False, kind='quicksort',
na_position='last', ignore_index=False,
key=None)
- by : 정렬 기준. 문자열 또는 리스트로 전달한다.
- axis : 정렬 축. 0 또는 index이면 by에 지정한 컬럼의 값을 기준으로 행을 정렬한다. 1 또는 columns이면 by에 지정한 인덱스의 값을 기준으로 열을 정렬한다.
- asceding : True이면 오름차순으로, False면 내림차순으로 지정한다. 리스트로 전달하는 경우 by에 전달한 매개변수와 길이가 같아야 한다.
- inplace : True이면 원본 DataFrame을 덮어쓴다.
- kind: 정렬에 사용할 알고리즘. 'quicksort', 'mergesort', 'heapsort', 'stable'를 지정할 수 있다.
- na_position : 값에 NaN가 포함된 경우, 해당 값의 위치를 지정한다.
- ignore_index : True이면 인덱스를 유지하지 않고 초기화한다.
사용 예시
예시 데이터프레임
df = pd.DataFrame({
'col1': ['A', 'A', 'B', np.nan, 'D', 'C'],
'col2': [2, 1, 9, 8, 7, 4],
'col3': [0, 1, 9, 4, 2, 3],
'col4': ['a', 'B', 'c', 'D', 'e', 'F']
})
단일 컬럼 기준 정렬
df.sort_values(by=['col2'])
여러 컬럼 기준 정렬 / 인덱스 초기화
df.sort_values(by=['col1', 'col2'], ignore_index=True)
여러 컬럼을 기준으로 정렬할 때는 전달한 컬럼의 순서대로 우선순위를 가진다.
df.sort_values(by=['col2', 'col1'], ignore_index=True)
내림차순 정렬
df.sort_values(by=['col2'], ascending=False)
여러 컬럼을 기준으로 정렬 / 각 컬럼의 정렬 순서 지정
col1 기준 내림차순으로, col2 기준으로 오름차순으로 정렬한다.
df.sort_values(by=['col1', 'col2'], ascending=[False, True])
인덱스를 기준으로 컬럼 정렬
df.T.sort_values(by='col1', axis=1)
참고 문서
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.sort_values.html