[Numpy] where, argmax, unique, argsort

2025. 5. 16. 10:14·python/Pandas | Numpy
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.where(cond, A, B) → 조건이 True면 A, False면 B

Pandas의 .apply(lambda x: '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.argsort(a)]

내림차순 정렬은

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 (Dot Product)  (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
'python/Pandas | Numpy' 카테고리의 다른 글
  • [Numpy] np.dot (Dot Product)
  • [Numpy] NaN과 inf 다루는 방법
  • [Numpy] 슬라이싱, 마스킹, 조건 추출
  • [Numpy] 브로드캐스팅(broadcasting)과 벡터화(vectorization) 연산
Balang
Balang
음악 전공생의 개발일지
  • Balang
    Balang
    Balang
  • 전체
    오늘
    어제
  • 반응형
    • All Post (160)
      • python (47)
        • selenium (4)
        • algorithm (10)
        • Django (6)
        • Pandas | Numpy (22)
      • SQL (9)
      • Data Engineer (36)
      • Data Scientist (3)
      • Data Analysis (11)
      • Computer Science (36)
      • Why? (16)
      • 마음가짐 (2)
  • 인기 글

  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
Balang
[Numpy] where, argmax, unique, argsort
상단으로

티스토리툴바