메서드 | 설명 |
count | NA가 아닌 값의 수 반환 |
sum | NA가 아닌 값들의 합을 구함 |
mean | NA가 아닌 값들의 평균을 구함 |
median | NA가 아닌 값들의 산술 중간값(50% 분위) 반환 |
min, max | NA가 아닌 값들 중 최솟값, 최댓값 계산 |
quantile | 0 부터 1까지의 분위수를 계산 |
std, var | 편향되지 않은(n-1을 분모로 하는) 표준편차와 분산 |
cumsum | 누적합 계산 |
argmin, argmax | 각각 최솟값과 최댓값을 담고 있는 색인의 위치(정수) 반환 |
idxmin, idxmax | 각각 최솟값과 최댓값을 담고 있는 색인의 값 반환 |
mad | 평균값에서 평균절대편차 계산 |
prod | 모든 값의 곱 |
skew | 표본비대칭도(3차 적률)의 값 계산 |
kurt | 표본첨도(4차 적률)의 값 계산 |
cummin, cummax | 각각 누적 최솟값과 누적 최댓값 계산 |
cumprod | 누적곱 계산 |
diff | 1차 산술차 계산(시계열 데이터 처리 시 유용) |
pct_change | 퍼센트 변화율 계산 |
집계함수는 agg 함수와 함께 사용할 수 있다. 예를 들어 특정 변수의 전체 평균을 구하고 싶다면 다음과 같이 구한다.
df['특정변수'].mean()
# 또는
df.agg(평균_과학 = ('특정변수','mean'))
Python
복사
agg 함수는 보통 groupby 함수와 같이 각 집단을 요약한 값, 즉 집단별 요약 통계값을 구하고 싶을 때 사용한다.
1) 그룹화 : groupby
데이터 집합에서 동일한 값을 가진 대상끼리 묶어서 새로운 통계값을 구하는 함수다. groupby 함수는 데이터 집합을 자연스럽게 나누고 요약한다.
특정 값을 가지고 있는 데이터 선택하기 : get_group
특정 값을 가지고 있는 데이터만 선별해서 가져오려면 groupby 함수로 그룹을 나눈 뒤 get_group 메서드를 체이닝하면 된다.
예를 들어, 과별로 그룹을 나눈 뒤 그 중 ‘이과’ 인 데이터만 가져오고 싶다면 다음과 같이 사용한다.
data = {'이름' : ['피카츄', '잠만보', '파이리', '꼬부기', '이상해씨', '디그다', '야도란', '뮤'],
'학교': ['포켓몬고', '포켓몬고', '포켓몬고', '포켓몬고', '디지몬고', '디지몬고', '포켓몬고', '포켓몬고'],
'학년': [3, 1, 2, 1, 2, 1, 3, 3],
'반': [1, 1, 5, 3, 2, 4, 6, 6],
'과' : ['이과', '이과', '문과', '이과', '문과', '이과', '예체능', '이과'],
'국어' : [24, 47, 60, 37, 55, 26, 26, 30],
'수학' : [47, 18, 84, 22, 68, 91, 17, 43],
'영어' : [63, 5, 22, 31, 10, 80, 27, 33],
'사회' : [84, 91, 30, 85, 46, 100, 71, 89],
'과학' : [54, 40, 42, 8, 12, 77, 18, 16],
'희망전공' : ['전기공학과', '전기공학과', '컴퓨터공학과', '정원학과', '항공학과', '항공학과', '화학과', 'NaN']}
df = pd.DataFrame(data)
df.groupby('과').get_group('이과') # 과별로 집단을 묶은 뒤 값이 이과인 데이터 가져오기
Python
복사
요약 통계값 구하기
데이터를 특정 그룹으로 묶은 뒤 요약 통계를 구해보겠다.
1) 전체 열
열별로 요약 통계값을 구하려면 groupby 함수에 집계함수를 체이닝하면 된다. 다음은 학교별 모든 변수의 평균을 구하는 코드다
df.groupby('학교').mean() # 학교별 모든 과목의 평균 구하기
Python
복사
2) 특정 열
특정 열에 대해서만 선택적으로 요약 통계값을 구하고 싶다면 groupby 함수와 agg 함수를 조합해서 사용하면 된다. 다음은 집단을 학교별로 그룹한 뒤 특정 과목의 평균을 구하는 코드다. 아래의 코드는 모두 동일한 결과를 반환한다.
df.groupby('학교').mean()['수학'] # 학교별 수학 평균을 Series 로 반환
df.groupby('학교')['수학'].mean()
df['수학'].groupby(df['학교']).mean()
Python
복사
# agg() 를 이용하면 결과는 dataframe 으로 반환된다
df.groupby('학교').agg(평균_수학 = ('수학','mean'))
Python
복사
3) 특정 집단
여러 개의 하위 집단별 요약 통계값을 구할 수도 있다. 다음은 학교별, 과별 수학 과목의 평균을 구하는 코드다.
df.groupby(['학교','과']).agg(평균_수학 = ('수학','mean'))
Python
복사
빈도수
df.groupby('학교')[['이름','희망전공']].count() # 학교별 희망전공 수 구하기
Python
복사
크기
그룹의 크기를 구하고 싶다면 size 함수를 사용하면 된다. 그룹의 크기를 담고 있는 시리즈를 반환하는 함수다.
Python
복사