16-09 기간/데이터 쉬프트 (shift)
DataFrame.shift(periods=1, freq=None, axis=0, fill_value=NoDefault.no_default)
개요
shift메서드는 시계열 데이터의 데이터나 인덱스를 원하는 기간만큼 쉬프트 하는 메서드 입니다.
freq 인수를 입력하지 않으면 데이터가 이동하고, 인수값을 입력하게되면 인덱스가 freq값 만큼 이동하게됩니다.
사용법
기본 사용법
※ 자세한 내용은 아래 예시를 참고 바랍니다.
df.shift(periods=1, freq=None, axis=0, fill_value=NoDefault.no_default)
periods : 이동할 기간입니다.
freq : 입력 할 경우 인덱스가 이동하게 됩니다. Y, M, D, H, T, S 나 Timestamp, 'Infer'등이 올 수 있습니다.
fill_value : shift로 인해 생긴 결측치를 대체할 값입니다.
예시
먼저 기본적인 사용법 예시를위하여 5x3 짜리 데이터를 만들어보겠습니다.
pd.date_range를 이용해 기준시간에 대해 일정 간격을 가진 datetime index를 생성하겠습니다.
idx = pd.date_range(start='2022-01-01',periods=5,freq='2D')
# 2일 간격으로 5행의 인덱스 생성
data={'col1':[10,20,30,40,50],'col2':[1,3,6,7,9],'col3':[43,13,82,47,31]}
df = pd.DataFrame(data=data, index=idx)
print(df)
>>
col1 col2 col3
2022-01-01 10 1 43
2022-01-03 20 3 13
2022-01-05 30 6 82
2022-01-07 40 7 47
2022-01-09 50 9 31
기본적인 사용법
period인수를 입력할 경우 데이터가 행 기준으로 이동하게됩니다.
print(df.shift(periods=2))
>>
col1 col2 col3
2022-01-01 NaN NaN NaN
2022-01-03 NaN NaN NaN
2022-01-05 10.0 1.0 43.0
2022-01-07 20.0 3.0 13.0
2022-01-09 30.0 6.0 82.0
axis인수를 설정해줄 경우, 데이터의 이동을 행 기준으로할지 열 기준으로할지 설정할 수 있습니다.
print(df.shift(periods=2, axis=1))
>>
col1 col2 col3
2022-01-01 NaN NaN 10
2022-01-03 NaN NaN 20
2022-01-05 NaN NaN 30
2022-01-07 NaN NaN 40
2022-01-09 NaN NaN 50
fill_value 인수를 사용하면, shift되면서 NaN처리된 결측치를 원하는 값으로 채울 수 있습니다.
print(df.shift(periods=2, axis=1,fill_value='-'))
>>
col1 col2 col3
2022-01-01 - - 10
2022-01-03 - - 20
2022-01-05 - - 30
2022-01-07 - - 40
2022-01-09 - - 50
freq 인수의 사용
freq 인수를 설정해주면, 데이터가 아닌 인덱스가 freq에 입력한 값 만큼 쉬프트 됩니다.
print(df.shift(periods=3,freq='D'))
# 일 기준 3기간 이동. 즉, 3일 이동
>>
col1 col2 col3
2022-01-04 10 1 43
2022-01-06 20 3 13
2022-01-08 30 6 82
2022-01-10 40 7 47
2022-01-12 50 9 31
freq='infer'인 경우, 현재 인덱스의 간격을 분석해서 적당한 freq를 추론해줍니다.
print(df.shift(periods=3,freq='infer'))
>>
col1 col2 col3
2022-01-07 10 1 43
2022-01-09 20 3 13
2022-01-11 30 6 82
2022-01-13 40 7 47
2022-01-15 50 9 31
위의 예시의 경우, 인덱스의 인터벌(간격)이 2일이므로 freq='2D'로 추론하였으며, period=3이기 때문에 6일이 쉬프트 된것을 알 수 있습니다.
'파이썬완전정복-Pandas DataFrame > 16. 시간' 카테고리의 다른 글
Pandas DataFrame 16-10 period로 변환 (to_period) (0) | 2022.02.17 |
---|---|
Pandas DataFrame 16-08 리샘플링 (resample) (0) | 2022.02.17 |
Pandas DataFrame 16-07 인덱스나누기[리샘플링] (asfreq) (0) | 2022.02.17 |
Pandas DataFrame 16-06 TimeStamp변환(to_timestamp) (0) | 2022.02.17 |
Pandas DataFrame 16-05 Timezone설정[표준시간대] (tz_localize) (0) | 2022.02.17 |