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

Python Pandas로 롤링 평균(Rolling Mean) 구하는 방법

Pandas로 롤링 평균(Rolling Mean) 구하기

롤링 평균(Rolling Mean)은 일정한 윈도우 크기만큼 데이터를 이동시키면서 평균을 계산하는 기법으로, 시계열 데이터 분석에서 널리 활용됩니다. Pandas에서는 rolling() 메서드로 쉽게 구할 수 있으며, 그룹별로 계산할 때는 groupby()apply() 함수를 함께 사용합니다.

1. 라이브러리 임포트

먼저 필요한 라이브러리를 임포트합니다.

import pandas as pd

2. DataFrame 생성

차량 이름(Car)과 등록 가격(Reg_Price)을 담은, 정수형 열을 포함한 2개 열의 DataFrame을 생성합니다.

dataFrame = pd.DataFrame(
   {
      "Car": ['Tesla', 'Mercedes', 'Tesla', 'Mustang', 'Mercedes', 'Mustang'],
      "Reg_Price": [5000, 1500, 6500, 8000, 9000, 6000]
   }
)

3. groupby()와 apply()로 롤링 평균 계산

groupby()로 차량 종류별로 그룹화한 뒤, apply() 함수 안에서 rolling() 메서드를 호출해 각 그룹의 롤링 평균을 구합니다.

dataFrame.groupby("Car")["Reg_Price"].apply(
   lambda x: x.rolling(center=False, window=2).mean()
)

여기서 window=2는 인접한 2개의 데이터씩 묶어 평균을 계산한다는 의미이며, center=False는 현재 값과 바로 앞의 값을 기준으로 윈도우를 구성한다는 뜻입니다.

전체 예제 코드

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

import pandas as pd

# DataFrame 생성
dataFrame = pd.DataFrame(
   {
      "Car": ['Tesla', 'Mercedes', 'Tesla', 'Mustang', 'Mercedes', 'Mustang'],
      "Reg_Price": [5000, 1500, 6500, 8000, 9000, 6000]
   }
)

print("DataFrame ...\n", dataFrame)

print("\nRolling Mean...\n",
      dataFrame.groupby("Car")["Reg_Price"].apply(
         lambda x: x.rolling(center=False, window=2).mean()
      ))

실행 결과

DataFrame ...
       Car  Reg_Price
0    Tesla       5000
1 Mercedes       1500
2    Tesla       6500
3  Mustang       8000
4 Mercedes       9000
5  Mustang       6000

Rolling Mean...
0       NaN
1       NaN
2    5750.0
3       NaN
4    5250.0
5    7000.0
Name: Reg_Price, dtype: float64

결과 해석

각 그룹(Tesla, Mercedes, Mustang) 내에서 인접한 두 값의 평균이 순서대로 계산됩니다. 각 그룹의 첫 번째 항목은 비교할 이전 값이 없으므로 NaN으로 표시됩니다. 예를 들어 Tesla 그룹에서는 (5000 + 6500) / 2 = 5750.0, Mercedes 그룹에서는 (1500 + 9000) / 2 = 5250.0, Mustang 그룹에서는 (8000 + 6000) / 2 = 7000.0이 산출됩니다.