Pandas에서 제공하는 GroupBy에 agg 함수를 사용하여 집계 하기
GroupBy 에 agg() 를 사용하여 집계하기
- List(리스트 자료형) 을 이용하여 집계 함수를 선택하여 사용
- Dictionary (딕셔너리 자료형) 을 이용하여 컬럼별로 집계 함수를 지정하여 사용
- Tuple (튜플) 을 사용하여 집계 함수에 이름 부여
데이터 정보
- Dataset : Kaggle 타이타닉 (df.head() 의 결과물)
- 👉 데이터 보러가기
|
PassengerId |
Survived |
Pclass |
Name |
Sex |
Age |
SibSp |
Parch |
Ticket |
Fare |
Cabin |
Embarked |
0 |
1 |
0 |
3 |
Braund, Mr. Owen Harris |
male |
22.0 |
1 |
0 |
A/5 21171 |
7.2500 |
NaN |
S |
1 |
2 |
1 |
1 |
Cumings, Mrs. John Bradley (Florence Briggs Th… |
female |
38.0 |
1 |
0 |
PC 17599 |
71.2833 |
C85 |
C |
2 |
3 |
1 |
3 |
Heikkinen, Miss. Laina |
female |
26.0 |
0 |
0 |
STON/O2. 3101282 |
7.9250 |
NaN |
S |
3 |
4 |
1 |
1 |
Futrelle, Mrs. Jacques Heath (Lily May Peel) |
female |
35.0 |
1 |
0 |
113803 |
53.1000 |
C123 |
S |
4 |
5 |
0 |
3 |
Allen, Mr. William Henry |
male |
35.0 |
0 |
0 |
373450 |
8.0500 |
NaN |
S |
(1) 리스트(List)
- List(리스트 자료형) 을 이용하여 집계 함수를 선택하여 사용
- agg() 안에 리스트를 넣으면, 리스트 안에 있는 집계함수를 적용할 수 있다.
# 성별로 그룹화 하여 나이, 요금을 평균, 최댓값, 최솟값, 중앙값 으로 출력하기
agg_list = ["mean", "max", "min", "median"]
df.groupby(by="Sex")[["Age", "Fare"]].agg(agg_list)
|
Age |
|
|
|
Fare |
|
|
|
|
mean |
max |
min |
median |
mean |
max |
min |
median |
Sex |
|
|
|
|
|
|
|
|
female |
27.915709 |
63.0 |
0.75 |
27.0 |
44.479818 |
512.3292 |
6.75 |
23.0 |
male |
30.726645 |
80.0 |
0.42 |
29.0 |
25.523893 |
512.3292 |
0.00 |
10.5 |
(2) 딕셔너리(Dictionary)
- Dictionary (딕셔너리 자료형) 을 이용하여 컬럼별로 집계 함수를 지정하여 사용
- agg() 안에 딕셔너리를 넣으면, 딕셔너리의 (key값 == 컬럼명) 에 대한 집계 함수를 지정할 수 있다.
- 컬럼별로 다른 집계 함수를 가져올 수 있다.
# 성별로 그룹화하여 나이는 평균, 요금은 평균, 최댓값, 최솟값 으로 출력하기
agg_dict = {"Age": ["mean"], "Fare": ["mean", "max", "min"]}
df.groupby(by="Sex")[["Age", "Fare"]].agg(agg_dict)
|
Age |
Fare |
|
|
|
mean |
mean |
max |
min |
Sex |
|
|
|
|
female |
27.915709 |
44.479818 |
512.3292 |
6.75 |
male |
30.726645 |
25.523893 |
512.3292 |
0.00 |
(3) 튜플(Tuple)
- Tuple (튜플) 을 사용하여 집계 함수에 이름 부여
- 튜플은 (이름, 함수) 로 함수에 특정 이름을 부여할 수 있다.
# 값의 범위 함수
def max_min_range(x):
max_val = np.max(x)
min_val = np.min(x)
return max_val-min_val
# 성별로 그룹화하여 나이, 요금에 대해 최댓값, 최솟값, 값의 범위 가져오기
df.groupby(by="Sex")[["Age", "Fare"]].agg([("최댓값", max), ("최솟값", min), ("범위", max_min_range)])
|
Age |
|
|
Fare |
|
|
|
최댓값 |
최솟값 |
범위 |
최댓값 |
최솟값 |
범위 |
Sex |
|
|
|
|
|
|
female |
63.0 |
0.75 |
62.25 |
512.3292 |
6.75 |
505.5792 |
male |
80.0 |
0.42 79.58 |
|
512.3292 |
0.00 |
512.3292 |
Reference
개인 공부 기록용 블로그입니다
오류나 틀린 부분이 있을 경우 댓글 혹은 메일로 따끔하게 지적해주시면 감사하겠습니다 :)
댓글남기기