pandas 100제: 판다스 연습문제와 풀이 · 4장
031–040 조건으로 거르기
불리언 인덱싱, &·| 조건, isin, ~, query, between, str.contains, np.where 연습문제
조건에 맞는 행만 남기는 필터링 문제입니다. 준비 코드에 합계 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 250032. 그리고 조건
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 171034. 여러 값 중 하나
A반 또는 C반 학생의 name, class를 고르세요.
정답 보기
Pythondf[df['class'].isin(['A', 'C'])][['name', 'class']]
결과 name class
0 김민준 A
2 박지호 A
3 최수아 C
5 강도윤 C
6 윤하은 A035. 조건 뒤집기
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 226037. 범위 안의 값
합계가 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 196039. 조건에 맞는 개수
수학 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 불합격