0Pricing
Pandas & NumPy Academy · Pelajaran

Penyaring isin() dan between()

Pilih baris yang nilai kolomnya terdapat dalam sebuah daftar dengan isin() atau berada dalam rentang numerik dengan between()

Penyaring isin() dan between() adalah pelajaran Pandas & NumPy Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Pandas & NumPy Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.

Gambaran Umum Metode isin()

isin() memeriksa apakah setiap elemen Series terdapat dalam daftar (atau himpunan) nilai tertentu. Metode ini mengembalikan Series boolean yang dapat langsung digunakan untuk memfilter baris. Cara ini lebih ringkas dan sering kali lebih cepat daripada merangkai beberapa perbandingan == dengan |.

Misalnya, alih-alih menggunakan (df['country'] == 'USA') | (df['country'] == 'UK'), Anda dapat menulis df['country'].isin(['USA', 'UK']).

import pandas as pd

df = pd.DataFrame({
    'country': ['USA', 'Germany', 'UK', 'France', 'USA'],
    'sales': [400, 200, 150, 300, 600]
})

# Check membership
mask = df['country'].isin(['USA', 'UK'])
print(mask.tolist())  # [True, False, True, False, True]

result = df[mask]
print(result)
#   country  sales
# 0     USA    400
# 2      UK    150
# 4     USA    600

isin() dengan Set untuk Kecepatan

Anda dapat meneruskan set Python, bukan daftar, ke isin(). Pencarian keanggotaan dalam set memiliki kompleksitas O(1) — prosesnya tidak menjadi lebih lambat ketika daftar bertambah panjang. Hal ini penting ketika daftar nilai yang diizinkan berisi ribuan entri, sehingga isin() berbasis set jauh lebih cepat daripada isin() berbasis daftar.

import pandas as pd

df = pd.DataFrame({
    'sku': ['A001', 'B002', 'A003', 'C004', 'B005'],
    'qty': [10, 5, 3, 8, 12]
})

# Use a set for fast membership check
allowed_skus = {'A001', 'A003', 'B005'}
result = df[df['sku'].isin(allowed_skus)]
print(result)
#     sku  qty
# 0  A001   10
# 2  A003    3
# 4  B005   12

Meniadakan isin() dengan ~

Gabungkan isin() dengan operator ~ untuk memfilter baris yang kolomnya tidak berisi nilai yang ditentukan. Ini adalah cara paling rapi untuk mengecualikan daftar nilai tertentu, dan jauh lebih mudah dibaca daripada membuat rangkaian perbandingan !=.

import pandas as pd

df = pd.DataFrame({
    'status': ['active', 'cancelled', 'shipped', 'refunded', 'active'],
    'amount': [100, 200, 300, 150, 500]
})

bad_statuses = ['cancelled', 'refunded']
# Keep all rows NOT in the excluded list
result = df[~df['status'].isin(bad_statuses)]
print(result)
#     status  amount
# 0   active     100
# 2  shipped     300
# 4   active     500

isin() dengan Kolom DataFrame sebagai Daftar

Trik yang sangat bermanfaat adalah meneruskan nilai dari kolom DataFrame lain ke isin(). Cara ini setara dengan semi-join SQL: pertahankan baris di df1 yang kuncinya muncul di df2. Berbeda dari penggabungan penuh, cara ini tidak menggandakan baris atau menambahkan kolom ekstra — hanya melakukan pemfilteran.

import pandas as pd

orders = pd.DataFrame({
    'order_id': [1, 2, 3, 4, 5],
    'revenue': [100, 200, 300, 400, 500]
})

vip_orders = pd.DataFrame({'order_id': [2, 4]})

# Keep orders whose ID appears in vip_orders
result = orders[orders['order_id'].isin(vip_orders['order_id'])]
print(result)
#    order_id  revenue
# 1         2      200
# 3         4      400

Gambaran Umum Metode between()

between(left, right) mengembalikan Series boolean yang bernilai True ketika nilainya berada dalam rentang tertutup [left, right] (secara bawaan, termasuk kedua batas). Metode ini menggantikan kondisi dua sisi seperti (df['age'] >= 18) & (df['age'] <= 65) dengan satu pemanggilan yang mudah dibaca.

Parameter inclusive mengatur penyertaan batas: 'both' (bawaan), 'left', 'right', atau 'neither'.

import pandas as pd

df = pd.DataFrame({
    'age': [15, 22, 35, 67, 45, 8]
})

# Select working-age population
result = df[df['age'].between(18, 65)]
print(result)
#    age
# 1   22
# 2   35
# 4   45

between() dengan Parameter inclusive

Secara bawaan, kedua titik ujung disertakan dalam rentang. Pengaturan inclusive='left' mengecualikan batas kanan (berguna untuk interval setengah terbuka seperti kelompok waktu), inclusive='right' mengecualikan batas kiri, sedangkan inclusive='neither' mengecualikan kedua titik ujung untuk interval terbuka yang ketat.

import pandas as pd

df = pd.DataFrame({'score': [0, 50, 100, 75, 50]})

# Include only scores strictly between 50 and 100
strict = df[df['score'].between(50, 100, inclusive='neither')]
print(strict)
#    score
# 3     75

# Include 50 but not 100
left_closed = df[df['score'].between(50, 100, inclusive='left')]
print(left_closed)
#    score
# 1     50
# 3     75
# 4     50

between() pada Kolom Tanggal

between() juga dapat digunakan pada kolom datetime. Teruskan string tanggal atau objek Timestamp sebagai batas, lalu Pandas akan melakukan perbandingan pada nilai datetime yang mendasarinya. Ini adalah cara yang rapi untuk mengambil irisan jendela waktu tanpa mengubah tanggal menjadi bilangan bulat.

