NumPy Boolean Indexing: Filter Array dengan Kondisi (2026)
TL;DR
Boolean indexing di NumPy nyaring array pakai kondisi logika. Kamu bikin mask, yaitu array True dan False dari sebuah perbandingan, lalu pakai mask itu buat ambil elemen yang True. Gabung beberapa kondisi pakai & buat dan, | buat atau, dan bungkus tiap kondisi dengan kurung.
Boolean indexing di NumPy nyaring array pakai kondisi logika. Kamu tulis syarat, NumPy ngambil cuma elemen yang memenuhi.
Ini cara paling cepat buat jawab pertanyaan kayak ambil semua penjualan di atas 100 juta, tanpa loop satu-satu.
Aku bahas cara bikin mask, gabung beberapa kondisi, ngitung, dan ngubah nilai lewat kondisi. Contohnya pakai data penjualan toko biar kebayang.
Apa itu boolean indexing di NumPy?
Boolean indexing adalah cara ngambil elemen array pakai array True dan False. Waktu kamu tulis kondisi kayak arr > 100, NumPy ngebalikin array berisi True di posisi yang memenuhi. Array itu dipakai buat nyaring, cuma yang True yang keambil.
Butuh dasar array dulu? Ada di tutorial NumPy array. Definisi singkatnya di glossary NumPy.
import numpy as np
penjualan = np.array([120, 95, 210, 80, 150])
mask = penjualan > 100
print(mask) # [ True False True False True]
print(penjualan[mask]) # [120 210 150]Baris terakhir itu inti boolean indexing. penjualan[mask] cuma ngambil elemen yang posisinya True. Kamu juga bisa singkat jadi penjualan[penjualan > 100] langsung.
Gimana cara gabung beberapa kondisi?
Gabung kondisi pakai & buat dan, | buat atau. Beda dari Python biasa yang pakai kata and dan or. Yang penting, bungkus tiap kondisi pakai kurung, kalau nggak hasilnya error atau salah.
penjualan = np.array([120, 95, 210, 80, 150])
# penjualan antara 100 dan 200
mask = (penjualan > 100) & (penjualan < 200)
print(penjualan[mask]) # [120 150]
# penjualan di bawah 100 atau di atas 200
mask2 = (penjualan < 100) | (penjualan > 200)
print(penjualan[mask2]) # [95 210 80]Kurung itu wajib. penjualan > 100 & penjualan < 200 tanpa kurung bakal salah baca urutan operasinya. Ini kesalahan paling sering di boolean indexing.
Gimana cara hitung elemen yang memenuhi kondisi?
Mask itu array True dan False, dan True dianggap 1 waktu dijumlah. Jadi mask.sum() ngitung berapa elemen yang memenuhi. mask.mean() ngasih proporsinya. Ini trik cepat buat jawab berapa banyak dan berapa persen.
penjualan = np.array([120, 95, 210, 80, 150, 300, 60])
(penjualan > 100).sum() # 4 ada 4 hari di atas 100
(penjualan > 100).mean() # 0.571 sekitar 57% hari
np.any(penjualan > 250) # True ada yang di atas 250
np.all(penjualan > 50) # True semua di atas 50np.any ngecek apakah ada minimal satu yang memenuhi. np.all ngecek apakah semua memenuhi. Dua fungsi ini berguna buat validasi cepat sebelum lanjut analisis.
Gimana cara ubah nilai lewat kondisi?
Kamu bisa pakai mask di sisi kiri buat ngubah nilai yang memenuhi. Ini berguna buat benerin data, misalnya ganti angka negatif jadi nol. np.where juga bisa dipakai buat bikin array baru berdasarkan kondisi.
stok = np.array([10, -3, 25, -1, 40])
# ganti nilai negatif jadi 0
stok[stok < 0] = 0
print(stok) # [10 0 25 0 40]
# bikin label pakai np.where
penjualan = np.array([120, 95, 210, 80])
label = np.where(penjualan > 100, 'tinggi', 'rendah')
print(label) # ['tinggi' 'rendah' 'tinggi' 'rendah']np.where(kondisi, nilai_kalau_true, nilai_kalau_false) jalan ke semua elemen sekaligus. Ini versi vektor dari IF, mirip logika kolom bersyarat di pandas.
Contoh kasus: filter penjualan toko_berkah
Toko_berkah punya data penjualan harian 30 hari dalam array. Aku mau tau berapa hari yang tembus target 150 juta, dan berapa rata-rata di hari-hari itu.
penjualan = np.array([
120, 95, 210, 80, 150, 300, 60, 175, 90, 200,
140, 165, 55, 180, 130, 220, 70, 160, 110, 190,
145, 155, 85, 205, 100, 170, 65, 185, 125, 195
])
tembus = penjualan[penjualan >= 150]
print(tembus.size) # 15 hari
print(tembus.mean()) # 190.33 juta rata-rataHasilnya jelas. Dari 30 hari, tepat 15 hari tembus target, alias separuh bulan. Di hari-hari sukses itu, rata-ratanya 190 juta, jauh di atas target 150 juta.
Angka ini kepakai buat keputusan nyata. Kalau separuh hari udah lewat target dengan margin gede, mungkin targetnya kekecilan dan perlu dinaikin. Semua kesimpulan ini dari dua baris boolean indexing, tanpa loop.
Habis nyaring, biasanya lanjut agregasi kayak yang aku bahas di fungsi agregasi NumPy. Versi filter di pandas ada di filter baris pandas.
Kesalahan umum boolean indexing NumPy
- Pakai and atau or. NumPy butuh
&dan|, bukan kata and dan or. Kata Python biasa bakal error di array. - Lupa kurung tiap kondisi.
(a > 1) & (b < 2)harus pakai kurung. Tanpa itu, urutan operasi salah. - Mask beda panjang. Mask harus sama panjang sama array yang disaring. Kalau beda, hasilnya error atau meleset.
- Kira hasil filter itu view. Boolean indexing ngasih salinan, bukan view. Ngubah hasil filter nggak ngubah array asli, kecuali kamu pakai mask di sisi kiri.
FAQ
Kenapa harus pakai & bukan kata and?
Karena kata and di Python cuma jalan buat satu nilai True atau False, bukan buat array. Waktu kamu bandingin array, hasilnya banyak nilai boolean sekaligus, dan and nggak ngerti itu. Operator & jalan elemen per elemen, jadi cocok buat array. Sama juga | buat atau. Jangan lupa bungkus tiap kondisi pakai kurung.
Boolean indexing bikin salinan atau view?
Boolean indexing ngasih salinan, bukan view. Jadi kalau kamu simpan hasilnya lalu ubah, array asli nggak ikut berubah. Ini beda dari slicing biasa yang ngasih view. Tapi kalau kamu pakai mask di sisi kiri, misalnya arr[arr < 0] = 0, itu ngubah array asli langsung. Bedanya penting biar nggak salah kira.
Gimana cara hitung berapa elemen yang lolos kondisi?
Pakai .sum() di mask-nya. Karena True dihitung sebagai 1, (arr > 100).sum() ngasih jumlah elemen yang memenuhi. Buat proporsinya pakai .mean(), yang ngasih pecahan antara 0 dan 1. Dua trik ini cepat banget buat jawab pertanyaan berapa banyak data yang lewat ambang tertentu tanpa nulis loop.
Bisa boolean indexing di array 2 dimensi?
Bisa. Kondisi tetap ngasih mask berbentuk sama, dan hasilnya array 1 dimensi berisi elemen yang lolos. Kamu juga bisa saring baris pakai kondisi di satu kolom, misalnya data[data[:, 0] > 100]. Ini pola yang sering kepakai buat nyaring baris tabel berdasarkan nilai kolom tertentu. Hasilnya tetap salinan.
Lanjut praktek
Tiga hal yang perlu nempel: kondisi bikin mask True dan False, pakai & dan | dengan kurung buat gabung syarat, dan mask di sisi kiri buat ngubah nilai.
Habis bisa nyaring, lanjut ke ringkasan angka di fungsi agregasi NumPy. Kalau mau ngerti gimana skill ini kepakai di kerjaan, cek glossary Data Analyst.
Detail teknisnya ada di dokumentasi indexing NumPy. Mau latihan olah data angka dari nol? Cek materi di Ngulik Data dan mulai ngulik dataset sendiri.
Mau praktek langsung? Mulai latihan SQL gratis
Latihan interaktif, langsung di browser.
Artikel terkait
Uji Chi-Square: Konsep dan Contoh Praktis (2026)
Mau tau apakah metode bayar berhubungan sama tipe pelanggan? Uji chi-square jawabannya. Ini konsep, rumus, cara hitung di Python, plus contoh data toko nyata.
Korelasi Spearman: Kapan Dipakai vs Pearson
Korelasi Spearman kerja di peringkat, bukan nilai asli. Ini bedanya dengan Pearson, kapan pakai yang mana, dan cara hitungnya di Excel dan Python.
Korelasi Pearson: Cara Menghitung dan Membaca
Korelasi Pearson ngukur seberapa kuat dua angka bergerak bareng. Ini cara hitung dan baca nilainya dengan contoh dataset toko Indonesia.