시계열 데이터가 있을 때, 주어진 시리즈에서 처음 3일과 마지막 3일의 데이터를 추출하여 출력하는 결과는 다음과 같습니다.
first three days: 2020-01-01 Chennai 2020-01-03 Delhi Freq: 2D, dtype: object last three days: 2020-01-07 Pune 2020-01-09 Kolkata Freq: 2D, dtype: object
이 문제를 해결하기 위해 아래 단계를 순서대로 따라가 보겠습니다.
해결 방법
먼저 시리즈(Series)를 정의하고 변수
data에 저장합니다.pd.date_range()함수를 사용하여 시작 날짜를 '2020-01-01'로 지정하고,periods=5,freq='2D'(2일 간격) 옵션을 적용한 뒤 결과를time_series로 저장합니다.
time_series = pd.date_range('2020-01-01', periods = 5, freq ='2D')data.index = time_series를 통해 생성한 날짜 인덱스를 시리즈에 할당합니다.data.first('3D')메서드를 사용하여 시작 날짜부터 3일 이내의 데이터를 추출하고first_day에 저장한 후 출력합니다.
first_day = data.first('3D')data.last('3D')메서드를 사용하여 종료 날짜 기준 마지막 3일 이내의 데이터를 추출하고last_day에 저장한 후 출력합니다.
last_day = data.last('3D')참고:
first()와last()메서드는 행 개수가 아닌 날짜 범위(오프셋)를 기준으로 데이터를 선택합니다. 즉, '3D'는 첫 번째(또는 마지막) 날짜로부터 3일 이내에 해당하는 모든 인덱스를 반환합니다.
전체 예제 코드
아래 코드를 실행하면 동작 과정을 더 명확하게 이해할 수 있습니다.
import pandas as pd
data = pd.Series(['Chennai', 'Delhi', 'Mumbai', 'Pune', 'Kolkata'])
time_series = pd.date_range('2020-01-01', periods = 5, freq ='2D')
data.index = time_series
print("time series:\n",data)
first_day = data.first('3D')
print("first three days:\n",first_day)
last_day = data.last('3D')
print("last three days:\n",last_day)실행 결과
time series: 2020-01-01 Chennai 2020-01-03 Delhi 2020-01-05 Mumbai 2020-01-07 Pune 2020-01-09 Kolkata Freq: 2D, dtype: object first three days: 2020-01-01 Chennai 2020-01-03 Delhi Freq: 2D, dtype: object last three days: 2020-01-07 Pune 2020-01-09 Kolkata Freq: 2D, dtype: object
출력 결과를 보면 2일 간격(2D)으로 생성된 날짜 인덱스 중, first('3D')는 2020-01-01부터 3일 이내인 1월 1일과 1월 3일의 데이터를 반환하고, last('3D')는 마지막 날짜인 1월 9일로부터 역방향 3일 이내인 1월 7일과 1월 9일의 데이터를 반환하는 것을 확인할 수 있습니다.