Pandas에서 index.asof() 메서드를 사용하면 인덱스에 포함된 모든 레이블이 전달된 레이블보다 늦은 경우를 손쉽게 처리할 수 있습니다. 이 메서드는 전달된 레이블과 일치하거나 그보다 앞선(작거나 같은) 가장 가까운 인덱스 레이블을 반환하며, 인덱스의 모든 레이블이 전달된 레이블보다 늦다면 NaN을 반환합니다.
asof() 메서드의 동작 방식
asof(label)은 다음과 같은 규칙으로 동작합니다.
- 전달된 레이블과 정확히 일치하는 인덱스 레이블이 있으면 해당 값을 반환합니다.
- 일치하는 레이블이 없으면, 전달된 레이블보다 작거나 같은 값 중 가장 큰 레이블을 반환합니다.
- 인덱스의 모든 레이블이 전달된 레이블보다 크면 NaN을 반환합니다.
이러한 특성 덕분에 시계열 데이터에서 특정 시점 이전의 마지막 유효한 값을 찾을 때 특히 유용합니다.
필요한 라이브러리 가져오기
먼저 필요한 라이브러리를 임포트합니다 −
import pandas as pd
Pandas 인덱스 생성 및 출력
정수 값들로 구성된 Pandas 인덱스를 생성합니다 −
index = pd.Index([10, 20, 30, 40, 50, 60, 70])
생성한 인덱스를 화면에 출력합니다 −
print("Pandas Index...\n", index)
인덱스에서 레이블을 조회합니다. 인덱스의 모든 레이블이 전달된 레이블(여기서는 6)보다 늦으므로 NaN이 반환됩니다 −
print("\nGet the label from the index...\n", index.asof(6))
예제
지금까지의 내용을 정리한 전체 코드는 다음과 같습니다 −
import pandas as pd
# Pandas 인덱스 생성
index = pd.Index([10, 20, 30, 40, 50, 60, 70])
# Pandas 인덱스 출력
print("Pandas Index...\n", index)
# 인덱스의 요소 개수 확인
print("\nNumber of elements in the index...\n", index.size)
# 인덱스에서 레이블 조회
# 인덱스의 모든 레이블이 전달된 레이블보다 늦으면 NaN 반환
print("\nGet the label from the index...\n", index.asof(6))
출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다 −
Pandas Index... Int64Index([10, 20, 30, 40, 50, 60, 70], dtype='int64') Number of elements in the index... 7 Get the label from the index... nan
실행 결과를 살펴보면, 인덱스의 최솟값이 10이므로 asof(6)를 호출했을 때 6보다 작거나 같은 레이블이 존재하지 않습니다. 따라서 NaN이 반환된 것을 확인할 수 있습니다. 만약 index.asof(35)처럼 호출했다면, 35와 정확히 일치하는 레이블은 없지만 35보다 작거나 같은 가장 큰 레이블인 30이 반환됩니다.