[Python] pandas 사용하기 (4) - groupby사용하기(+ agg 사용)

Programming/PYTHON

[Python] pandas 사용하기 (4) - groupby사용하기(+ agg 사용)

tnddj1219 2022. 9. 9. 22:08
728x90

groupby란?
연산자를 사용하여 집단, 그룹별로 데이터를 집계, 요약하는 방법

전체 데이터를 그룹 별로 나누고 (split), 각 그룹별로 집계함수를 적용(apply) 한후, 그룹별 집계 결과를 하나로 합치는(combine) 단계를 거치게 된다.

 

예시

아래와 같은 DataFrame이 있다고 가정한다.

df=pd.DataFrame({
    'key':['A','A','B','B','B','C','C','D'],
    'key1':['a','a','a','a','b','a','b','a'],
    'MIN':[1,2,2,3,5,NaN,8,5],
    'MAX':[3,4,4,4,8,4,10,7]})

1. 특정 column 기준으로 그룹화
groupby 함수를 사용하여 특정 column을 그룹화 한 후, 평균 / 최소값 / 최대값 / 개수 등을 구할 수 있다.
단, NaN값은 제외하고 계산하게 된다.

- 평균: mean() / 최소값: min() / 최대값: max() / 개수: count() / 중간값: median()

- 표준편차: std() / 분산: var() / 특정백분위: quantile()

- 전반적인 지표: describe()

df[['key','data','data1']].groupby(['key']).mean()

 

여러 개의 column을 기준으로도 구할 수 있다.

df.groupby(['key','key1']).min()

index를 사용하고 싶지 않은 경우, as_index=False 옵션을 사용하면 아래와 같은 결과가 나온다.

df.groupby(['key','key1'],as_index=False).mean()

2. agg 함수 사용하기

agg 함수를 사용하면 그룹조건이 여러개가 되는 경우가 있고 한번에 여러 컬럼을 다르게 연산 할 수 있다.

또한 문자열 같은 경우, join 하여 한 줄에 표기 할 수 있다.

df.groupby('key').agg({'key1':','.join,'data':'min','data1':'mean'})

중복을 제거하고 싶으면 아래와 같이 set을 사용할 수 있다.

df.groupby('key').agg({'key1':lambda x: ','.join(set(x))})

728x90