Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python Pandas – get_indexer()로 인덱서 계산하기: 정확한 일치가 없으면 다음 인덱스 값 찾기(bfill)

개요

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') 형태로 표시될 수 있지만, 동작 방식은 동일합니다.