본문 바로가기
카테고리 없음

[판다스 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)]