Python/Pandas

[Pandas] 파이썬 판다스 그룹화 하기 : groupby 함수

jimmy_AI 2021. 11. 16. 14:07
반응형

파이썬 판다스에서 데이터프레임을 원하는 열을 기준으로 그룹화하여 필요한 정보를 얻어낼 수 있는 groupby 함수의 사용법에 대해서 자세히 다루어보도록 하겠습니다.

 

판다스 그룹화 : Pandas groupby 함수

우선, 다음과 같은 데이터프레임이 df라는 변수에 저장되어 있다고 가정해보겠습니다.

이름, 학급, 성별, 국적, 점수 5개의 column으로 이루어진 간단한 데이터프레임입니다.

국적 column에는 일부 결측치도 있다고 가정해보겠습니다.

 

groupby 사용법 1 : 그룹화 한 후 특정 column 대상 개수 세기, 평균 내기

첫 번째로, 학급을 기준으로 각 column의 유효 element 개수(결측치 제외한 값의 개수)를 세어보도록 하겠습니다.

df.groupby('class').count()

이름, 성별, 점수 column은 결측치가 없기 때문에 row의 개수를 그대로 반환하는 반면, 국적 column에서는 결측치인 NaN값이 있기에 해당 row가 제외된 개수가 반환되었습니다.

 

그룹화 결과를 변수에 저장하여 loc 함수 인덱싱 등도 가능합니다.

group_ex = df.groupby('class').count()
group_ex.loc[1, 'name'] # 1반의 'name' column 유효 element 개수, 4가 출력

 

두 번째는 각 학급의 점수 평균을 구해보도록 하겠습니다. 다음 코드를 확인해볼까요?

df.groupby('class')['score'].mean()

class 열로 그룹화를 해준 뒤, score 열만을 추출하고 그 이후 평균을 구해주면 됩니다.

1반은 93점, 2반은 85.5점의 평균을 가진다는 것을 알 수 있을 것입니다.

 

groupby 사용법 2 : 여러개의 column을 대상으로 그룹화

이번에는 2개 이상의 column을 대상으로 그룹화하는 경우에 대해서 다루어보도록 하겠습니다.

우선, 각 학급의 각 성별 당 column마다의 유효 element 개수를 살펴볼까요?

df.groupby(['class', 'gender']).count()

groupby 함수 안에 여러 column을 리스트 형태로 묶어서 넣어주면 됩니다. 출력은 아래와 같습니다.

이번에는 각 학급, 성별마다 점수의 평균을 그룹화하여 구해보도록 하겠습니다.

다만, 데이터프레임 형태로 결과를 보면서 내림차순으로 결과를 살펴보고 싶다고 가정하겠습니다.

pd.DataFrame(df.groupby(['class', 'gender'])['score'].mean()).sort_values(by = 'score', ascending = False)

pd.DataFrame을 앞에 넣어주어 Series가 아닌 데이터프레임 형태로 결과를 받아볼 수 있으며,

score 열을 대상으로 ascending = False로 지정하여 내림차순으로 그룹들의 점수 평균 결과를 받아볼 수 있었습니다.

 

여기까지 판다스에서 가장 많이 사용하는 함수 중 하나인 groupby 함수의 기본적인 사용법에 대해서 다루어보았습니다.

실제 groupby 함수가 제공하는 기능은 더욱 다양하나(공식 document 참조), 이 포스팅에서 다룬 기능정도만 아시더라도 기본적인 데이터 분석 과정에서는 사용 가능하실 것입니다.