Python

[pandas] groupby 정리

루루23 2024. 12. 11. 00:21
반응형

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 객체 반환

반응형