데이터 구간 나누기
- 동일한 범위로 나누기
pd.cut(data, bins, labels)
: 데이터의 구간 길이를 동일한 범위로 나눠주는 함수. 절대평가와 비슷- labels=False : 구간 명칭을 인덱스 번호로 자동으로 매겨줌
# 점수 데이터프레임
score = {"class" : ["A", "A", "A", "B", "B", "C"],
"math" : [50, 90, 75, 55, 80, 45],
"english" : [70, 80, 65, 75, 85, 60]}
df = pd.DataFrame(score)
# 동일한 범위의 구간으로 나누기
df["math_grade"] = pd.cut(df["math"], 3, labels=["3등급", "2등급", "1등급"])
>> 결과
class math english math_grade
0 A 50 70 3등급
1 A 90 80 1등급
2 A 75 65 2등급
3 B 55 75 3등급
4 B 80 85 1등급
5 C 45 60 3등급
math_grade 구간 : (44.955, 60.0], (75.0, 90.0], (75.0, 90.0]
- 빈도수에 따라 나누기
pd.qcut(data, bins, labels)
: 데이터를 빈도수에 따라 나누어 주는 함수. 상대평가와 비슷- 구간이 많아지면, 해당 구간에 없는 값이 생길 수도 있음
- 해당 구간에 존재하는 값이 없을 경우에는 해당 구간은 조회되지 않음
# 점수 데이터프레임
score = {"class" : ["A", "A", "A", "B", "B", "C"],
"math" : [50, 90, 75, 55, 80, 45],
"english" : [70, 80, 65, 75, 85, 60]}
df = pd.DataFrame(score)
# 빈도수에 따라 구간 나누기
df["math_grade"] = pd.qcut(df["math"], 3, labels=["3등급", "2등급", "1등급"])
>> 결과
class math english math_grade
0 A 50 70 3등급
1 A 90 80 1등급
2 A 75 65 2등급
3 B 55 75 2등급
4 B 80 85 1등급
5 C 45 60 3등급
math_grade 구간 : (44.999, 53.333], (53.333, 76.667], (76.667, 90.0]
- 구간별 그룹화하기
groupby(pd.cut())
: 구간별 그룹화하기
# 점수 데이터프레임
score = {"class" : ["A", "A", "A", "B", "B", "C"],
"math" : [50, 90, 75, 55, 80, 45],
"english" : [70, 80, 65, 75, 85, 60]}
df = pd.DataFrame(score)
df_group = df["math"].groupby(pd.cut(df["math"], 3))
df_group.groups
>> 결과
# 구간에 해당하는 데이터의 인덱스 번호 출력
{(44.955, 60.0]: [0, 3, 5], (60.0, 75.0]: [2], (75.0, 90.0]: [1, 4]}
agg(["count", "mean", "std", "min", "max"])
: 그룹별 기초통계 확인하기
# 그룹별 기초통계 확인하기
df_group.agg(["count","mean","std","min","max"])
>> 결과
count mean std min max
math
(44.955, 60.0] 3 50.0 5.000000 45 55
(60.0, 75.0] 1 75.0 NaN 75 75
(75.0, 90.0] 2 85.0 7.071068 80 90