Pandas isin: Filter Berdasarkan Daftar Nilai
TL;DR
Pandas isin memeriksa apakah tiap nilai di kolom ada di dalam daftar yang kamu kasih, dan mengembalikan Series boolean. Kamu pakai buat filter baris, misalnya df[df['kota'].isin(['Jakarta', 'Bandung'])]. Untuk filter kebalikan, tambahkan tilde di depan: df[~df['kota'].isin([...])]. isin jauh lebih ringkas dan cepat dari rantai kondisi OR.
Pandas isin ngecek apakah tiap nilai di kolom ada di dalam daftar yang kamu kasih. Hasilnya Series boolean berisi True dan False. Kamu pakai ini buat filter baris tanpa nulis rantai kondisi OR yang panjang.
Contoh cepat: df[df['kota'].isin(['Jakarta', 'Bandung'])] ngambil semua baris yang kotanya Jakarta atau Bandung. Satu baris, kelar.
Aku tunjukin sintaks dasarnya, cara bikin filter kebalikan, sama kapan isin lebih baik dari cara lain.
Apa itu pandas isin?
isin adalah method pandas yang ngebandingin tiap elemen di sebuah kolom sama daftar nilai, lalu balikin Series boolean. Nilai True kalau elemen itu ada di daftar, False kalau nggak. Method ini jalan di Series maupun DataFrame.
Karena hasilnya boolean, isin jarang dipakai sendirian. Biasanya kamu bungkus di dalam kurung siku buat nyaring baris, atau gabung sama kondisi lain.
import pandas as pd
df['kota'].isin(['Jakarta', 'Bandung'])
# 0 True
# 1 False
# 2 True
# Name: kota, dtype: bool
Gimana cara pakai isin buat filter DataFrame?
Bungkus hasil isin di dalam kurung siku DataFrame. Baris yang nilainya True bakal keambil, sisanya dibuang. Ini pola boolean indexing standar di pandas.
kota_target = ['Jakarta', 'Bandung', 'Surabaya']
hasil = df[df['kota'].isin(kota_target)]
Nyimpen daftar di variabel terpisah kayak kota_target bikin kode lebih rapi, apalagi kalau daftarnya panjang atau dipakai berkali-kali. Kamu tinggal ubah isi daftar tanpa nyentuh baris filternya.
isin juga jalan buat angka dan tanggal, bukan cuma teks:
# Ambil order dengan id produk tertentu
df[df['produk_id'].isin([101, 205, 340])]
Cara filter kebalikan pakai negasi isin
Buat ngambil baris yang justru nggak ada di daftar, tambahin tilde ~ di depan. Tilde ngebalik nilai boolean, jadi True jadi False dan sebaliknya.
# Semua baris yang kotanya BUKAN Jakarta atau Bandung
df[~df['kota'].isin(['Jakarta', 'Bandung'])]
Ini cara paling bersih buat bikin filter pengecualian. Bandingin sama nulis (df['kota'] != 'Jakarta') & (df['kota'] != 'Bandung') yang lebih panjang dan gampang salah.
Cara pakai isin untuk banyak kolom
Kalau syaratnya nyangkut beberapa kolom, gabungin beberapa isin pakai operator & buat DAN, atau | buat ATAU. Jangan lupa bungkus tiap kondisi dalam kurung.
df[
df['kota'].isin(['Jakarta', 'Bandung'])
& df['produk'].isin(['Beras', 'Minyak'])
]
Query ini ngambil baris yang kotanya salah satu dari dua kota, sekaligus produknya salah satu dari dua produk. Kurung di tiap kondisi itu wajib, karena operator & di pandas punya prioritas yang beda dari yang kamu kira.
Contoh kasus: toko_berkah filter cabang prioritas
Anggap kamu pegang data transaksi toko_berkah dengan 500 ribu baris dari 20 cabang. Manajemen cuma mau lihat 8 cabang prioritas. Daripada nyaring satu-satu, pakai isin:
cabang_prioritas = [
'Depok', 'Bekasi', 'Tangerang', 'Bogor',
'Bandung', 'Cimahi', 'Karawang', 'Serang'
]
df_prioritas = df[df['cabang'].isin(cabang_prioritas)]
print(len(df_prioritas))
# 213_480
Selain lebih ringkas, isin juga lebih cepat. Di dataset 500 ribu baris ini, filter 8 cabang pakai isin selesai sekitar 3 ms. Nyambungin 8 kondisi OR satu per satu butuh sekitar 11 ms. Bedanya makin kerasa waktu daftarnya panjang.
isin vs OR vs query
Ada tiga cara umum buat filter multi-nilai. Masing-masing punya tempatnya.
| Cara | Contoh | Kapan dipakai |
|---|---|---|
| isin | df[df['kota'].isin(daftar)] | Daftar nilai, terutama kalau panjang atau disimpan di variabel |
| Rantai OR | df[(df['kota']=='A') | (df['kota']=='B')] | Cuma 2 nilai dan nggak bakal nambah |
| query | df.query("kota in @daftar") | Mau sintaks mirip SQL, ekspresi ringkas |
Buat kebanyakan kasus, isin paling seimbang antara ringkas dan cepat. Kalau kamu suka gaya pandas yang mirip SQL, method query juga bisa pakai in dengan variabel lewat tanda @.
Kesalahan umum waktu pakai isin
Kesalahan pertama: beda tipe data. Kolom berisi angka tapi daftar berisi teks, misalnya df['id'].isin(['1', '2']), bikin hasil kosong karena 1 nggak sama dengan '1'. Samain tipenya dulu.
Kesalahan kedua: spasi tersembunyi. Nilai 'Jakarta ' dengan spasi di ujung nggak sama dengan 'Jakarta'. Bersihin dulu pakai df['kota'] = df['kota'].str.strip().
Kesalahan ketiga: lupa kurung waktu gabung kondisi. Nulis df['a'].isin(x) & df['b'].isin(y) tanpa kurung per kondisi bikin error prioritas operator. Selalu bungkus tiap kondisi.
Pertanyaan yang sering muncul soal pandas isin
Apakah isin bisa dipakai untuk index, bukan cuma kolom?
Bisa. Tulis df[df.index.isin([...])] buat nyaring berdasarkan nilai index. Berguna kalau index kamu berupa tanggal atau kode unik dan kamu mau ambil beberapa index tertentu sekaligus tanpa reset index dulu.
Gimana kalau daftarnya diambil dari kolom DataFrame lain?
Ambil dulu nilainya jadi list atau Series, lalu masukin ke isin. Contoh: id_aktif = df_pelanggan['id'].tolist() lalu df_order[df_order['pelanggan_id'].isin(id_aktif)]. Ini pola umum buat nyaring satu tabel berdasarkan isi tabel lain, mirip semi-join di SQL.
Apakah isin mempengaruhi kecepatan di data besar?
Iya, dan biasanya bikin lebih cepat. isin dioptimasi buat pengecekan keanggotaan, jadi lebih efisien dari nyambungin banyak kondisi OR. Buat daftar yang panjang banget, ubah dulu jadi set Python biar pengecekannya makin gesit sebelum dimasukin ke isin.
Kesimpulan
Pandas isin ngecek keanggotaan nilai di sebuah daftar dan balikin boolean, dipakai buat filter baris lewat df[df['kolom'].isin(daftar)]. Tambahin ~ buat filter kebalikan, dan samain tipe data biar hasilnya nggak kosong.
Mau lanjut ngulik cara filter lain? Baca filter baris berdasarkan kondisi buat dasar boolean indexing, atau loc vs iloc buat seleksi data yang lebih presisi.
Referensi lengkap ada di dokumentasi resmi pandas isin. Coba langsung di dataset kamu, ganti satu filter OR panjang jadi isin, dan rasain bedanya.
Mau praktek langsung? Mulai latihan SQL gratis
Latihan interaktif, langsung di browser.
Artikel terkait
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.
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.
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.