Pandas에서 제공하는 GroupBy에 agg 함수를 사용하여 집계 하기


GroupBy 에 agg() 를 사용하여 집계하기

  • List(리스트 자료형) 을 이용하여 집계 함수를 선택하여 사용
  • Dictionary (딕셔너리 자료형) 을 이용하여 컬럼별로 집계 함수를 지정하여 사용
  • Tuple (튜플) 을 사용하여 집계 함수에 이름 부여

데이터 정보

  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


개인 공부 기록용 블로그입니다
오류나 틀린 부분이 있을 경우 댓글 혹은 메일로 따끔하게 지적해주시면 감사하겠습니다 :)

댓글남기기