본문 바로가기

CS?/pandas

[pandas] Dataframe shift()로 다음 행에서 현재 행에 값 가져오기 (행 위치 바꾸기)

반응형

데이터 정제를 하다보면 다음 행의 값을 현재 행에 추가해야 하는 일이 생긴다.

unique_id time next_time
1 10-28 ??
2 10-29 ??
3 10-29 ???

 

이럴 때 사용하는게 shift 메소드이다!

 

shift

- 데이터프레임에 적용하여 원하는 수만큼 행/열을 이동할 수 있다.

- 사용하는 파라미터

  • periods : 숫자로 입력하며, 이동할 크기를 지정한다 (필수)
  • freq : 인덱스 이동 시키고 싶을 때 입력
    • 양수 : 위의 값
    • 음수 : 아래의 값
  • axis : 행(axis=0)으로 할지, 열(axis=1)로 할지 지정
  • fill_values : 빈칸에 채울 값 (결측치 값)

 

그래서 데이터프레임에서 다음행을 가져오기 위해서는 periods의 값을 -1로 하게 될 경우 원하는 결과를 얻게 된다.

def access_next_time(df):
	return df["time"].shift(-1)

 

이렇게 df를 입력하면 next_time열의 값을 기준으로 다음 행에 접근하는 함수를 선언한뒤

 

df["next_time"] = df.apply(lambda x: access_next_event(df)).reset_index(0, drop=True)

 

apply로 행마다 접근해 access_next_time 함수로 가져온 값을 저장할 수 있게 만든다.

 

위의 코드를 실행하게 되면 처음 만들었던 표가 아래로 바뀌게 된다.

unique_id time next_time
1 10-28 10-29
2 10-29 10-29
3 10-29 NaT

 

 

만약 perioids의 값이 양수인 1을 하게 되면 어떻게 될까?

def access_next_time(df):
	return df["time"].shift(1)

 

unique_id time next_time
1 10-28 NaT
2 10-29 10-28
3 10-29 10-29

 윗행의 값을 가져왔기 때문에 컬럼명은 next_time이 아니라 before_time 정도가 되어야 할 것 같다 ㅎㅎ

periods는 절댓값에 따라 접근하는 행의 위치를 바꿀 수 있다. 예를 들어 shift(2)의 경우, 두칸 위에 있는 값을 가져오게 되고, shift(-5)의 경우 다섯칸 아래에 있는 값을 가져오게 된다.

반응형