Pandas에서 롤링(Rolling) 윈도우는 시계열 데이터나 연속된 관측값을 분석할 때 널리 활용되는 기법입니다. 고정된 크기의 창을 한 칸씩 이동시키면서 각 구간의 통계값을 계산하기 때문에 '이동 평균(moving average)'이라고도 부릅니다.
예를 들어 다음과 같은 데이터프레임에 롤링 윈도우 평균을 적용하면 아래와 같은 결과를 얻을 수 있습니다.
Average of rolling window is:
Id Age Mark
0 NaN NaN NaN
1 1.5 12.0 85.0
2 2.5 13.0 80.0
3 3.5 13.5 82.5
4 4.5 31.5 90.0
5 5.5 60.0 87.5
해결 접근 방법
데이터프레임을 정의합니다.
df.rolling(window=2).mean()을 호출하여 롤링 윈도우 크기 2의 평균을 계산합니다.
df.rolling(window=2).mean()
예제 코드
아래 코드를 통해 실제 동작 과정을 확인해 보겠습니다.
import pandas as pd
df = pd.DataFrame({"Id":[1, 2, 3, 4, 5, 6],
"Age":[12, 12, 14, 13, 50, 70],
"Mark":[80, 90, 70, 95, 85, 90]})
print("Dataframe is:\n", df)
print("Average of rolling window is:\n", df.rolling(window=2).mean())
실행 결과
Dataframe is:
Id Age Mark
0 1 12 80
1 2 12 90
2 3 14 70
3 4 13 95
4 5 50 85
5 6 70 90
Average of rolling window is:
Id Age Mark
0 NaN NaN NaN
1 1.5 12.0 85.0
2 2.5 13.0 80.0
3 3.5 13.5 82.5
4 4.5 31.5 90.0
5 5.5 60.0 87.5
결과 해석
첫 번째 행(인덱스 0)이 모두 NaN으로 표시되는 이유는 해당 위치까지 윈도우 크기(2개)만큼의 데이터가 쌓이지 않아 평균을 계산할 수 없기 때문입니다.
인덱스 1부터는 바로 앞의 두 행 값을 평균합니다. 예를 들어 Id 열의 1.5는 (1 + 2) ÷ 2에서 나온 값이며, Age 열의 마지막 값 60.0은 (50 + 70) ÷ 2의 결과입니다.
윈도우 크기를 바꾸고 싶다면 window 매개변수에 원하는 숫자를 지정하면 됩니다. 예를 들어 df.rolling(window=3).mean()으로 작성하면 세 행 단위의 이동 평균을 구할 수 있습니다.