Pandas에서 정확히 일치하는 값이 없을 경우 이전(앞쪽) 인덱스 값을 찾으려면 index.get_indexer() 메서드를 사용하고, method 매개변수를 ffill(forward fill)로 설정하면 됩니다. 이 방식은 조회하려는 값이 인덱스에 존재하지 않을 때, 해당 값보다 작거나 같은 가장 가까운 인덱스의 위치를 자동으로 반환해 줍니다.
1단계: 필요한 라이브러리 가져오기
먼저 Pandas 라이브러리를 임포트합니다.
import pandas as pd
2단계: Pandas 인덱스 생성하기
예제에 사용할 인덱스를 생성합니다.
index = pd.Index([10, 20, 30, 40, 50, 60, 70])
생성된 인덱스를 화면에 출력해 확인합니다.
print("Pandas Index...\n", index)
3단계: get_indexer()로 인덱서 계산하기
get_indexer() 메서드를 호출하여 인덱서를 계산합니다. 이때 method 매개변수를 "ffill"로 설정하면, 정확히 일치하는 값이 없을 때 이전 인덱스 값의 위치를 찾아줍니다.
print("\nGet the indexes...\n", index.get_indexer([30, 20, 75, 80, 50, 59], method="ffill"))
전체 예제 코드
지금까지의 내용을 하나로 합친 전체 코드는 다음과 같습니다.
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)
# get_indexer()로 인덱서 계산
# method="ffill" : 정확히 일치하지 않으면 이전 인덱스 값 사용
print("\nGet the indexes...\n", index.get_indexer([30, 20, 75, 80, 50, 59], method="ffill"))
실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Pandas Index... Int64Index([10, 20, 30, 40, 50, 60, 70], dtype='int64') Number of elements in the index... 7 Get the indexes... [2 1 6 6 4 4]
결과 해석
출력된 [2 1 6 6 4 4]의 의미를 살펴보면 다음과 같습니다.
- 30 → 2: 인덱스에 정확히 존재하므로 해당 위치 2를 반환
- 20 → 1: 정확히 일치하므로 위치 1 반환
- 75 → 6: 일치하는 값이 없으므로 75보다 작거나 같은 가장 가까운 값인 70의 위치 6 반환
- 80 → 6: 마찬가지로 이전 값인 70의 위치 6 반환
- 50 → 4: 정확히 일치하므로 위치 4 반환
- 59 → 4: 일치하는 값이 없으므로 59보다 작은 가장 가까운 값인 50의 위치 4 반환
이처럼 method="ffill" 옵션을 활용하면 시계열 데이터나 구간 검색 등에서 정확한 매칭이 불가능할 때 유연하게 이전 인덱스 값을 참조할 수 있습니다. 반대로 다음(뒤쪽) 인덱스 값을 찾고 싶다면 method="bfill"(backward fill)을 사용하면 됩니다.