어떤 데이터를 구간에 따라 나눠서 새로운 값을 지정하고 싶을 때가 있다. if 문을 활용해 지정할 수도 있겠지만 판다스에는 더욱 효율적인 방법이 존재한다.
cut은 절대평가이다. 특정 점수를 부여하면 그 점수를 경계로 성적이 부여되는 절대평가와 비슷하고, qcut은 상위 몇 %인지에 따라 성적이 부여되는 상대평가와 비슷하다.
출처
9명의 학생의 점수가 다음과 같이 있을 때 수학과 영어 등급을 매기고자 한다.
df = pd.DataFrame(
{'수학점수' : [55, 73, 100, 90, 85, 62],
'영어점수' : [100, 88, 99, 70, 52, 79]},)
수학점수는 상대평가로 등급이 결정되고, 영어점수는 절대평가로 등급이 결정된다고 할 때 다음 6명의 학생의 수학과 영어 등급을 각각 새로운 열로 할당하고자 한다.
이상 | 이하 | |
---|---|---|
1등급 | 90 | 100 |
2등급 | 80 | 89 |
3등급 | 70 | 79 |
4등급 | 0 | 69 |
영어 등급은 절대평가니 cut()을 사용해보자.
grades = ['4등급', '3등급', '2등급', '1등급']
cut_bins = [0, 69, 79, 89, 100]
df['영어등급'] = pd.cut(df['영어점수'], bins = cut_bins, labels = grades)
cut() 오류해결
수학은 상대평가니 qcut()을 활용한다.
다음과 같은 평가 기준이 있을 때 등급을 나눠보자.
pd.qcut(x, q, labels=None, retbins = False, precision = 3, duplicates = 'raise')
기본 사용법은 다음과 같고, 더 자세한 활용이 궁금하다면 여기 클릭
grades = ['4등급', '3등급', '2등급', '1등급']
df['수학등급'] = pd.qcut(df['수학점수'], 4, labels = grades)
pd.qcut(df['수학점수'],q=4)
사분위수의 경우, describe()로 출력 가능하다.
df['수학점수'].describe()