본문 바로가기
판다스/판다스에 유용한 넘파이 함수들

[numpy] np.where 함수로 불리언 마스킹

by 김판다t 2024. 10. 26.

np.where 함수를 이용해 조건에 따라 값 부여하기

 

np.where 함수와 불리언 마스킹

 

불리언 마스킹(Boolean Masking)은 조건에 따라 값을 부여하는 작업을 의미합니다. 넘파이의 np.where 함수는 불리언 마스킹 작업에 있어 유용한 함수입니다. 판다스는 넘파이를 기반으로 개발되었기에 판다스 객체에서도 넘파이 함수 대부분을 사용할 수 있으며, 특히 np.where 함수는 판다스의 불리언 마스킹에 자주 사용됩니다.

 

판다스에서 불리언 마스킹을 수행하는 함수는 mask나 where 등이 있습니다. 그러나 이 함수들은 True인 경우와 False인 경우의 값을 각각 별도로 설정해야 합니다. 반면 np.where 함수는 단 한 번의 설정으로 True일 때의 값과 False일 때의 값을 동시에 부여할 수 있다는 장점이 있습니다. np.where 함수의 문법을 간단하게 표현하면 다음과 같습니다.

np.where(조건문, True에 부여할 값, False에 부여할 값)

 

예시

 

이해를 돕기 위해 간단한 예시를 살펴보겠습니다.

import pandas as pd

# 예시 데이터 프레임 생성
data = {'국어': {'가': 86, '나': 79, '다': 93, '라': 80}, 
        '영어': {'가': 90, '나': 10, '다': 50, '라': 95}}
df = pd.DataFrame(data)

 

데이터 프레임 df에서 국어 점수가 80점 이상일 경우 '이수', 80점 미만일 경우 '낙제'를 부여하려면, True와 False에 각각 값을 지정하는 방식이므로 주로 np.where 함수를 사용합니다. np.where 함수는 조건을 지정한 뒤, 조건이 True일 때 부여할 값과 False일 때 부여할 값을 한 번에 설정할 수 있어 효율적입니다.

# 국어가 80 이상이면 이수, 아니면 낙제를 부여하는 국어평가 열 생성
df['국어평가'] = np.where(df['국어'] >= 80, '이수', '낙제')

 

국어 점수가 80점 이상일 경우 '이수' , 80점 미만일 경우 '낙제' 로 부여한 국어평가 열이 생성되었습니다. np.where 함수의 결과는 넘파이 배열로 반환된다는 단점이 있지만, 이는 데이터 프레임의 열을 생성하거나 수정할 때는 문제가 되지 않습니다.

 

판다스 입문자들은 일반적으로 판다스의 mask 및 where 함수보다 np.where 함수를 더 간결하며 유용하다고 생각하지만, np.where는 판다스의 mask 및 where 함수와 기능적으로 차이가 있을 뿐 상위 호환이 아닙니다. 각 함수는 본연의 목적과 사용할 상황이 있으므로, 상황에 맞게 적절히 선택하여 사용하는 것이 중요합니다.

 

np.where 함수 주요 매개변수
np.where(condition, [x, y, ]/)
  • condition : True와 Falase의 배열인 조건문을 입력합니다.
  • x, y : 조건에 따라 부여할 값들로, condition, x, y는 동일한 모양이거나 브로드캐스팅이 가능해야 합니다.

np.where 함수 공식 문서 링크


 

유튜브에서 판다스 강의 중입니다.

https://www.youtube.com/@KimPandas