단일 키와 여러 키를 사용한 GroupBy
groupby()로 하나 이상의 열을 기준으로 그룹화하고 합계, 평균, 개수, 최솟값·최댓값 집계를 적용합니다.
단일 키와 여러 키를 사용한 GroupBy은(는) CoddyKit의 무료 Pandas & NumPy Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Pandas & NumPy Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Pandas & NumPy Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
단일 키를 사용하는 GroupBy
가장 간단한 GroupBy 호출은 하나의 열을 그룹화 키로 사용합니다. df.groupby('column_name')을 호출한 뒤 집계 함수를 연결하면 됩니다. 판다스는 해당 열의 각 고유 값마다 하나의 그룹을 만들고, 모든 숫자 열 또는 선택한 열에 집계를 적용합니다. 이는 일상적인 분석에서 가장 흔히 사용하는 GroupBy 형태입니다.
import pandas as pd
df = pd.DataFrame({
'dept': ['Eng', 'HR', 'Eng', 'HR', 'Eng'],
'salary': [90000, 60000, 95000, 62000, 88000],
'years': [3, 5, 7, 2, 4]
})
print(df.groupby('dept')['salary'].mean())
# dept
# Eng 91000.0
# HR 61000.0집계할 열 선택하기
groupby()를 호출한 후 대괄호 표기법으로 열 하나를 선택하면 SeriesGroupBy를 얻고, 목록으로 여러 열을 선택하면 DataFrameGroupBy를 얻습니다. 선택을 완전히 생략하면 판다스가 모든 숫자 열을 집계합니다. 이는 편리하지만, 관련 없는 숫자 열이 있을 때 예상하지 못한 결과를 만들 수 있습니다.
# Single column result -> SeriesGroupBy
print(df.groupby('dept')['salary'].sum())
# Multiple columns result -> DataFrameGroupBy
print(df.groupby('dept')[['salary', 'years']].mean())
# salary years
# dept
# Eng 91000.0 4.667
# HR 61000.0 3.500모든 일반 집계 함수
판다스는 GroupBy 객체에서 사용할 수 있는 다양한 내장 집계 메서드를 지원합니다. 여기에는 sum(), mean(), median(), min(), max(), count(), std(), var(), first(), last()가 포함됩니다. 각 메서드는 그룹마다 하나의 스칼라를 반환하므로, 그룹화 키를 인덱스로 하는 깔끔한 요약표를 얻을 수 있습니다.
g = df.groupby('dept')['salary']
print('sum: ', g.sum())
print('mean: ', g.mean())
print('min: ', g.min())
print('max: ', g.max())
print('count: ', g.count())
print('std: ', g.std().round(2))여러 키를 사용하는 GroupBy
한 번에 둘 이상의 기준으로 그룹화하려면 groupby()에 열 이름 목록을 전달하십시오. 해당 열에서 값의 각 고유한 조합이 하나의 그룹이 됩니다. 결과에는 그룹화 열마다 하나의 수준이 있는 MultiIndex가 생성되므로, 여러 차원을 교차한 요약을 한 번에 세부적으로 확인할 수 있습니다.
df2 = pd.DataFrame({
'dept': ['Eng', 'Eng', 'HR', 'HR', 'Eng', 'HR'],
'level': ['L1', 'L2', 'L1', 'L2', 'L1', 'L1'],
'salary': [80000, 100000, 55000, 70000, 82000, 58000]
})
result = df2.groupby(['dept', 'level'])['salary'].mean()
print(result)
# dept level
# Eng L1 81000.0
# L2 100000.0
# HR L1 56500.0
# L2 70000.0MultiIndex 결과에 접근하기
여러 키를 기준으로 그룹화하면 결과 인덱스는 MultiIndex가 됩니다. .loc['value']로 특정 외부 수준에 접근하고, 튜플로 내부 수준을 탐색할 수 있습니다. reset_index()를 호출하면 MultiIndex가 일반 열로 평탄화되므로, 이후 작업이나 내보내기에 더 편리한 경우가 많습니다.
result = df2.groupby(['dept', 'level'])['salary'].mean()
# Access Engineering rows only
print(result.loc['Eng'])
# level
# L1 81000.0
# L2 100000.0
# Flatten to a regular DataFrame
print(result.reset_index())
# dept level salary
# 0 Eng L1 81000.0
# 1 Eng L2 100000.0as_index=False 사용하기
기본적으로 그룹화 열은 결과의 인덱스가 됩니다. as_index=False를 전달하면 그룹화 열이 일반 열로 유지되어, 이후 판다스 작업에 전달하거나 내보내기 쉬운 평평한 DataFrame을 얻을 수 있습니다. 이는 결과에 reset_index()를 호출하는 것과 같습니다.
flat = df2.groupby(['dept', 'level'], as_index=False)['salary'].mean()
print(flat)
# dept level salary
# 0 Eng L1 81000.0
# 1 Eng L2 100000.0
# 2 HR L1 56500.0
# 3 HR L2 70000.0그룹별 행 개수 세기
count()는 각 그룹에서 널이 아닌 값의 개수를 반환합니다. 널 값과 관계없이 그룹별 전체 행 개수를 구하려면 size()를 사용하십시오. 데이터에 누락된 값이 있을 때 이 차이가 중요합니다. count()는 NaN 항목이 있는 그룹의 개수를 실제보다 적게 계산하기 때문입니다.
import numpy as np
df3 = pd.DataFrame({
'dept': ['Eng', 'Eng', 'HR', 'HR'],
'bonus': [5000, np.nan, 3000, 4000]
})
print(df3.groupby('dept')['bonus'].count()) # ignores NaN
# dept
# Eng 1
# HR 2
print(df3.groupby('dept')['bonus'].size()) # includes NaN rows
# dept
# Eng 2
# HR 2GroupBy 결과 정렬하기
기본적으로 GroupBy는 그룹 키를 기준으로 결과를 정렬합니다. sort=False를 사용하면 정렬을 비활성화하고 처음 나타난 순서를 유지할 수 있으며, 큰 데이터셋에서는 조금 더 빠르게 처리됩니다. 결과를 DataFrame으로 얻은 후에는 모든 열에 대해 sort_values()를 사용하여 추가로 정렬할 수 있습니다.
result = (df.groupby('dept', sort=False)['salary']
.mean()
.reset_index()
.sort_values('salary', ascending=False))
print(result)
# dept salary
# 0 Eng 91000.0
# 1 HR 61000.0GroupBy와 다른 메서드 연결하기
GroupBy 결과는 일반적인 Series 또는 DataFrame이므로 즉시 다른 판다스 메서드를 연결할 수 있습니다. 일반적인 패턴은 집계한 다음 reset_index()를 호출하고, 열 이름을 바꾼 후, sort_values()로 정렬하는 것입니다. 중간 변수를 저장하지 않고도 이 모든 작업을 읽기 쉬운 하나의 메서드 연결로 작성할 수 있습니다.
summary = (
df
.groupby('dept')['salary']
.agg(['mean', 'count'])
.rename(columns={'mean': 'avg_salary', 'count': 'headcount'})
.reset_index()
.sort_values('avg_salary', ascending=False)
)
print(summary)sum, mean, count 함께 적용하기
그룹마다 둘 이상의 통계가 필요한 경우가 많습니다. .agg()에 함수 이름 목록을 전달하면 여러 통계를 한 번에 계산할 수 있습니다. 결과는 함수마다 하나의 열이 있는 DataFrame입니다. 판다스가 데이터를 한 번만 순회하면서 모든 집계를 처리하므로, 각 집계를 따로 호출하는 것보다 효율적입니다.
result = df.groupby('dept')['salary'].agg(['sum', 'mean', 'count', 'max'])
print(result)
# sum mean count max
# dept
# Eng 273000 91000.0 3 95000
# HR 122000 61000.0 2 62000범주형 열을 기준으로 그룹화하기
그룹화 열의 자료형이 Categorical이면 판다스는 기본적으로 행이 없는 범주까지 결과에 모두 포함합니다. 이렇게 하면 요약표에 항상 모든 범주가 표시되도록 할 수 있지만, 빈 그룹에 대해 NaN 또는 0이 있는 행이 생성됩니다. observed 매개변수로 이를 제어할 수 있으며, 빈 범주를 제외하려면 True로 설정하십시오.
df['dept'] = df['dept'].astype('category')
# With observed=True, only groups that appear in data are included
print(df.groupby('dept', observed=True)['salary'].mean())
# dept
# Eng 91000.0
# HR 61000.0빠른 확인
이 단원에서 배운 단일 키 및 여러 키를 사용하는 GroupBy에 대한 이해도를 확인해 보십시오.
단원 요약
이 단원에서는 단일 열을 기준으로 그룹화하고 일반적인 집계를 적용하는 방법, 여러 열을 기준으로 그룹화하여 여러 차원을 교차한 요약을 만드는 방법, 그리고 널 값이 있을 때 count()와 size()의 차이를 배웠습니다. 다음으로는 한 번의 호출로 여러 통계를 계산할 수 있는 강력한 agg() 메서드를 살펴봅니다.
AI 튜터와 함께 Python을(를) 배우세요 — 무료
브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.
- 코스
- 30
- 레슨
- 120
자주 묻는 질문
“단일 키와 여러 키를 사용한 GroupBy” 강의는 무료인가요?
네 — “단일 키와 여러 키를 사용한 GroupBy” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Pandas & NumPy Academy 강의 전체를 잠금 해제할 수 있습니다. Pandas & NumPy Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“단일 키와 여러 키를 사용한 GroupBy”에서 뭘 배우나요?
groupby()로 하나 이상의 열을 기준으로 그룹화하고 합계, 평균, 개수, 최솟값·최댓값 집계를 적용합니다. 브라우저에서 직접 실행하는 실습 코드로 Pandas & NumPy Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Pandas & NumPy Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Pandas & NumPy Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“단일 키와 여러 키를 사용한 GroupBy” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Pandas & NumPy Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Pandas & NumPy Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 분할-적용-결합 패턴
- 단일 키와 여러 키를 사용한 GroupBy
- agg() 메서드
- GroupBy 변환과 필터링