NumPy where: Operasi Bersyarat pada Array
Blog/Tips & Trik/NumPy where: Operasi Bersyarat pada Array

NumPy where: Operasi Bersyarat pada Array

BimaBima
·13 Oktober 2026·9 menit baca

Penulis

Bima

Bima

Founder & Data Professional

Bagikan

TL;DR

np.where adalah fungsi NumPy buat operasi bersyarat pada array. Bentuk np.where(kondisi, nilai_benar, nilai_salah) milih nilai buat tiap elemen sekaligus tanpa loop, mirip IF di Excel. Kalau dipanggil cuma dengan satu argumen, np.where(kondisi) balikin posisi elemen yang memenuhi syarat. Karena vektorisasi, hasilnya jauh lebih cepat dari looping manual di data besar.

np.where milih nilai berdasarkan kondisi ke seluruh array sekaligus, tanpa perlu loop. Bentuk dasarnya np.where(kondisi, nilai_kalau_benar, nilai_kalau_salah), mirip fungsi IF di Excel tapi jalan ke ribuan elemen dalam sekali panggil.

Buat analis yang sering bikin kolom kategori dari data mentah, ini salah satu fungsi NumPy yang paling sering kepakai tiap hari.

Di sini kamu bakal belajar sintaks np.where, cara pakai buat kolom bersyarat, cara bikin IF bertingkat, cara cari posisi elemen, plus studi kasus pakai data toko_berkah.

Apa itu np.where di NumPy?

np.where adalah fungsi NumPy buat memilih nilai dari dua pilihan berdasarkan kondisi, elemen per elemen. Kamu kasih array kondisi berisi True dan False, lalu np.where balikin nilai pertama di posisi True dan nilai kedua di posisi False. Semua diproses sekali jalan tanpa loop.

import numpy as np

nilai = np.array([70, 85, 45, 90, 60])
hasil = np.where(nilai >= 75, 'lulus', 'remedial')
print(hasil)
# ['remedial' 'lulus' 'remedial' 'lulus' 'remedial']

Bagian nilai >= 75 ngasilin array True/False. np.where baca array itu, terus isi 'lulus' di tiap posisi True dan 'remedial' di posisi False.

Kenapa gak pakai loop biasa aja? Karena np.where jalan lewat vektorisasi, operasinya dieksekusi di level C yang jauh lebih cepat dari loop Python. Konsep dasar array-nya aku bahas di dasar NumPy array.

Gimana cara bikin kolom bersyarat pakai np.where?

Kasih kondisi sebagai argumen pertama, lalu nilai buat True dan False. np.where cocok banget buat bikin label atau flag dari kolom angka, misalnya nandain transaksi besar. Hasilnya array baru yang bisa langsung kamu tempel jadi kolom di DataFrame.

import numpy as np

total = np.array([15000, 250000, 80000, 500000])
flag = np.where(total >= 100000, 'besar', 'kecil')
print(flag)
# ['kecil' 'besar' 'kecil' 'besar']

Nilai buat True dan False gak harus teks. Bisa angka, bisa juga hasil hitungan dari array lain. Contohnya, kasih diskon 10% cuma buat order di atas 100 ribu:

diskon = np.where(total >= 100000, total * 0.1, 0)
print(diskon)
# [    0. 25000.     0. 50000.]

Gimana bikin IF bertingkat dengan np.where?

Buat lebih dari dua kategori, susun np.where secara bertingkat dengan naruh np.where lagi di bagian nilai False. Tapi kalau tingkatnya banyak, ini cepat jadi susah dibaca. Buat kasus itu, pakai np.select yang lebih rapi.

skor = np.array([92, 78, 55, 88, 40])

# np.where bertingkat
grade = np.where(skor >= 90, 'A',
         np.where(skor >= 75, 'B',
         np.where(skor >= 60, 'C', 'D')))
print(grade)
# ['A' 'B' 'D' 'B' 'D']

Versi lebih bersih pakai np.select:

kondisi = [skor >= 90, skor >= 75, skor >= 60]
pilihan = ['A', 'B', 'C']
grade = np.select(kondisi, pilihan, default='D')

Aturannya np.select ngecek kondisi dari kiri ke kanan dan pakai yang pertama cocok. Jadi urutin kondisi dari paling ketat ke paling longgar.

Gimana cara cari posisi elemen dengan np.where?

Panggil np.where cuma dengan satu argumen kondisi, tanpa nilai True dan False. Bentuk ini balikin indeks posisi elemen yang memenuhi syarat, bukan nilainya. Berguna buat tau di baris mana suatu nilai muncul.

stok = np.array([12, 0, 5, 0, 30])
posisi_habis = np.where(stok == 0)
print(posisi_habis)
# (array([1, 3]),)

Hasilnya tuple berisi array indeks. Di sini stok kosong ada di posisi 1 dan 3. Kamu bisa pakai indeks ini buat ngambil baris terkait dari array atau DataFrame lain.

Contoh kasus: kategori order toko_berkah

Toko_berkah mau nandai tiap transaksi jadi tiga kelas ongkir berdasarkan total belanja. Dari dataset ngulikdata, ada 42.100 baris transaksi bulan Oktober. Pakai loop Python biasa, proses labelnya makan 0,9 detik. Pakai np.select, turun jadi 3 milidetik. Selisihnya sekitar 300 kali lebih cepat.

