Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python Pandas groupby로 그룹별 고유 값 개수 계산하기

Python Pandas에서 그룹별 값 개수 또는 고유 값을 계산하려면 df.groupby('열이름').count() 메서드를 사용하면 됩니다. 이 글에서는 예제 코드와 실행 결과를 통해 그룹별 집계 방법을 단계별로 살펴봅니다.

핵심 개념 정리

groupby()는 지정한 열의 값을 기준으로 데이터를 그룹으로 묶는 기능을 하고, count()는 각 그룹에 포함된 결측값(null)을 제외한 값의 개수를 반환합니다. 두 메서드를 조합하면 특정 열을 기준으로 한 그룹별 빈도표를 손쉽게 만들 수 있습니다.

단계별 접근 방법

  1. 2차원 표 형태의 가변 크기 데이터 구조인 DataFrame df를 생성합니다.
  2. 입력 DataFrame df를 화면에 출력합니다.
  3. df.groupby('rank')['id'].count()를 호출하여 'rank' 열 기준 그룹별 'id' 값의 개수를 구하고 변수 count에 저장합니다.
  4. 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()를 선택하여 사용하면 됩니다.