Pandas + np.where: Buat Kolom Bersyarat
Blog/Tips & Trik/Pandas + np.where: Buat Kolom Bersyarat

Pandas + np.where: Buat Kolom Bersyarat

BimaBima
·18 September 2026·8 menit baca

Penulis

Bima

Bima

Founder & Data Professional

Bagikan

TL;DR

np.where dari NumPy bikin kolom baru di pandas berdasarkan kondisi, dengan sintaks np.where(kondisi, nilai_jika_benar, nilai_jika_salah). Contoh: df['status'] = np.where(df['laba'] > 0, 'Untung', 'Rugi'). Karena vektorisasi, np.where jauh lebih cepat dari apply dengan lambda, terutama di data besar. Buat lebih dari dua kategori, pakai np.select.

np.where dari NumPy bikin kolom baru di pandas berdasarkan sebuah kondisi. Sintaksnya np.where(kondisi, nilai_jika_benar, nilai_jika_salah). Contoh cepat: df['status'] = np.where(df['laba'] > 0, 'Untung', 'Rugi').

Fungsi ini kepakai tiap kali kamu mau nandain baris berdasarkan aturan. Baris yang lolos kondisi dapat satu nilai, sisanya dapat nilai lain.

Aku tunjukin sintaks dasarnya, versi bertingkat buat banyak kategori, sama kenapa ini jauh lebih cepat dari apply.

Apa itu np.where di pandas?

np.where adalah fungsi NumPy yang milih antara dua nilai berdasarkan kondisi, elemen per elemen. Buat tiap baris, dia ngecek kondisinya. Kalau True, dia ambil nilai pertama. Kalau False, dia ambil nilai kedua. Hasilnya array yang bisa langsung kamu taruh jadi kolom baru di DataFrame.

Karena np.where dari NumPy, kamu perlu import dua-duanya:

import pandas as pd
import numpy as np

Bentuk dasarnya nerima tiga bagian: kondisi, nilai kalau benar, dan nilai kalau salah. Ketiganya bisa berupa nilai tunggal atau kolom.

Gimana cara pakai np.where buat kolom bersyarat?

Tulis kondisi di argumen pertama, lalu dua kemungkinan hasil di argumen kedua dan ketiga. Simpan hasilnya ke kolom baru.

df['status'] = np.where(df['laba'] > 0, 'Untung', 'Rugi')

Baris dengan laba di atas nol dapat label "Untung", sisanya "Rugi". Satu baris kode, beres buat seluruh kolom.

Nilai hasil nggak harus teks. Bisa angka, hasil hitungan, atau kolom lain. Contoh, kasih diskon 10% cuma buat order di atas 1 juta:

df['harga_final'] = np.where(
    df['total'] > 1_000_000,
    df['total'] * 0.9,
    df['total']
)

Di sini argumen kedua dan ketiga sama-sama kolom. np.where milih per baris mana yang dipakai.

Cara pakai np.where dengan banyak kondisi

Buat gabungin beberapa syarat, pakai operator & buat DAN dan | buat ATAU. Bungkus tiap kondisi dalam kurung.

df['segmen'] = np.where(
    (df['laba'] > 0) & (df['kota'] == 'Bandung'),
    'Target',
    'Bukan Target'
)

Kurung di tiap kondisi itu wajib. Operator & di numpy punya prioritas yang beda dari kata and biasa di Python, dan lupa kurung bikin error atau hasil salah.

Kalau kategorimu lebih dari dua, jangan maksa np.where bertingkat. Pakai np.select yang lebih rapi:

kondisi = [
    df['nilai'] >= 80,
    df['nilai'] >= 60,
    df['nilai'] >= 40
]
label = ['A', 'B', 'C']

df['grade'] = np.select(kondisi, label, default='D')

np.select ngecek kondisi dari atas ke bawah dan ambil label pertama yang cocok. Argumen default ngisi baris yang nggak lolos kondisi mana pun.

np.where vs apply vs np.select

Tiga cara umum buat bikin kolom bersyarat. Masing-masing punya tempatnya.

CaraCocok buatKecepatan
np.whereDua kategori, kondisi sederhanaPaling cepat (vektorisasi)
np.selectTiga kategori atau lebihCepat (vektorisasi)
apply + lambdaLogika rumit yang susah divektorisasiLambat (baris per baris)

Aturan praktisnya: coba np.where atau np.select dulu. Baru pindah ke apply kalau logikanya beneran nggak bisa ditulis sebagai kondisi vektor.

