pandas.DataFrame.groupby
데이터를 그룹화하고, 그룹별로 연산을 수행할 수 있도록 돕는 함수
분할(splitting), 적용(applying), 결합(combining) 의 과정
1. 그룹화의 세 단계
- 분할(Splitting): 특정 기준에 따라 데이터를 여러 그룹으로 나눔
- 적용(Applying): 각 그룹에 독립적으로 함수를 적용
- 결합(Combining): 각 그룹에서 계산된 결과를 하나의 데이터 구조로 결합
2. 적용 단계 세 가지 유형
- 집계(Aggregation): 각 그룹에 대한 요약 통계량 계산 (예: 합계, 평균 등)
- 변환(Transformation): 특정 계산 수행 후 원래와 동일한 인덱스를 가진 객체 반환. (예: 그룹 별 표준화 혹은 결측치 보완)
- 필터링(Filtration): 특정 조건에 따라 그룹 선택 혹은 제외
주요 매개변수
1. by : 그룹화 기준 지정
df = pd.DataFrame({
'A': ['kim', 'lee', 'park', 'park', 'lee'],
'B': [1, 2, 3, 4, 5],
'C': [10, 20, 30, 40, 50]
})
- mapping: 특정 값을 다른 값으로 매핑하는 객체를 전달
# mapping
mapping = {'kim': 'group1', 'lee': 'group2', 'park': 'group1'}
grouped = df.groupby(by=mapping)
grouped
B C
group1 8 80
group2 7 70
- function: 인덱스나 데이터프레임의 각 값을 입력으로 받아 그룹화 기준을 생성
# function
grouped = df.groupby(by=lambda x: df.loc[x, 'B'] % 2).sum()
grouped
B C
0 6 90
1 9 60
- label(열 이름), 리스트 : 특정 열 이름 또는 여러 열을 기준으로 그룹화
grouped = df.groupby(by=['A', 'B']).sum()
grouped
C
A B
kim 1 10
lee 2 20
5 50
park 3 30
4 40
- pd.Grouper : 시간 데이터를 그룹화하거나, 특정 레벨의 데이터를 다루기 위해 groupby와 함께 사용하는 유틸리티 클래스. 주로 시간 기반 데이터의 그룹화를 단순화하거나, 다중 인덱스 데이터에서 특정 레벨을 그룹화할 때 유용
df_time = pd.DataFrame({
'date': pd.date_range(start='2023-01-01', periods=6, freq='D'),
'value': [10, 20, 30, 40, 50, 60]
})
# date를 2일 단위로 그룹화
grouped_time = df_time.groupby(pd.Grouper(key='date', freq='2D'))
grouped_time.sum()
value
date
2023-01-01 30
2023-01-03 70
2023-01-05 110
- 사전(dict) 또는 시리즈(Series): 사전/시리즈의 값이 그룹화 기준이 됨
- 튜플(tuple): 단일 키로 해석
2. axis (default 0)
- 0: 행(index) 기준으로 그룹화
- 열 기준으로 그룹화하려면 frame.T.groupby(...)를 사용해야 함
3. level : 데이터프레임이 다중 인덱스(MultiIndex)인 경우, 특정 수준(level)에서 그룹화
- 수준 번호(int) 또는 수준 이름(str).
- 여러 수준을 지정하려면 리스트로 전달.
- by와 level을 동시에 지정 불가
4. as_index (default True): 그룹 키를 결과의 인덱스로 사용할지 여부
5. sort (default True) : 그룹 키를 정렬할지 여부
6. group_keys (default True) : apply를 호출할 때 그룹 키를 결과 인덱스에 추가할지 여부
7. observed (default False): 범주형(Categorical) 데이터 그룹화 시 사용
- True: 관찰된 값만 표시
- False(기본값): 범주형 데이터의 모든 값을 표시
8. dropna (default True): 그룹 키에 NA 값이 포함될 경우 해당 그룹을 제외할지 여부
- True(기본값): NA 그룹 제외
- False: NA 값을 포함한 그룹 생성
반환값
DataFrameGroupBy 객체 반환
'Python' 카테고리의 다른 글
[pandas] iloc와 loc 인덱싱, 사용법과 차이점 (0) | 2025.01.09 |
---|---|
[pandas] transform 함수로 데이터 변환하기 (0) | 2024.12.11 |
[pandas] 데이터 병합 - merge, join (2) | 2024.12.06 |
[pandas] DataFrame.rank, 관련 문제 Leetcode 《178. Rank Scores》 (0) | 2024.12.03 |