개요
Pandas에서 데이터를 그룹화한 후 고유값(distinct)의 개수를 집계하려면 nunique를 사용하면 됩니다. 이 글에서는 groupby()로 특정 열을 기준으로 데이터를 묶고, NumPy의 sum() 함수를 활용해 합계까지 한 번에 구하는 방법을 예제와 함께 살펴보겠습니다.
필요한 라이브러리 임포트
가장 먼저 Pandas와 NumPy 라이브러리를 가져옵니다.
import pandas as pd
import numpy as npDataFrame 생성
중복 값이 포함된 3개의 열(Car, Place, Units)을 가진 DataFrame을 생성합니다.
dataFrame = pd.DataFrame(
{
"Car": ['BMW', 'Audi', 'BMW', 'Lexus', 'Lexus'],
"Place": ['Delhi', 'Bangalore', 'Delhi', 'Chandigarh', 'Chandigarh'],
"Units": [100, 150, 50, 110, 90]
}
)agg()에서 nunique로 고유값 개수 집계하기
agg() 집계 메서드에 nunique를 지정하면 그룹별 고유값 개수를 손쉽게 셀 수 있습니다. 아래 코드에서는 Units 열의 합계를 NumPy의 sum()으로, Place 열의 고유값 개수를 pd.Series.nunique로 계산합니다.
dataFrame = dataFrame.groupby("Car").agg({"Units": np.sum, "Place": pd.Series.nunique})전체 예제 코드
지금까지의 내용을 모두 포함한 전체 코드는 다음과 같습니다.
import pandas as pd
import numpy as np
dataFrame = pd.DataFrame(
{
"Car": ['BMW', 'Audi', 'BMW', 'Lexus', 'Lexus'],
"Place": ['Delhi', 'Bangalore', 'Delhi', 'Chandigarh', 'Chandigarh'],
"Units": [100, 150, 50, 110, 90]
}
)
print("DataFrame ...\n", dataFrame)
# agg()에서 nunique로 고유값 개수 집계
dataFrame = dataFrame.groupby("Car").agg({"Units": np.sum, "Place": pd.Series.nunique})
print("\nUpdated DataFrame ...\n", dataFrame)실행 결과
위 코드를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.
DataFrame ...
Car Place Units
0 BMW Delhi 100
1 Audi Bangalore 150
2 BMW Delhi 50
3 Lexus Chandigarh 110
4 Lexus Chandigarh 90
Updated DataFrame ...
Units Place
Car
Audi 150 1
BMW 150 1
Lexus 200 1결과 해석
출력 결과를 보면 Car 열을 기준으로 데이터가 그룹화된 것을 확인할 수 있습니다.
- Audi: 판매 수량 합계 150대, 판매 지역은 Bangalore 1곳
- BMW: 판매 수량 합계 150대(100 + 50), 판매 지역은 Delhi 1곳
- Lexus: 판매 수량 합계 200대(110 + 90), 판매 지역은 Chandigarh 1곳
예제 데이터에서는 각 차량이 하나의 지역에서만 판매되었기 때문에 Place 열의 고유값 개수가 모두 1로 표시됩니다. 만약 동일한 차량이 여러 지역에서 판매되었다면, 해당 차량 행에는 실제 판매 지역의 개수가 집계됩니다. 이처럼 groupby()와 agg(), nunique를 조합하면 그룹별 합계와 고유값 개수를 한 번의 연산으로 효율적으로 처리할 수 있습니다.