Pandas에서 인덱스에 해당 레이블이 존재하면 그 값을 반환하고, 존재하지 않으면 그보다 작은(이전) 레이블 중 가장 큰 값을 얻으려면 index.asof() 메서드를 사용하면 됩니다. 이 글에서는 asof() 메서드의 동작 원리와 실제 사용 예제를 단계별로 살펴봅니다.
asof() 메서드란?
asof()는 지정한 레이블(label)과 정확히 일치하는 값이 인덱스에 있으면 그 값을 그대로 반환하고, 없으면 주어진 값 이하의 레이블 중 가장 큰 값을 반환합니다. 시계열 데이터에서 특정 시점 기준으로 마지막 유효한 값을 찾아야 할 때 특히 유용하게 활용됩니다.
단계별 사용 방법
1단계: 필요한 라이브러리 임포트하기
가장 먼저 Pandas 라이브러리를 가져옵니다.
import pandas as pd
2단계: Pandas 인덱스 생성하기
정수 값들로 구성된 인덱스를 생성합니다.
index = pd.Index([10, 20, 30, 40, 50, 60, 70])
3단계: 인덱스 출력하기
생성된 인덱스를 화면에 출력해 내용을 확인합니다.
print("Pandas Index...\n", index)
4단계: asof()로 레이블 조회하기
인덱스에 없는 값 43을 조회해 보겠습니다.
print("\nGet the label from the index...\n", index.asof(43))
전체 예제 코드
지금까지의 과정을 하나의 코드로 정리하면 다음과 같습니다.
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)
# 인덱스에서 레이블을 반환하거나, 없으면 이전 레이블 반환
print("\nGet the label from the index...\n", index.asof(43))
실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
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... 40
결과 해석
생성된 인덱스는 [10, 20, 30, 40, 50, 60, 70]이며, 총 7개의 요소를 가집니다. 여기서 asof(43)을 호출하면 인덱스에 43이라는 값이 존재하지 않으므로, 43 이하의 값 중 가장 큰 40이 반환됩니다. 반면, 인덱스에 이미 포함된 값(예: 40)을 조회하면 일치하는 값이 그대로 반환됩니다. 참고로 최신 버전의 Pandas에서는 Int64Index가 deprecated되어 단순히 Index([...], dtype='int64') 형태로 표시될 수 있습니다.