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

Python Pandas get_indexer_non_unique() – 중복 값이 있는 인덱스 객체에서도 새 인덱스의 인덱서와 마스크 계산하기

개요

Pandas에서 index.get_indexer_non_unique() 메서드를 사용하면 값이 중복(고유하지 않음)되어 있는 Index 객체에 대해서도 새로운 인덱스에 대한 인덱서(indexer)마스크(mask)를 계산할 수 있습니다.

일반적인 get_indexer() 메서드는 고유한(unique) 값만 다룰 수 있지만, get_indexer_non_unique()는 중복된 값을 가진 인덱스에서도 원하는 위치를 정확하게 찾아줍니다. 또한, 찾으려는 값이 인덱스에 존재하지 않으면 해당 위치를 -1로 표시해 주기 때문에 누락된 값도 쉽게 확인할 수 있습니다.

라이브러리 임포트

먼저 필요한 라이브러리를 임포트합니다.

import pandas as pd

중복 값을 포함하는 Pandas 인덱스 생성

중복 값(40과 60이 여러 번 등장)을 포함하는 Pandas 인덱스를 생성합니다.

index = pd.Index([10, 20, 30, 40, 40, 50, 60, 60, 60, 70])

생성된 Pandas 인덱스를 출력합니다.

print("Pandas Index...\n", index)

인덱서와 마스크 계산하기

이제 get_indexer_non_unique()를 호출하여 인덱서와 마스크를 계산합니다. 찾으려는 값 중 인덱스에 없는 값(90, 100)은 -1로 표시됩니다. 동시에 중복된 값들(40, 60)에 해당하는 모든 위치도 함께 반환됩니다.

print("\nGet the indexes...\n", index.get_indexer_non_unique([30, 40, 90, 100, 50, 60]))

전체 예제 코드

다음은 위 내용을 모두 포함한 전체 코드입니다.

import pandas as pd

# 중복 값을 포함하는 Pandas 인덱스 생성
index = pd.Index([10, 20, 30, 40, 40, 50, 60, 60, 60, 70])

# Pandas 인덱스 출력
print("Pandas Index...\n", index)

# 인덱스의 요소 개수 반환
print("\nNumber of elements in the index...\n", index.size)

# 인덱서와 마스크 계산
# 인덱스에 없는 값은 -1로 표시됨
# 중복 값을 가진 Index 객체의 값도 함께 계산됨
print("\nGet the indexes...\n", index.get_indexer_non_unique([30, 40, 90, 100, 50, 60]))

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

Pandas Index...
Int64Index([10, 20, 30, 40, 40, 50, 60, 60, 60, 70], dtype='int64')

Number of elements in the index...
10

Get the indexes...
(array([ 2, 3, 4, -1, -1, 5, 6, 7, 8], dtype=int64), array([2, 3], dtype=int64))

결과 해석

출력 결과는 두 개의 배열로 구성됩니다.

첫 번째 배열 (인덱서): 찾으려는 각 값([30, 40, 90, 100, 50, 60])이 원본 인덱스에서 위치한 좌표입니다.
• 30 → 위치 2
• 40 → 위치 3과 4 (중복되어 두 개)
• 90 → -1 (존재하지 않음)
• 100 → -1 (존재하지 않음)
• 50 → 위치 5
• 60 → 위치 6, 7, 8 (중복되어 세 개)

두 번째 배열 (마스크): 어떤 검색 값이 중복으로 매칭되었는지 나타냅니다. 여기서 [2, 3]은 첫 번째 입력 배열 기준으로 인덱스 2(값 90)와 인덱스 3(값 100)에 해당하는 검색이 누락(-1) 처리되었음을 의미합니다.

이처럼 get_indexer_non_unique() 메서드는 중복 값을 허용하고, 존재하지 않는 값을 -1로 안전하게 처리해 주므로 복잡한 인덱스 재구성 작업에 유용하게 활용할 수 있습니다.