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

Pandas get_indexer() 활용법 – 현재 인덱스를 기준으로 새 인덱스의 인덱서와 마스크 계산하기

Pandas get_indexer() 메서드 소개

현재 인덱스를 기준으로 새로운 인덱스에 대한 인덱서(indexer)와 마스크(mask)를 계산하려면 Pandas의 index.get_indexer() 메서드를 사용합니다. 이 메서드는 대상 배열의 각 값이 원본 인덱스에서 어느 위치에 해당하는지를 나타내는 정수 배열을 반환하며, 원본 인덱스에 존재하지 않는 값은 -1로 표시됩니다.

필수 라이브러리 임포트

먼저 필요한 라이브러리를 가져옵니다.

import pandas as pd

Pandas 인덱스 생성

정수 값들로 구성된 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' : 가장 가까운 값으로 매칭합니다.

단, 이 옵션들은 원본 인덱스가 정렬되어 있어야 정상적으로 동작한다는 점에 유의하세요.