넘파이의 np.sort 함수를 사용해 행이나 열을 개별적으로 정렬하기
판다스의 sort_values 함수로 특정 열을 기준으로 정렬할 수 있지만, 행이나 열을 개별적으로 정렬하려면 넘파이의 np.sort 함수를 사용하는 것이 더 편리합니다. 이해를 돕기 위해 간단한 예시를 살펴보겠습니다.
예시
다음 예시 데이터 프레임은 각 학생의 선택 과목을 포함하고 있습니다.
import pandas as pd
import numpy as np
# 예시 데이터 프레임 생성
data = {'선택1': ['물리', '화학', '물리', '화학', '물리'],
'선택2': ['화학', '물리', '화학', '생물', '지학'],
'선택3': ['지학', '지학', '생물', '역사', '화학']}
df = pd.DataFrame(data)
이 예시에서 각 행의 '선택1', '선택2', '선택3' 열은 순서에 구분이 없는 선택 과목입니다. 따라서 첫 번째, 두 번째, 다섯 번째 행이 동일한 과목을 선택했지만, 열에 기재된 순서가 달라서 서로 다른 데이터로 인식될 수 있습니다. 이 경우 각 행을 개별적으로 정렬하면 동일한 선택을 쉽게 파악할 수 있습니다. 이 작업은 넘파이의 np.sort 함수를 사용하여 간편하게 수행할 수 있습니다.
# 각 행의 개별적 정렬
np.sort(df)
array([['물리', '지학', '화학'],
['물리', '지학', '화학'],
['물리', '생물', '화학'],
['생물', '역사', '화학'],
['물리', '지학', '화학']], dtype=object)
np.sort 함수로 각 행에서 개별적으로 정렬을 수행하니, 첫 번째, 두 번째, 다섯 번째 행이 동일한 데이터임을 쉽게 파악할 수 있습니다.
np.sort 함수의 반환 형태
다만 np.sort 함수는 정렬된 결과를 넘파이 배열 형태로 반환합니다. 따라서 데이터 프레임을 유지하고 싶다면 기존 데이터 프레임에 재배정해야 합니다.
# 정렬된 결과를 데이터 프레임으로 재배정
df[:] = np.sort(df)
각 열을 기준으로 정렬하기
행을 기준으로 정렬하는 것과 마찬가지로, axis=0 매개변수를 사용하면 각 열을 개별적으로 정렬할 수 있습니다. 아래는 각 열을 기준으로 정렬하는 코드의 예시입니다.
# 각 열의 개별적 정렬
np.sort(df, axis=0)
내림차순으로 정렬하기
np.sort 함수는 기본적으로 오름차순 정렬을 수행합니다. 내림차순으로 정렬하려면, 먼저 오름차순으로 정렬한 후 배열의 순서를 뒤집어야 합니다. 이를 위해 슬라이싱을 이용해 배열을 역순으로 뒤집으면, 다음과 같이 내림차순으로 정렬된 배열을 얻을 수 있습니다. (역순으로 뒤집는 슬라이싱은 [::-1]입니다)
# 각 행의 개별적 정렬(내림차순)
np.sort(df)[:, ::-1]
유튜브에서 판다스 강의 중입니다.
'판다스 > 판다스에 유용한 넘파이 함수들' 카테고리의 다른 글
[numpy] np.fmax와 np.fmin 함수를 이용해 배열 비교 (4) | 2024.10.26 |
---|---|
[numpy] np.select 함수로 불리언 마스킹 (3) | 2024.10.26 |
[numpy] np.where 함수로 불리언 마스킹 (3) | 2024.10.26 |
[numpy] 난수 생성 함수 (3) | 2024.10.26 |