import numpy as np

total = np.array([45000, 120000, 350000, 90000])

kondisi = [total >= 300000, total >= 100000]
kelas   = ['gratis ongkir', 'ongkir separuh']
ongkir  = np.select(kondisi, kelas, default='ongkir penuh')
print(ongkir)
# ['ongkir penuh' 'ongkir separuh' 'gratis ongkir' 'ongkir penuh']

Angka 300 kali itu bukan buat pamer kecepatan. Intinya, begitu data kamu tembus puluhan ribu baris, ganti loop jadi operasi vektor beneran kerasa bedanya. Buat perbandingan lengkap loop lawan vektor, cek vektorisasi vs loop di pandas.

Kesalahan umum saat pakai np.where

Kesalahan pertama: pakai operator and atau or biasa buat gabung kondisi. Di NumPy, dua kata itu error buat array. Pakai & buat dan, | buat atau, dan bungkus tiap kondisi pakai kurung.

# SALAH
# np.where(total > 50000 and total < 200000, ...)

# BENAR
np.where((total > 50000) & (total < 200000), 'sedang', 'lain')

Kesalahan kedua: lupa kalau np.where dengan satu argumen balikin tuple, bukan array. Kalau kamu mau array indeksnya langsung, ambil elemen pertama pakai [0].

Kesalahan ketiga: mikir np.where bisa milih dari array yang ukurannya beda. Semua argumen harus bisa di-broadcast ke bentuk yang sama. Kalau bingung soal ini, baca NumPy broadcasting dulu.

FAQ

Apa beda np.where dan np.select?

np.where cocok buat dua hasil, benar dan salah. np.select buat banyak kondisi sekaligus dengan sintaks yang jauh lebih bersih. Kalau kamu udah nulis np.where bertingkat lebih dari dua tingkat, ganti ke np.select. Hasilnya sama, tapi kodenya lebih gampang dibaca dan diubah nanti.

Apakah np.where bisa dipakai di pandas?

Bisa langsung. np.where nerima Series pandas sebagai kondisi dan balikin array yang bisa kamu tempel jadi kolom baru, misalnya df['flag'] = np.where(df['total'] >= 100000, 'besar', 'kecil'). Pandas juga punya versinya sendiri, df.where, tapi perilakunya beda dan sering bikin bingung pemula.

Kenapa np.where lebih cepat dari loop?

Karena np.where pakai vektorisasi. Operasi dijalankan sekaligus ke seluruh array di level C, bukan satu-satu di Python. Buat 10 elemen bedanya gak kerasa. Tapi buat puluhan ribu baris, np.where bisa ratusan kali lebih cepat dari loop biasa, kayak yang keliatan di contoh toko_berkah.

Gimana kalau nilai True dan False beda tipe data?

NumPy bakal nyamain tipenya ke yang paling umum. Kalau kamu campur angka dan teks, hasilnya jadi array teks. Ini sering bikin kaget waktu kamu kira hasilnya angka tapi ternyata string. Pastiin nilai True dan False setipe kalau kamu mau lanjut hitung dari hasilnya.

Apakah np.where bisa buat array 2 dimensi?

Bisa. np.where jalan di array berapa dimensi pun selama bentuk kondisi dan nilainya cocok. Buat array 2 dimensi, versi satu argumen balikin dua array indeks, satu buat baris dan satu buat kolom. Ini berguna buat nemu posisi sel tertentu di matriks data.

Penutup

Yang perlu kamu bawa dari sini:

  • np.where(kondisi, a, b) milih nilai bersyarat ke seluruh array tanpa loop.
  • Buat banyak kategori, np.select lebih rapi dari np.where bertingkat.
  • np.where(kondisi) tanpa nilai balikin posisi elemen yang cocok.

Mau latihan operasi array sampai lancar? Mampir ke Ngulik Data buat materi Python analis data dari dasar. Lanjut juga ke bikin kolom bersyarat pakai pandas dan np.where biar makin nyambung ke kerja harian.

Dokumentasi resmi fungsinya ada di halaman numpy.where.

Coba Langsung

Mau praktek langsung? Mulai latihan SQL gratis

Latihan interaktif, langsung di browser.

Buka NgulikSQL →
Bagikan:
Bima
Ditulis oleh

Bima

Founder & Data Professional

Founder Ngulik Data. Passionate about making data analysis accessible for everyone.

Artikel terkait

Uji Chi-Square: Konsep dan Contoh Praktis (2026)
Tips & Trik
30 Desember 2026•9 menit baca

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.

BimaBima
Korelasi Spearman: Kapan Dipakai vs Pearson
Tips & Trik
27 Desember 2026•8 menit baca

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.

BimaBima
Korelasi Pearson: Cara Menghitung dan Membaca
Tips & Trik
24 Desember 2026•8 menit baca

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.

BimaBima
Kembali ke Blog
Ngulik Data logoNgulik Data

Platform edukasi data lengkap untuk professionals Indonesia. Belajar SQL, Data Analysis, dan lebih banyak lagi dengan praktek langsung dan feedback real-time.

© 2026 Ngulik Data. Semua hak dilindungi.

TAUTAN
BantuanHargaDatasetBlogAfiliasi
LEGAL
Syarat & KetentuanKebijakan Privasi
Ngulik Data
DatasetLeaderboardBlogStore