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이 산출됩니다.