Pandas isin: Filter Berdasarkan Daftar Nilai
Blog/Tips & Trik/Pandas isin: Filter Berdasarkan Daftar Nilai

Pandas isin: Filter Berdasarkan Daftar Nilai

BimaBima
·16 September 2026·7 menit baca

Penulis

Bima

Bima

Founder & Data Professional

Bagikan

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.

CaraContohKapan dipakai
isindf[df['kota'].isin(daftar)]Daftar nilai, terutama kalau panjang atau disimpan di variabel
Rantai ORdf[(df['kota']=='A') | (df['kota']=='B')]Cuma 2 nilai dan nggak bakal nambah
querydf.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.

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