import pandas as pd

df = pd.DataFrame({
    'date': pd.to_datetime(['2024-01-01', '2024-06-15', '2024-11-20', '2025-03-01']),
    'value': [10, 20, 30, 40]
})

# Filter rows in the year 2024
result = df[df['date'].between('2024-01-01', '2024-12-31')]
print(result)
#         date  value
# 0 2024-01-01     10
# 1 2024-06-15     20
# 2 2024-11-20     30

Menggabungkan isin() dan between()

Anda dapat menggabungkan isin() dan between() dalam ekspresi boolean yang sama menggunakan & dan |. Cara ini menghasilkan filter yang ringkas dan mudah dibaca, yang jika tidak demikian akan memerlukan banyak kondisi bertingkat. Selalu apit setiap pemanggilan dengan tanda kurung saat menggabungkannya.

import pandas as pd

df = pd.DataFrame({
    'region': ['North', 'South', 'East', 'North', 'West'],
    'revenue': [100, 500, 200, 300, 400]
})

# Rows in North or South regions AND revenue between 200 and 400
result = df[
    df['region'].isin(['North', 'South']) &
    df['revenue'].between(200, 400)
]
print(result)
#    region  revenue
# 3   North      300
# 1   South      500  <- actually excluded (500 > 400)
# 3   North      300

isin() pada Beberapa Kolom dengan Any

Jika Anda ingin memeriksa apakah salah satu dari beberapa kolom berisi nilai dari suatu daftar, Anda dapat memanggil isin() pada seluruh DataFrame dan menggunakan .any(axis=1) untuk meringkas hasil berdasarkan baris. Cara ini berguna untuk mencari di beberapa kolom tag atau kategori secara bersamaan.

import pandas as pd

df = pd.DataFrame({
    'tag1': ['python', 'java', 'sql'],
    'tag2': ['sql', 'python', 'go'],
    'topic': ['Database', 'Backend', 'Infra']
})

target_langs = ['python', 'sql']
# Check if either tag column matches
mask = df[['tag1', 'tag2']].isin(target_langs).any(axis=1)
result = df[mask]
print(result)
#      tag1    tag2     topic
# 0  python     sql  Database
# 1    java  python   Backend
# 2     sql      go     Infra

Kiat Performa: isin() vs Beberapa ==

Untuk daftar kecil berisi 2–3 nilai, perbedaan antara isin() dan kondisi == yang dirangkai dapat diabaikan. Namun, untuk daftar besar (ratusan nilai), isin() jauh lebih cepat karena secara internal mengubah daftar menjadi hash set dan melakukan pencarian O(1) untuk setiap elemen, bukan perbandingan berurutan.

Selalu utamakan isin() daripada rangkaian panjang kondisi | agar kode lebih rapi dan performanya lebih baik.

import pandas as pd
import numpy as np

# 1 million row DataFrame
df = pd.DataFrame({'id': np.random.randint(0, 10000, size=1_000_000)})

allowed = list(range(0, 500))  # 500 allowed IDs

# isin() is the right approach here — fast hash lookup
result = df[df['id'].isin(allowed)]
print(result.shape)  # around (50000, 1)

Filter Dunia Nyata: Katalog Produk

Berikut contoh realistis yang menggabungkan isin() untuk memfilter kategori dan between() untuk memfilter rentang harga — pola umum dalam analitik perdagangan elektronik. Kedua filter tersebut secara bersama-sama memilih subset produk yang tepat untuk promosi yang ditargetkan.

import pandas as pd

products = pd.DataFrame({
    'name': ['Laptop', 'Mouse', 'Monitor', 'Keyboard', 'Webcam'],
    'category': ['Computing', 'Accessories', 'Displays', 'Accessories', 'Peripherals'],
    'price': [1200, 25, 300, 80, 150]
})

# Products in Accessories or Peripherals, priced 50-200
eligible = products[
    products['category'].isin(['Accessories', 'Peripherals']) &
    products['price'].between(50, 200)
]
print(eligible)
#        name     category  price
# 3  Keyboard  Accessories     80
# 4    Webcam  Peripherals    150

Pemeriksaan Singkat

Uji pemahaman Anda tentang filter isin() dan between().

Ringkasan Pelajaran

Dalam pelajaran ini, Anda telah mempelajari bahwa: isin() memeriksa keanggotaan dalam set dan lebih cepat daripada merangkai beberapa kondisi ==, ~isin() mengecualikan daftar nilai, dan between() memfilter rentang tertutup dengan parameter inclusive opsional. Kedua metode tersebut dapat digunakan pada kolom numerik, string, dan datetime. Selanjutnya, kita akan mempelajari cara memilih kolom DataFrame yang cocok dengan pola nama.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Penyaring isin() dan between()” gratis?

Ya — teks lengkap “Penyaring isin() dan between()” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Pandas & NumPy Academy, upgrade ke CoddyKit PRO. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Penyaring isin() dan between()”?

Pilih baris yang nilai kolomnya terdapat dalam sebuah daftar dengan isin() atau berada dalam rentang numerik dengan between() Kamu berlatih Pandas & NumPy Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Pandas & NumPy Academy?

Tidak diperlukan pengalaman sebelumnya. Pandas & NumPy Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Penyaring isin() dan between()” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Pandas & NumPy Academy ini?

Ya. Setiap pelajaran Pandas & NumPy Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Pengindeksan Boolean pada DataFrames
  2. Metode query()
  3. Penyaring isin() dan between()
  4. Memilih Kolom Berdasarkan Pola
← Kembali ke Pandas & NumPy Academy