728x90
반응형
Pandas에서 제공하는 기능 중 shift라는 기능이 있다.
우리가 알고 있는 의미 그대로 '이동시키다'라고 해석하면 어떤 기능인지 잘 와닿을 것 같다!
말 그대로 현재 데이터를 n칸 씩 앞으로 또는 뒤로 손쉽게 밀 수 있다.
공식 문서에 있는 예제를 살펴보자.
아래와 같은 예시의 데이터 프레임이 있을 때
>>> df = pd.DataFrame({"Col1": [10, 20, 15, 30, 45],
... "Col2": [13, 23, 18, 33, 48],
... "Col3": [17, 27, 22, 37, 52]},
... index=pd.date_range("2020-01-01", "2020-01-05"))
>>> df
Col1 Col2 Col3
2020-01-01 10 13 17
2020-01-02 20 23 27
2020-01-03 15 18 22
2020-01-04 30 33 37
2020-01-05 45 48 52
shift 3을 해주면 세 칸씩 데이터를 이동시킬 수 있다.
이동 시켰을 때 들어올 값이 없는 부분은 NaN으로 채워지게 된다.
음수 값을 주면 반대 방향으로 이동시키는 것도 가능하다.
>>> df.shift(periods=3)
Col1 Col2 Col3
2020-01-01 NaN NaN NaN
2020-01-02 NaN NaN NaN
2020-01-03 NaN NaN NaN
2020-01-04 10.0 13.0 17.0
2020-01-05 20.0 23.0 27.0
만약 NaN으로 채워지는 것이 맘에 들지 않는다면 fill_value라는 속성을 통해 어떤 값으로 채울지 설정해줄 수도 있다.
>>> df.shift(periods=3, fill_value=0)
Col1 Col2 Col3
2020-01-01 0 0 0
2020-01-02 0 0 0
2020-01-03 0 0 0
2020-01-04 10 13 17
2020-01-05 20 23 27
아래와 같이 축을 설정하여 row가 아니라 column 방향으로 데이터를 이동시키는 것 또한 가능하다.
>>> df.shift(periods=1, axis="columns")
Col1 Col2 Col3
2020-01-01 NaN 10 13
2020-01-02 NaN 20 23
2020-01-03 NaN 15 18
2020-01-04 NaN 30 33
2020-01-05 NaN 45 48
물론 전체 테이블이 아니라 특정 속성에 대해서만 shift하는 것도 가능하다!
또한 groupby를 해주면 특정 속성에 관련한 데이터들에 한해서만 shift도 가능하다!
이를 활용하면 좀 더 간다하면서도 쉽게 다양한 feature engineering이 가능할 것이다.
가령 과거의 데이터를 기반으로 현재 데이터를 예측하기 위한 feature를 생성하는 것이 대표적인 예시일 것 같다.
728x90
반응형