개요
Pandas에서 인덱서(indexer)를 계산할 때, 찾으려는 값이 인덱스에 정확히 존재하지 않는 경우가 종종 있습니다. 이럴 때 Index.get_indexer() 메서드를 사용하고 method 매개변수를 "bfill"(backward fill)로 설정하면, 정확한 일치가 없을 경우 해당 값보다 큰 다음 인덱스 값을 기준으로 위치를 반환합니다.
1. 필요한 라이브러리 가져오기
먼저 pandas 라이브러리를 임포트합니다.
import pandas as pd
2. Pandas 인덱스 생성
정수 값들로 구성된 Pandas 인덱스를 생성합니다.
index = pd.Index([10, 20, 30, 40, 50, 60, 70])
생성된 인덱스를 출력하여 확인합니다.
print("Pandas Index...\n", index)3. get_indexer()로 인덱서 계산하기
get_indexer() 메서드를 호출하여 검색 대상 값들의 인덱서를 계산합니다. 이때 method="bfill"을 지정하면, 정확히 일치하는 값이 없을 때 그보다 큰 다음 인덱스 값을 찾아 그 위치를 반환합니다.
print("\nGet the indexes...\n", index.get_indexer([30, 25, 58, 50, 55], method="bfill"))전체 예제 코드
지금까지의 내용을 하나로 합친 전체 코드는 다음과 같습니다.
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 매개변수를 "bfill"로 설정하여
# 정확한 일치가 없을 때 다음 인덱스 값을 찾음
print("\nGet the indexes...\n", index.get_indexer([30, 25, 58, 50, 55], method="bfill"))실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Pandas Index... Int64Index([10, 20, 30, 40, 50, 60, 70], dtype='int64') Number of elements in the index... 7 Get the indexes... [2 2 5 4 5]
결과 해석
반환된 배열 [2 2 5 4 5]를 검색 값과 비교해 보면 동작 방식을 쉽게 이해할 수 있습니다.
- 30 → 인덱스에 정확히 존재하므로 위치 2를 반환
- 25 → 정확한 일치가 없으므로 bfill에 의해 다음 값인 30의 위치 2를 반환
- 58 → 정확한 일치가 없으므로 다음 값인 60의 위치 5를 반환
- 50 → 인덱스에 정확히 존재하므로 위치 4를 반환
- 55 → 정확한 일치가 없으므로 다음 값인 60의 위치 5를 반환
참고로 최신 버전의 Pandas에서는 Int64Index가 통합되어 출력 시 Index([10, 20, 30, 40, 50, 60, 70], dtype='int64') 형태로 표시될 수 있지만, 동작 방식은 동일합니다.