Python Pandas에서 그룹별 값 개수 또는 고유 값을 계산하려면 df.groupby('열이름').count() 메서드를 사용하면 됩니다. 이 글에서는 예제 코드와 실행 결과를 통해 그룹별 집계 방법을 단계별로 살펴봅니다.
핵심 개념 정리
groupby()는 지정한 열의 값을 기준으로 데이터를 그룹으로 묶는 기능을 하고, count()는 각 그룹에 포함된 결측값(null)을 제외한 값의 개수를 반환합니다. 두 메서드를 조합하면 특정 열을 기준으로 한 그룹별 빈도표를 손쉽게 만들 수 있습니다.
단계별 접근 방법
- 2차원 표 형태의 가변 크기 데이터 구조인 DataFrame df를 생성합니다.
- 입력 DataFrame df를 화면에 출력합니다.
- df.groupby('rank')['id'].count()를 호출하여 'rank' 열 기준 그룹별 'id' 값의 개수를 구하고 변수 count에 저장합니다.
- 3단계에서 구한 결과를 출력합니다.
예제 코드
import pandas as pd
df = pd.DataFrame(
{
"id": [1, 2, 1, 3, 5, 1, 4, 3, 6, 7],
"rank": [1, 4, 1, 2, 1, 4, 6, 1, 5, 3]
}
)
print("입력 DataFrame:\n", df)
count = df.groupby('rank')['id'].count()
print("rank별 빈도:\n", count)
실행 결과
입력 DataFrame:
id rank
0 1 1
1 2 4
2 1 1
3 3 2
4 5 1
5 1 4
6 4 6
7 3 1
8 6 5
9 7 3
rank별 빈도:
rank
1 4
2 1
3 1
4 2
5 1
6 1
Name: id, dtype: int64
결과 해석
'rank' 값이 1인 행은 총 4개, 4인 행은 2개이며, 나머지 rank 값(2, 3, 5, 6)은 각각 1개씩 존재합니다. 이처럼 groupby().count()는 범주형 데이터의 분포를 파악할 때 매우 유용하게 활용됩니다.
응용: 중복을 제외한 고유 값 개수 구하기
count()는 중복 값을 모두 포함하여 개수를 세지만, 그룹 내에서 서로 다른 값만 세고 싶다면 nunique()를 사용하는 것이 좋습니다.
unique_count = df.groupby('rank')['id'].nunique()
print("rank별 고유 id 개수:\n", unique_count)
rank별 고유 id 개수: rank 1 3 2 1 3 1 4 2 5 1 6 1 Name: id, dtype: int64
rank 1 그룹의 id는 [1, 1, 5, 3]으로 총 4개이지만, 중복을 제거하면 {1, 3, 5}의 3개이므로 nunique() 결과는 3으로 표시됩니다. 상황에 맞게 count()와 nunique()를 선택하여 사용하면 됩니다.