주어진 타임스탬프가 사용자 지정 영업 시간(CustomBusinessHour) 오프셋에 포함되는지 확인하려면 Pandas의 CustomBusinessHour.is_on_offset() 메서드를 사용합니다. 이 메서드에 타임스탬프를 인수로 전달하면 해당 시점이 오프셋 범위 안에 있는지 여부를 True 또는 False로 반환합니다.
1. 라이브러리 임포트
먼저 필요한 라이브러리를 임포트합니다.
import pandas as pd
2. 타임스탬프 생성
Pandas에서 타임스탬프(Timestamp) 객체를 설정합니다.
timestamp = pd.Timestamp('2021-11-14 05:20:30')3. CustomBusinessHour 오프셋 생성
CustomBusinessHour는 DateOffset의 서브클래스로, 기본 영업일·영업 시간이 아닌 사용자가 직접 정의한 영업 시간을 기준으로 날짜 연산을 수행할 수 있게 해줍니다.
- start: 사용자 지정 영업 시간의 시작 시각 (24시간 형식)
- end: 사용자 지정 영업 시간의 종료 시각 (24시간 형식)
여기서는 오전 9시 30분부터 오후 6시 30분까지를 영업 시간으로 설정해 보겠습니다.
cbhOffset = pd.tseries.offsets.CustomBusinessHour(start="09:30", end="18:30")
4. 오프셋 적용 및 확인
타임스탬프에 오프셋을 더하면 가장 가까운 유효 영업 시점으로 이동한 새로운 타임스탬프를 얻을 수 있습니다.
print("\nUpdated Timestamp...\n", timestamp + cbhOffset)그다음, is_on_offset()으로 특정 타임스탬프가 오프셋 범위에 포함되는지 확인합니다.
offset = cbhOffset.is_on_offset(pd.Timestamp('2021-11-20 05:20:30'))print("\nCheck if the given timestamp is on offset or not...\n", offset)전체 예제 코드
지금까지의 내용을 하나의 코드로 정리하면 다음과 같습니다.
import pandas as pd
# Pandas에서 타임스탬프 객체 설정
timestamp = pd.Timestamp('2021-11-14 05:20:30')
# 타임스탬프 출력
print("Timestamp...\n", timestamp)
# CustomBusinessHour 오프셋 생성
# CustomBusinessHour는 DateOffset의 서브클래스입니다.
# start : 사용자 지정 영업 시간의 시작 시각 (24시간 형식)
# end : 사용자 지정 영업 시간의 종료 시각 (24시간 형식)
cbhOffset = pd.tseries.offsets.CustomBusinessHour(start="09:30", end="18:30")
# CustomBusinessHour 오프셋 출력
print("\nCustomBusinessHour Offset...\n", cbhOffset)
# 타임스탬프에 오프셋을 더하고 업데이트된 타임스탬프 출력
print("\nUpdated Timestamp...\n", timestamp + cbhOffset)
# 주어진 타임스탬프가 오프셋에 포함되는지 확인
offset = cbhOffset.is_on_offset(pd.Timestamp('2021-11-20 05:20:30'))
# 결과 출력
print("\nCheck if the given timestamp is on offset or not...\n", offset)실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Timestamp... 2021-11-14 05:20:30 CustomBusinessHour Offset... <CustomBusinessHour: CBH=09:30-18:30> Updated Timestamp... 2021-11-15 10:30:00 Check if the given timestamp is on offset or not... False
결과 해석
마지막 결과가 False로 나온 이유를 살펴보겠습니다. 확인 대상인 2021-11-20 05:20:30은 토요일이면서 동시에 영업 시작 시각인 오전 9시 30분보다 이른 시간대입니다. 즉, 요일 조건(영업일)과 시간 조건(09:30~18:30) 중 어느 하나라도 벗어나면 is_on_offset()은 False를 반환합니다.
반면 오프셋을 더한 결과(2021-11-15 10:30:00)는 월요일 영업 시간 내의 유효한 시점으로 자동 이동된 것을 확인할 수 있습니다. 이처럼 CustomBusinessHour는 금융 데이터 처리처럼 정확한 영업 시간 기준 연산이 필요한 경우 매우 유용하게 활용됩니다.