데이터 분석을 위한 GroupBy 메서드는 Pandas 라이브러리의 매우 강력한 도구로 거의 모든 분석에서 필수적으로 사용됩니다. 특정 기준에 따라 대규모 데이터 세트를 더 작은 그룹으로 분할 및 요약할 수 있습니다. 이러한 작업은 통계 계산 또는 데이터 집계와 같은 다양한 작업에 유용하게 활용됩니다. 이는 일반적인 sql 쿼리문 중 “group by”와 동일한 명령문이라고 이해하시면 됩니다. 다만, sql구문과 pandas 구문의 활용법이 달라 조금은 낯설게 느껴질 수 있지만, 자주 사용하다 보면 금방 익숙해 질 수 있습니다.
가장 빈번하게 기본적으로 활용할 수 있는 용도는 데이터 집합을 단일 열로 그룹화 하는 것입니다. 예를 들어 아래와 같이 학생 이름, 수강 중인 과정 및 성적에 대한 열이 포함된 가상의 데이터 세트가 있다고 가정해 보겠습니다.
GroupBy 구문 활용 방법
import pandas as pd
df = pd.DataFrame({‘name’: [‘Alice’, ‘Bob’, ‘Charlie’, ‘Alice’, ‘Bob’, ‘Charlie’],
‘course’: [‘math’, ‘science’, ‘english’, ‘math’, ‘science’, ‘english’],
‘grade’: [90, 80, 95, 85, 75, 95]})
df
name | course | grade | |
---|---|---|---|
0 | Alice | math | 90 |
1 | Bob | science | 80 |
2 | Charlie | english | 95 |
3 | Alice | math | 85 |
4 | Bob | science | 75 |
5 | Charlie | english | 95 |
GroupBy 메서드를 사용하여 다음과 같이 “course” 별로 데이터를 그룹화할 수 있습니다.
(물론 “name”별로도 데이터를 그룹화할 수 있습니다.)
grouped = df.groupby(‘course’)
grouped
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x00000255B3CC2EE0>
이렇게 하면 그룹에서 다양한 작업을 수행할 수 있는 GroupBy 개체가 생성됩니다. 예를 들어 다음과 같이 각 과정의 평균 성적을 계산할 수 있습니다.
meanGrades = grouped.mean()
print(meanGrades)
grade course english 95.0 math 87.5 science 77.5
그룹에 대해 더 복잡한 작업을 수행할 수도 있습니다. 예를 들어, 성적을 기준으로 각 과정에서 상위 3명의 학생을 찾고 싶다고 가정해 보겠습니다. apply 메서드와 사용자 정의 함수를 사용하여 이를 수행할 수 있습니다.
def top_three(group):
ooooreturn group.sort_values(by=’grade’, ascending=False).head(3)
top_students = grouped.apply(top_three)
print(top_students)
name course grade course english 2 Charlie english 95 5 Charlie english 95 math 0 Alice math 90 3 Alice math 85 science 1 Bob science 80 4 Bob science 75
단일 열을 기준으로 그룹화하는 것 뿐만 아니라 GroupBy 메서드를 사용하면 여러 열을 기준으로 그룹화할 수도 있습니다. 예를 들어 “course”와 “name”으로 그룹화한다고 가정해 보겠습니다. 아래와 같이 수행할 수 있습니다.
grouped = df.groupby([‘course’, ‘name’])
meanGrades = grouped.mean()
print(meanGrades)
grade course name english Charlie 95.0 math Alice 87.5 science Bob 77.5
GroupBy 방법은 Pandas에서 대규모 데이터 세트로 작업하고 분석하기 위한 매우 강력한 도구입니다. 데이터를 더 작은 그룹으로 분할하고 해당 그룹에 대해 다양한 작업을 수행할 수 있으므로 통계 및 집계를 쉽게 계산하고 정렬 및 필터링과 같은 보다 복잡한 작업을 수행할 수 있습니다.