pandas 100제: 판다스 연습문제와 풀이 · 4장

031–040 조건으로 거르기

불리언 인덱싱, &·| 조건, isin, ~, query, between, str.contains, np.where 연습문제

3분 읽기

조건에 맞는 행만 남기는 필터링 문제입니다. 준비 코드에 합계 total이 들어 있습니다.

준비 코드

이 장의 문제는 아래 코드를 먼저 실행한 상태에서 풉니다.

Pythonimport pandas as pd
import numpy as np

df = pd.DataFrame({
    'name': ['김민준', '이서연', '박지호', '최수아', '정민서', '강도윤', '윤하은', '임시우'],
    'class': ['A', 'B', 'A', 'C', 'B', 'C', 'A', 'B'],
    'kor': [85, 92, 58, 77, 66, 90, 73, 81],
    'eng': [78, 88, 64, 95, 59, 70, 82, 91],
    'math': [92, 75, 49, 88, 71, 66, 95, 60],
})
df['total'] = df['kor'] + df['eng'] + df['math']

031. 조건 하나

수학 80점 이상인 학생을 고르세요.

정답 보기
Pythondf[df['math'] >= 80]
결과     name class  kor  eng  math  total
0  김민준     A   85   78    92    255
3  최수아     C   77   95    88    260
6  윤하은     A   73   82    95    250

032. 그리고 조건

A반이면서 영어 70점 이상인 학생을 고르세요.

정답 보기
Pythondf[(df['class'] == 'A') & (df['eng'] >= 70)]
결과     name class  kor  eng  math  total
0  김민준     A   85   78    92    255
6  윤하은     A   73   82    95    250

조건마다 괄호로 감싸야 합니다.

033. 또는 조건

국어나 수학 중 하나라도 60점 미만인 학생을 고르세요.

정답 보기
Pythondf[(df['kor'] < 60) | (df['math'] < 60)]
결과     name class  kor  eng  math  total
2  박지호     A   58   64    49    171

034. 여러 값 중 하나

A반 또는 C반 학생의 name, class를 고르세요.

정답 보기
Pythondf[df['class'].isin(['A', 'C'])][['name', 'class']]
결과     name class
0  김민준     A
2  박지호     A
3  최수아     C
5  강도윤     C
6  윤하은     A

035. 조건 뒤집기

B반이 아닌 학생의 이름을 고르세요.

정답 보기
Pythondf[~(df['class'] == 'B')]['name']
결과0    김민준
2    박지호
3    최수아
5    강도윤
6    윤하은
Name: name, dtype: object

~는 참·거짓을 뒤집습니다.

036. query로 거르기

국어 점수가 영어 점수보다 높은 학생을 query로 고르세요.

정답 보기
Pythondf.query('kor > eng')
결과     name class  kor  eng  math  total
0  김민준     A   85   78    92    255
1  이서연     B   92   88    75    255
4  정민서     B   66   59    71    196
5  강도윤     C   90   70    66    226

037. 범위 안의 값

합계가 220점 이상 250점 이하인 학생을 고르세요.

정답 보기
Pythondf[df['total'].between(220, 250)]
결과     name class  kor  eng  math  total
5  강도윤     C   90   70    66    226
6  윤하은     A   73   82    95    250
7  임시우     B   81   91    60    232

between은 양 끝을 포함합니다.

038. 글자가 들어간 행

이름에 '민'이 들어간 학생을 고르세요.

정답 보기
Pythondf[df['name'].str.contains('민')]
결과     name class  kor  eng  math  total
0  김민준     A   85   78    92    255
4  정민서     B   66   59    71    196

039. 조건에 맞는 개수

수학 80점 이상인 학생은 몇 명인가요?

정답 보기
Python(df['math'] >= 80).sum()
결과3

True는 1로 계산됩니다.

040. 조건으로 값 정하기

합계 240점 이상이면 합격, 아니면 불합격인 result 열을 만들고 name, total, result를 보이세요.

정답 보기
Pythondf['result'] = np.where(df['total'] >= 240, '합격', '불합격')
df[['name', 'total', 'result']]
결과     name  total  result
0  김민준    255    합격
1  이서연    255    합격
2  박지호    171  불합격
3  최수아    260    합격
4  정민서    196  불합격
5  강도윤    226  불합격
6  윤하은    250    합격
7  임시우    232  불합격

전체 메뉴