Pandas get_indexer() 메서드 소개
현재 인덱스를 기준으로 새로운 인덱스에 대한 인덱서(indexer)와 마스크(mask)를 계산하려면 Pandas의 index.get_indexer() 메서드를 사용합니다. 이 메서드는 대상 배열의 각 값이 원본 인덱스에서 어느 위치에 해당하는지를 나타내는 정수 배열을 반환하며, 원본 인덱스에 존재하지 않는 값은 -1로 표시됩니다.
필수 라이브러리 임포트
먼저 필요한 라이브러리를 가져옵니다.
import pandas as pdPandas 인덱스 생성
정수 값들로 구성된 Pandas 인덱스를 생성합니다.
index = pd.Index([10, 20, 30, 40, 50, 60, 70])인덱스 출력
생성된 Pandas 인덱스를 화면에 출력합니다.
print("Pandas Index...\n", index)인덱서 및 마스크 계산
get_indexer() 메서드에 새 인덱스로 사용할 값들을 전달하여 위치 정보를 계산합니다. 이때 원본 인덱스에 없는 값(예: 90, 100)은 -1로 표시됩니다.
print("\nGet the indexes...\n", index.get_indexer([30, 40, 90, 100, 50]))전체 예제 코드
지금까지의 과정을 하나로 합친 전체 코드는 다음과 같습니다.
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)
# 인덱서 및 마스크 계산
# 원본 인덱스에 없는 값은 -1로 표시됨
print("\nGet the indexes...\n", index.get_indexer([30, 40, 90, 100, 50]))실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Pandas Index... Int64Index([10, 20, 30, 40, 50, 60, 70], dtype='int64') Number of elements in the index... 7 Get the indexes... [ 2 3 -1 -1 4]
결과 해석
출력된 결과를 값별로 살펴보면 다음과 같습니다.
- 30 → 2 : 값 30은 원본 인덱스의 2번 위치에 있습니다.
- 40 → 3 : 값 40은 원본 인덱스의 3번 위치에 있습니다.
- 90 → -1 : 값 90은 원본 인덱스에 존재하지 않습니다.
- 100 → -1 : 값 100 역시 원본 인덱스에 없습니다.
- 50 → 4 : 값 50은 원본 인덱스의 4번 위치에 있습니다.
참고로 최신 버전의 Pandas에서는 Int64Index가 deprecated되어 일반 Index로 통합되었으며, 출력 형식은 버전에 따라 다소 차이가 있을 수 있습니다.
참고 : method 매개변수로 근사 매칭
get_indexer()는 기본적으로 정확히 일치하는 값만 찾지만, method 매개변수를 지정하면 일치하지 않는 값도 유연하게 처리할 수 있습니다.
- 'pad' / 'ffill' : 일치하는 값이 없으면 이전(앞쪽) 값으로 매칭합니다.
- 'backfill' / 'bfill' : 일치하는 값이 없으면 다음(뒤쪽) 값으로 매칭합니다.
- 'nearest' : 가장 가까운 값으로 매칭합니다.
단, 이 옵션들은 원본 인덱스가 정렬되어 있어야 정상적으로 동작한다는 점에 유의하세요.