Pandas의 shift() 메서드를 활용하면 DataFrame 전체를 다시 작성하지 않고도 특정 열의 데이터를 원하는 만큼 위아래로 이동시킬 수 있습니다. 이전 행과 현재 행의 값을 비교하거나 시계열 데이터를 다룰 때 특히 유용한 기능입니다.
shift() 메서드의 주요 매개변수
shift() 메서드는 아래와 같은 형태로 정의되어 있습니다.
shift(self, periods=1, freq=None, axis=0, fill_value=None)
- periods: 데이터를 이동할 칸 수입니다. 음수를 지정하면 반대 방향으로 이동합니다.
- axis: 이동할 축을 지정합니다. 0은 인덱스(행) 방향, 1은 열(column) 방향으로 이동합니다.
- fill_value: 이동으로 생긴 빈자리의 결측값(NaN)을 대신 채울 값을 지정합니다.
사용 단계
- 2차원 테이블 형태의 크기 변경 가능한 DataFrame(df)을 생성합니다.
- 입력 DataFrame을 출력해 확인합니다.
df["열이름"] = df.열이름.shift()형식으로 원하는 열을 선택해 이동시킵니다.- 업데이트된 DataFrame을 출력합니다.
예제 코드
import pandas as pd
df = pd.DataFrame(
dict(
name=['John', 'Jacob', 'Tom', 'Tim', 'Ally'],
marks=[89, 23, 100, 56, 90],
subjects=["Math", "Physics", "Chemistry", "Biology", "English"]
)
)
print("입력 DataFrame:\n", df)
# name 열을 1칸 아래로 이동
df["name"] = df.name.shift(1)
print("\nname 열을 1칸 이동한 결과:\n", df)
# marks 열을 2칸 아래로 이동
df["marks"] = df.marks.shift(2)
print("\nmarks 열을 2칸 이동한 결과:\n", df)
# subjects 열을 1칸 위로 이동
df["subjects"] = df.subjects.shift(-1)
print("\nsubjects 열을 -1칸 이동한 결과:\n", df)
실행 결과
입력 DataFrame:
name marks subjects
0 John 89 Math
1 Jacob 23 Physics
2 Tom 100 Chemistry
3 Tim 56 Biology
4 Ally 90 English
name 열을 1칸 이동한 결과:
name marks subjects
0 NaN 89 Math
1 John 23 Physics
2 Jacob 100 Chemistry
3 Tom 56 Biology
4 Tim 90 English
marks 열을 2칸 이동한 결과:
name marks subjects
0 NaN NaN Math
1 John NaN Physics
2 Jacob 89 Chemistry
3 Tom 23 Biology
4 Tim 100 English
subjects 열을 -1칸 이동한 결과:
name marks subjects
0 NaN NaN Physics
1 John NaN Chemistry
2 Jacob 89 Biology
3 Tom 23 English
4 Tim 100 NaN
결과 해설
- shift(1): 모든 값이 한 칸 아래로 내려가고, 첫 번째 행은
NaN으로 채워집니다. - shift(2): 값이 두 칸 아래로 내려가고, 맨 위 두 행이
NaN으로 채워집니다. - shift(-1): 값이 한 칸 위로 올라가고, 마지막 행이
NaN으로 채워집니다.
만약 NaN 대신 다른 값으로 빈자리를 채우고 싶다면 fill_value 옵션을 활용하면 됩니다. 예를 들어 df.name.shift(1, fill_value="Unknown")처럼 작성하면 이동 후 생긴 빈자리가 "Unknown"으로 채워져 더 깔끔한 데이터 처리가 가능합니다.