728x90
데이터를 조건에 맞게 찾고, 정렬하고, 고유값을 뽑아내는 핵심 함수들입니다.
데이터 분석에서 "찾기"는 기본 중의 기본이다.
- 특정 조건에 맞는 위치가 궁금하다 → np.where
- 가장 큰 값은 어디인가? → np.argmax
- 중복 없이 어떤 값들이 들어 있는가? → np.unique
- 정렬 순서를 알고 싶다 → np.argsort
이 네가지 함수는 조건, 추출, 분류, 정렬, 그룹핑의 기반이 되는 매우 자주 쓰이는 함수들이다.
np.where - 조건에 따라 인덱스나 값을 선택
● 조건이 True인 인덱스 반환
import numpy as np
a = np.array([10, 20, 30, 25, 15])
np.where(a > 20)
# (array([2, 3], dtype=int64),)
─ 조건을 만족하는 인덱스를 튜플로 반환을 합니다.
● 조건에 따라 값 선택 삼항연산처럼사용
np.where(a > 20, 'PASS', 'FAIL')
# ['FAIL', 'FAIL', 'PASS', 'PASS', 'FAIL']
─ np.wherecond,A,B → 조건이 True면 A, False면 B
Pandas의 .applylambdax:′A′if...else′B′ 보다 훨씬 빠릅니다.
np.argmax - 최대값의 인덱스 찾기
a = np.array([5, 3, 9, 1])
np.argmax(a)
# 2
─ 가장 큰 값인 9의 위치는 index 2
● 2차원 배열에서 axis 지정
b = np.array([[1, 2, 3], [7, 4, 0]])
np.argmax(b, axis=0) # → 각 열의 최대값 위치 → [1 1 0]
np.argmax(b, axis=1) # → 각 행의 최대값 위치 → [2 0]
─ axis=0은 "세로 방향", axis=1은 "가로 방향"
np.unique - 고유값 추출 및 정렬
data = np.array([3, 1, 2, 3, 2, 1, 4])
np.unique(data)
# [1 2 3 4]
─ 중복 제거 + 정렬 결과 반환
● 고유값 + 개수 반환
vals, counts = np.unique(data, return_counts=True)
─ 범주형 데이터의 분포 확인할 때 자주 사용
np.argsort – 정렬 순서의 인덱스 반환
a = np.array([50, 10, 30])
np.argsort(a)
# [1 2 0]
- 인덱스 기준: a[1]=10 → a[2]=30 → a[0]=50
- 실제 값을 정렬하려면: a[np.argsorta]
내림차순 정렬은
a[np.argsort−a]
argsort는 데이터를 변경하지 않고, 정렬 순서 정보만 제공
만일 실제 데이터에서 점수 기준 상위 N명 추출을 해야한다면
scores = np.array([85, 90, 70, 95, 80])
top3_idx = np.argsort(scores)[-3:][::-1]
top3 = scores[top3_idx]
# [95, 90, 85]
argsort로 정렬 순서 → 인덱스로 데이터 재구성
위에 같은 함수들을 사용할 때 주의할 점이 있습니다.
함수 | 주의할 점 |
where | 인덱스 반환과 값 선택 방식 혼동 주의 |
argsort | 값을 정렬하지 않음 → 인덱스를 다시 적용해야 |
unique | 기본적으로 정렬됨 → 순서가 중요한 데이터는 주의 |
argmax | 동일 최대값 여러 개면 첫 번째 인덱스 반환 |
정리
위 네가지의 함수는 Numpy에서 탐색, 분류, 정렬, 전처리의 핵심입니다.
특히 where와 argsort는 벡터화 처리를 기반으로 하여
성능이 중요한 대용량 처리에서 반드시 알아야 할 필수 함수입니다.
728x90
반응형
'python > Pandas | Numpy' 카테고리의 다른 글
[Numpy] np.dot DotProduct 0 | 2025.05.26 |
---|---|
[Numpy] NaN과 inf 다루는 방법 0 | 2025.05.20 |
[Numpy] 슬라이싱, 마스킹, 조건 추출 0 | 2025.05.02 |
[Numpy] 브로드캐스팅broadcasting과 벡터화vectorization 연산 0 | 2025.05.02 |
[Numpy] ndarray 구조 - 배열의 모양, 차원 ,타입 0 | 2025.05.02 |