Pandas에서 날짜 오프셋(date offset)을 기준으로 시계열 데이터의 앞부분 구간만 선택하고 싶다면 first() 메서드를 사용하면 됩니다. 이 메서드는 지정한 기간(예: '4D'는 시작일로부터 4일)에 포함되는 행들만 반환합니다.
1단계: 날짜 인덱스 생성
먼저 pd.date_range()의 periods(생성할 날짜 수)와 freq(빈도) 매개변수를 사용해 날짜 인덱스를 만듭니다. 여기서는 3일 간격('3D')으로 5개의 날짜를 생성합니다.
i = pd.date_range('2021-07-15', periods=5, freq='3D')
2단계: DataFrame 생성
위에서 만든 날짜 인덱스를 적용해 DataFrame을 생성합니다.
dataFrame = pd.DataFrame({'k': [1, 2, 3, 4, 5]}, index=i)
3단계: first()로 첫 번째 구간 선택
시작일로부터 처음 4일('4D')에 해당하는 행을 가져옵니다.
dataFrame.first('4D')
전체 예제 코드
import pandas as pd
# 5개의 기간, 3일 간격 빈도로 날짜 인덱스 설정
i = pd.date_range('2021-07-15', periods=5, freq='3D')
# 위 인덱스를 사용해 DataFrame 생성
dataFrame = pd.DataFrame({'k': [1, 2, 3, 4, 5]}, index=i)
print('DataFrame...\n', dataFrame)
# 처음 4일(4D)에 해당하는 행 가져오기
print('선택된 행...\n', dataFrame.first('4D'))
실행 결과
DataFrame...
k
2021-07-15 1
2021-07-18 2
2021-07-21 3
2021-07-24 4
2021-07-27 5
선택된 행...
k
2021-07-15 1
2021-07-18 2
결과 해석
인덱스가 3일 간격이므로 전체 날짜는 7월 15일, 18일, 21일, 24일, 27일입니다. first('4D')는 시작일(7월 15일)부터 4일 이내, 즉 7월 19일 미만의 날짜에 해당하는 행만 반환하므로 15일과 18일 두 행이 선택됩니다.
참고로, Pandas 2.1 이상 버전에서는 first() 메서드가 더 이상 권장되지 않으므로(deprecated), 아래와 같이 불리언 인덱싱을 사용하는 것이 좋습니다.
dataFrame[dataFrame.index < '2021-07-19']