반응형
데이터 정제를 하다보면 다음 행의 값을 현재 행에 추가해야 하는 일이 생긴다.
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)의 경우 다섯칸 아래에 있는 값을 가져오게 된다.
반응형
'CS? > pandas' 카테고리의 다른 글
[Python/pandas] 컬럼마다 적절한 데이터 형태로 값을 바꾸고 싶을 때 - infer_objects() (0) | 2022.11.20 |
---|---|
[Pandas] 데이터 프레임에서 원하는 데이터 타입 컬럼만 추출하기 - select_dtypes (0) | 2022.11.12 |