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

Pandas DataFrame에서 열을 이동하는 방법: shift() 메서드 활용 가이드

Pandas의 shift() 메서드를 활용하면 DataFrame 전체를 다시 작성하지 않고도 특정 열의 데이터를 원하는 만큼 위아래로 이동시킬 수 있습니다. 이전 행과 현재 행의 값을 비교하거나 시계열 데이터를 다룰 때 특히 유용한 기능입니다.

shift() 메서드의 주요 매개변수

shift() 메서드는 아래와 같은 형태로 정의되어 있습니다.

shift(self, periods=1, freq=None, axis=0, fill_value=None)
  • periods: 데이터를 이동할 칸 수입니다. 음수를 지정하면 반대 방향으로 이동합니다.
  • axis: 이동할 축을 지정합니다. 0은 인덱스(행) 방향, 1은 열(column) 방향으로 이동합니다.
  • fill_value: 이동으로 생긴 빈자리의 결측값(NaN)을 대신 채울 값을 지정합니다.

사용 단계

  1. 2차원 테이블 형태의 크기 변경 가능한 DataFrame(df)을 생성합니다.
  2. 입력 DataFrame을 출력해 확인합니다.
  3. df["열이름"] = df.열이름.shift() 형식으로 원하는 열을 선택해 이동시킵니다.
  4. 업데이트된 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"으로 채워져 더 깔끔한 데이터 처리가 가능합니다.