Contoh kasus: klasifikasi order toko_berkah

Anggap kamu pegang data 1 juta transaksi toko_berkah. Kamu mau nandain tiap order sebagai "Grosir" atau "Eceran" berdasarkan jumlah barang.

df['tipe_order'] = np.where(df['qty'] >= 12, 'Grosir', 'Eceran')

Selain ringkas, np.where juga jauh lebih cepat dari apply. Di 1 juta baris ini, np.where bikin kolom label selesai sekitar 6 ms. Cara yang sama pakai apply dengan lambda butuh sekitar 640 ms. Bedanya lebih dari seratus kali lipat.

Di data kecil selisih ini nggak kerasa. Tapi begitu datamu ratusan ribu baris ke atas, kebiasaan pakai np.where nghemat waktu tunggu yang nyata tiap kali kamu jalanin ulang notebook.

Kesalahan umum waktu pakai np.where

Kesalahan pertama: pakai and atau or buat gabung kondisi. Di numpy harus pakai & dan | dengan kurung di tiap kondisi. Pakai and bikin error "ambiguous truth value".

Kesalahan kedua: lupa import numpy. np.where butuh import numpy as np. Tanpa itu, Python nggak kenal np dan langsung error.

Kesalahan ketiga: maksa np.where bertingkat buat banyak kategori. Tiga tingkat np.where udah susah dibaca dan gampang salah. Ganti ke np.select yang emang dirancang buat kasus ini.

Pertanyaan yang sering muncul soal np.where

Bisa nggak np.where dipakai buat isi nilai kosong?

Bisa, tapi buat ngisi NaN biasanya lebih pas pakai fillna. np.where lebih cocok kalau syaratnya bukan cuma soal kosong, misalnya "kalau stok di bawah 5, tulis Restok, selain itu tulis Aman". Buat sekadar ganti NaN dengan satu nilai, fillna lebih langsung dan jelas maksudnya.

Apakah hasil np.where selalu berupa array numpy?

Iya, np.where balikin array NumPy. Tapi begitu kamu taruh jadi kolom DataFrame lewat df['kolom'] = ..., pandas otomatis ngubahnya jadi Series. Jadi kamu nggak perlu konversi manual. Kolom hasilnya bisa langsung dipakai buat filter, groupby, atau operasi pandas lain.

Gimana np.where nangani tipe data campur?

Kalau nilai benar dan salah beda tipe, misalnya angka dan teks, np.where naikin hasilnya ke tipe yang lebih umum, biasanya object. Ini bisa bikin kolom jadi lebih berat dari perlu. Usahakan dua nilai hasilnya setipe biar kolomnya tetap efisien dan gampang diolah lanjut.

Kesimpulan

np.where bikin kolom bersyarat di pandas lewat np.where(kondisi, nilai_benar, nilai_salah), dan jauh lebih cepat dari apply karena vektorisasi. Buat lebih dari dua kategori, pindah ke np.select biar tetap kebaca.

Mau lanjut ngulik cara bikin kategori lain? Baca binning data pakai cut dan qcut buat ngelompokin angka jadi rentang, atau dasar NumPy array buat pondasi di baliknya.

Referensi lengkap ada di dokumentasi resmi numpy.where. Coba langsung di dataset kamu, ganti satu kolom label yang tadinya pakai apply jadi np.where, dan rasain bedanya.

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

NumPy reshape: Ubah Bentuk Array (2026)
Tips & Trik
8 Oktober 2026•9 menit baca

NumPy reshape: Ubah Bentuk Array (2026)

Fungsi reshape di NumPy ngatur ulang bentuk array tanpa ngubah datanya. Ini cara pakainya, arti angka -1, dan cara ngeflat array.

BimaBima
NumPy Array: Dasar-Dasar untuk Analis Data (2026)
Tips & Trik
6 Oktober 2026•10 menit baca

NumPy Array: Dasar-Dasar untuk Analis Data (2026)

NumPy array bikin hitungan data di Python jauh lebih cepat dari list biasa. Ini dasar bikin, slicing, dan operasi array buat analis.

BimaBima
Alternatif iterrows yang Lebih Cepat di Pandas
Tips & Trik
3 Oktober 2026•8 menit baca

Alternatif iterrows yang Lebih Cepat di Pandas

iterrows nyaman ditulis tapi lambat. Ini urutan alternatif iterrows di pandas dari yang tercepat, plus benchmark biar kamu tau kapan pakai yang mana.

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