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

Pandas 다중 인덱스(MultiIndex) DataFrame에서 groupby 사용하는 방법

Pandas 다중 인덱스(MultiIndex)란 무엇인가?

다중 인덱스 데이터프레임(MultiIndex DataFrame)은 하나가 아닌 두 개 이상의 인덱스를 가지는 데이터프레임을 말합니다. 여러 계층의 인덱스를 활용하면 복잡한 데이터를 체계적으로 구성하고, 인덱스 수준별로 손쉽게 그룹화하거나 집계할 수 있다는 장점이 있습니다.

이번 글에서는 데스크톱에 저장된 다음과 같은 CSV 파일(sales.csv)을 예시로 사용합니다.

Pandas 다중 인덱스(MultiIndex) DataFrame에서 groupby 사용하는 방법

1단계: Pandas 라이브러리 임포트 및 CSV 파일 불러오기

먼저 pandas 라이브러리를 임포트한 후, 앞서 언급한 CSV 파일을 읽어옵니다.

import pandas as pd

df = pd.read_csv("C:/Users/amit_/Desktop/sales.csv")
print(df)

2단계: 'Car'와 'Place' 열을 인덱스로 설정하기

set_index() 메서드를 사용하면 데이터프레임의 특정 열을 인덱스로 지정할 수 있습니다. 여기서는 'Car'(차량) 열과 'Place'(지역) 열을 인덱스로 설정합니다.

df = df.set_index(['Car', 'Place'])

이제 해당 데이터프레임은 'Car'와 'Place' 열을 인덱스로 갖는 다중 인덱스 데이터프레임이 되었습니다.

3단계: 다중 인덱스 데이터프레임에 groupby 적용하기

다중 인덱스 데이터프레임에서는 groupby() 함수의 level 매개변수를 활용하여 특정 인덱스 수준을 기준으로 그룹화할 수 있습니다. 아래 코드는 'Car' 인덱스를 기준으로 그룹화한 뒤, 'UnitsSold'(판매 대수) 열의 평균값을 계산합니다.

res = df.groupby(level=['Car'])['UnitsSold'].mean()
print(res)

전체 예제 코드

지금까지의 과정을 하나의 코드로 정리하면 다음과 같습니다.

import pandas as pd

df = pd.read_csv("C:/Users/amit_/Desktop/sales.csv")
print(df)

# 'Car'와 'Place' 열을 데이터프레임의 인덱스로 설정
df = df.set_index(['Car', 'Place'])

# 인덱스 정렬
df.sort_index()

# 다중 인덱스 데이터프레임에 groupby 적용
res = df.groupby(level=['Car'])['UnitsSold'].mean()
print(res)

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

           Car        Place      Sold
0 BMW Delhi 95
1 Mercedes Hyderabad 80
2 Lamborgini Chandigarh 80
3 Audi Bangalore 75
4 Mercedes Hyderabad 90
5 Porsche Mumbai 90
6 RollsRoyce Mumbai 95
7 BMW Delhi 50

Car
Audi 75.8
BMW 72.5
Lamborgini 80.0
Mercedes 85.0
Porsche 90.0
RollsRoyce 95.0
Name: UnitsSold, dtype: float64

결과 해석

출력 결과를 보면 원본 데이터에는 동일한 차종이 여러 번 등록되어 있지만(예: BMW는 Delhi에서 두 번 판매), groupby(level=['Car'])를 통해 차종별로 데이터가 묶였습니다. 그 결과 각 차량 브랜드별 평균 판매 대수가 계산되었으며, 예를 들어 Mercedes는 (80 + 90) / 2 = 85.0대, BMW는 (95 + 50) / 2 = 72.5대로 집계된 것을 확인할 수 있습니다.

이처럼 다중 인덱스 데이터프레임에서는 level 매개변수에 인덱스 이름 또는 인덱스 위치(정수)를 지정함으로써, 원하는 계층을 기준으로 유연하게 그룹화와 집계 연산을 수행할 수 있습니다.