Pandas에서 두 개의 Index 객체의 합집합(union)을 구하려면 index1.union(index2) 메서드를 사용합니다. 기본적으로 union() 메서드는 결과를 오름차순으로 정렬하여 반환하는데, 이때 sort 매개변수를 False로 설정하면 원래 순서가 유지된 채 정렬되지 않은 결과를 얻을 수 있습니다.
기본 사용법
먼저 필요한 라이브러리를 임포트합니다.
import pandas as pd두 개의 Pandas 인덱스를 생성합니다.
index1 = pd.Index([10, 20, 30, 40, 50])
index2 = pd.Index([80, 65, 60, 70, 55])생성한 인덱스를 출력해 내용을 확인합니다.
print("Pandas Index1...\n", index1)
print("Pandas Index2...\n", index2)이제 합집합을 수행합니다. sort=False 옵션을 지정하여 결과가 자동으로 정렬되지 않도록 처리했습니다.
res = index1.union(index2, sort=False)예제 코드
전체 코드는 다음과 같습니다.
import pandas as pd
# 두 개의 Pandas 인덱스 생성
index1 = pd.Index([10, 20, 30, 40, 50])
index2 = pd.Index([80, 65, 60, 70, 55])
# 인덱스1과 인덱스2 출력
print("Pandas Index1...\n", index1)
print("Pandas Index2...\n", index2)
# 각 인덱스의 요소 개수 확인
print("\nNumber of elements in index1...\n", index1.size)
print("\nNumber of elements in index2...\n", index2.size)
# 합집합 수행
# sort 매개변수를 False로 지정하여 결과를 정렬하지 않음
res = index1.union(index2, sort=False)
# 두 인덱스의 합집합 출력
# 결과는 정렬되지 않은 상태로 유지됨
print("\nThe index1 and index2 Union with unsorted result...\n", res)실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Pandas Index1... Int64Index([10, 20, 30, 40, 50], dtype='int64') Pandas Index2... Int64Index([80, 65, 60, 70, 55], dtype='int64') Number of elements in index1... 5 Number of elements in index2... 5 The index1 and index2 Union with unsorted result... Int64Index([10, 20, 30, 40, 50, 80, 65, 60, 70, 55], dtype='int64')
정리
실행 결과를 보면 합집합의 요소들이 [10, 20, 30, 40, 50, 80, 65, 60, 70, 55]처럼 첫 번째 인덱스의 순서를 먼저 유지하고, 그 뒤에 두 번째 인덱스의 요소가 원래 순서대로 이어지는 것을 확인할 수 있습니다. 만약 sort 매개변수를 생략하거나 True로 지정하면 결과가 [10, 20, 30, 40, 50, 55, 60, 65, 70, 80]처럼 오름차순으로 정렬됩니다.
참고로 Pandas 최신 버전(1.4 이상)에서는 Int64Index와 같은 전용 인덱스 클래스가 더 이상 권장되지 않으며, 모든 인덱스가 통합된 Index 클래스로 표시됩니다. 동작 방식은 동일하므로 위 예제 코드는 그대로 사용할 수 있습니다.