개요
데이터프레임의 인덱스를 양수(+) 방향과 음수(-) 방향으로 각각 2주기씩 이동(shift)해야 하는 경우가 있습니다. 예를 들어, 시계열 인덱스를 가진 데이터프레임에 shift 연산을 적용하면 다음과 같은 결과를 얻을 수 있습니다.
양수 방향으로 2주기 이동한 결과
Id Age
2020-01-01 00:00:00 NaN NaN
2020-01-01 12:00:00 NaN NaN
2020-01-02 00:00:00 1.0 10.0
2020-01-02 12:00:00 2.0 12.0
2020-01-03 00:00:00 3.0 14.0
음수 방향으로 2주기 이동한 결과
Id Age
2020-01-01 00:00:00 3.0 14.0
2020-01-01 12:00:00 4.0 11.0
2020-01-02 00:00:00 5.0 13.0
2020-01-02 12:00:00 NaN NaN
2020-01-03 00:00:00 NaN NaN해결 방법
이 문제는 다음 단계를 따라 해결할 수 있습니다.
pd.date_range()를 사용하여 시작일 '2020-01-01', 주기(periods) 5개, 빈도(freq) '12H'로 시계열 인덱스를 생성합니다.생성한 시계열을 인덱스로 하는 데이터프레임을 정의합니다.
df.shift(2, axis=0)을 적용하여 인덱스를 양수 방향으로 2주기 이동합니다.df.shift(-2, axis=0)을 적용하여 인덱스를 음수 방향으로 2주기 이동합니다.
예제 코드
아래 코드를 통해 더 자세히 이해해 보겠습니다.
import pandas as pd
# 시계열 인덱스 생성 (2020-01-01부터 12시간 간격으로 5개)
time_series = pd.date_range('01-01-2020', periods=5, freq='12H')
# 데이터프레임 정의
df = pd.DataFrame({"Id": [1, 2, 3, 4, 5],
"Age": [10, 12, 14, 11, 13]},
index=time_series)
print("Dataframe is:\n", df)
print("shift the index by two periods in positive direction")
print(df.shift(2, axis=0))
print("shift the index by two periods in negative direction")
print(df.shift(-2, axis=0))실행 결과
Dataframe is:
Id Age
2020-01-01 00:00:00 1 10
2020-01-01 12:00:00 2 12
2020-01-02 00:00:00 3 14
2020-01-02 12:00:00 4 11
2020-01-03 00:00:00 5 13
shift the index by two periods in positive direction
Id Age
2020-01-01 00:00:00 NaN NaN
2020-01-01 12:00:00 NaN NaN
2020-01-02 00:00:00 1.0 10.0
2020-01-02 12:00:00 2.0 12.0
2020-01-03 00:00:00 3.0 14.0
shift the index by two periods in negative direction
Id Age
2020-01-01 00:00:00 3.0 14.0
2020-01-01 12:00:00 4.0 11.0
2020-01-02 00:00:00 5.0 13.0
2020-01-02 12:00:00 NaN NaN
2020-01-03 00:00:00 NaN NaN동작 원리
pandas의 shift() 메서드는 데이터를 지정한 주기만큼 앞뒤로 이동시킵니다.
양수 방향 이동 (
df.shift(2)): 데이터가 아래쪽으로 2행 밀려나고, 비어 있게 되는 첫 2개 행은 NaN 값으로 채워집니다.음수 방향 이동 (
df.shift(-2)): 데이터가 위쪽으로 2행 당겨지고, 비어 있게 되는 마지막 2개 행은 NaN 값으로 채워집니다.
여기서 axis=0은 행 방향(인덱스 방향)으로 이동한다는 의미입니다. 만약 열 방향으로 이동하고 싶다면 axis=1을 사용하면 됩니다. 이 기능은 시계열 데이터 분석에서 이전 값 또는 이후 값과 비교하는 등의 작업에 매우 유용하게 활용됩니다.