Để tính indexer và mask cho một Index mới ngay cả khi Index hiện tại có các giá trị không duy nhất (non-unique), sử dụng phương thức index.get_indexer_non_unique().
Các bước thực hiện
- Import thư viện:
import pandas as pd - Tạo Index có giá trị trùng lặp:
index = pd.Index([10, 20, 30, 40, 40, 50, 60, 60, 60, 70]) - Gọi
index.get_indexer_non_unique([30, 40, 90, 100, 50, 60]).
Ví dụ hoàn chỉnh
import pandas as pd
# Tạo Index với giá trị trùng lặp
index = pd.Index([10, 20, 30, 40, 40, 50, 60, 60, 60, 70])
print("Pandas Index...\n", index)
print("\nNumber of elements in the index...\n", index.size)
# Tính indexer và mask cho các giá trị mục tiêu
# Giá trị không có trong index được đánh dấu -1
print("\nGet the indexes...\n", index.get_indexer_non_unique([30, 40, 90, 100, 50, 60]))
Kết quả
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))
Giải thích:
- Mảng đầu tiên: vị trí trong index gốc cho từng giá trị mục tiêu (giá trị trùng lặp được liệt kê hết, giá trị thiếu = -1).
- Mảng thứ hai (mask): chỉ số của các giá trị mục tiêu không tìm thấy trong index gốc (ở đây là 90 và 100 tại vị trí 2, 3 của mảng mục tiêu).