본문 바로가기
판다스 강의(유튜브)/1분 판다스

[판다스 Q&A] 열이나 행마다 같은 조건으로 불리언 인덱싱을 수행

by 김판다t 2022. 7. 24.

열이나 행마다 같은 조건으로 불리언 인덱싱을 수행할 때는 any나 all을 사용하면 됩니다.

 

해당 강의 shorts 영상 링크입니다.

https://youtube.com/shorts/s3px6HFkXZA?feature=share 

 

- YouTube

 

www.youtube.com

 

실습에 쓸 데이터를 부릅니다.

import pandas as pd
df = pd.DataFrame([[56, 56, 56, 63], [78, 78, 73, 76], [79, 77, 78, 86], 
                   [89, 89, 56, 88], [66, 84, 71, 61], [86, 57, 71, 62]], 
                  index=list('ABCDEF'), columns=['국어', '영어', '수학', '과학'])
df

 

미션: 각 과목이 전부 60점이 넘어야 합격일때 합격자 데이터만 추출하라.

 

 

불리언 인덱싱을 사용하면 가능합니다.

cond1 = df['국어'] > 60
cond2 = df['영어'] > 60
cond3 = df['수학'] > 60
cond4 = df['과학'] > 60
df.loc[cond1 & cond2 & cond3 & cond4]

 

그러나 너무 번거롭고, 열이 100개라면 이런 방식으로는 사용할 수 없을 것입니다.

 

해법

 

이럴 때 판다스에서는 all과 any 함수를 사용하시면 됩니다.

  • all은 모든 값이 True일 때만 True를 반환하며, 나머지는 False를 반환합니다.
  • any는 모든 값이 False일 때만 False를 반환하며, 나머지는 True를 반환합니다.

데이터 프레임을 불 자료형으로 변환한 후 all이나 any를 적용하면 됩니다.

  • 열 단위로 적용하려면 axis=0 (기본값)
  • 행 단위로 적용하려면 axis=1

이번 경우에는 행 단위로 적용할 것이므로 axis=1을 입력해야 합니다.

(df > 60).all(axis=1)

각 행마다 모든 값이 60점을 넘는지 확인하여 True 또는 False를 반환하는 조건문이 생성됩니다.

 

 

 

 

위 결과로 불리언 인덱싱을 수행하면 완성입니다!

df.loc[(df > 60).all(axis=1)]

B, C, E에게 주어지는 합격 목걸이.

 

 

번외

 

여기까지 학습하셨다면 all과 any의 용법을 익히셨을 것입니다.

추가로 말씀드리면, 함수(메서드)를 연속해서 사용할 때는 연산자보다 연산 함수를 사용하는 것이

가독성을 높이는 데 도움이 됩니다.

따라서, 연산자 대신 gt 함수를 사용하는 아래 코드를 추천드립니다.

df.loc[df.gt(60).all(axis=1)]