달나라 노트

Python numpy : select (여러 조건을 한 번에 처리하는 메서드) 본문

Python/Python numpy

Python numpy : select (여러 조건을 한 번에 처리하는 메서드)

CosmosProject 2026. 5. 14. 19:13
728x90
반응형

NumPy select() — 여러 조건을 한 번에 처리하는 메서드

조건 목록을 순서대로 검사해서, 처음으로 True인 조건에 해당하는 값을 선택합니다. 코드로 치면 if-elif-elif-else 구조입니다.

기본 문법

np.select(condlist, choicelist, default=0)
파라미터 설명
condlist 조건들의 리스트. 순서대로 검사하며 처음 True인 조건이 선택됨
choicelist 각 조건에 대응하는 값들의 리스트. condlist와 길이가 같아야 함
default 어떤 조건도 해당하지 않을 때 사용할 값 (기본값: 0)

내부 동작 방식

scores >= 90 같은 표현은 array 전체에 한 번에 적용되어 boolean array를 만듭니다.

scores = np.array([45, 82, 91, 63, 77])

scores >= 90  # → [False, False,  True, False, False]
scores >= 80  # → [False,  True,  True, False, False]
scores >= 70  # → [False,  True,  True, False,  True]
scores >= 60  # → [False,  True,  True,  True,  True]

condlistboolean array들의 리스트입니다. np.select는 이 boolean array들을 모두 만들어 둔 뒤, 각 인덱스 위치마다 위에서부터 훑어 처음 True인 항목의 choice를 선택합니다.

index=0, 45점  →  False/False/False/False  →  default 'F'
index=1, 82점  →  False/True              →  'B'
index=2, 91점  →  True                   →  'A'
index=3, 63점  →  False/False/False/True  →  'D'
index=4, 77점  →  False/False/True        →  'C'
input과 output의 형태·개수·순서는 항상 동일합니다.

예시 1 — 시험 점수 → 등급

import numpy as np

scores = np.array([45, 82, 91, 63, 77])

condlist = [
    scores >= 90,
    scores >= 80,
    scores >= 70,
    scores >= 60,
]
choicelist = ['A', 'B', 'C', 'D']

result = np.select(condlist, choicelist, default='F')
# ['F' 'B' 'A' 'D' 'C']

예시 2 — DataFrame 새 컬럼 생성

import numpy as np
import pandas as pd

df = pd.DataFrame({'매출': [120, 450, 890, 1500]})

condlist = [
    df['매출'] >= 1000,
    df['매출'] >= 500,
    df['매출'] >= 200,
]
choicelist = ['최우수', '우수', '보통']

df['등급'] = np.select(condlist, choicelist, default='미달')
#     매출    등급
# 0    120    미달
# 1    450    보통
# 2    890    우수
# 3   1500   최우수

np.where() vs np.select()

np.where() np.select()
조건 수 1개 여러 개
비유 if-else if-elif-else

조건이 하나면 np.where, 여러 개면 np.select가 적합합니다.

728x90
반응형
Comments