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

Python Pandas로 데이터프레임 인덱스를 양수·음수 방향으로 2주기씩 이동하는 방법

개요

데이터프레임의 인덱스를 양수(+) 방향과 음수(-) 방향으로 각각 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을 사용하면 됩니다. 이 기능은 시계열 데이터 분석에서 이전 값 또는 이후 값과 비교하는 등의 작업에 매우 유용하게 활용됩니다.