Pengindeksan Boolean pada DataFrames
Saring baris dengan menerapkan kondisi boolean pada kolom dan menggabungkan beberapa kondisi menggunakan operator & dan |
Pengindeksan Boolean pada DataFrames adalah pelajaran Pandas & NumPy Academy gratis di CoddyKit. Ini adalah pelajaran 1 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.
Apa Itu Pengindeksan Boolean?
Pengindeksan boolean memungkinkan Anda memfilter baris dalam DataFrame dengan menerapkan kondisi yang menghasilkan Series berisi nilai True dan False. Hanya baris yang kondisinya True yang dikembalikan. Ini merupakan salah satu teknik pemilihan yang paling sering digunakan di Pandas karena mudah dibaca dan cepat.
Misalnya, dari DataFrame penjualan, Anda dapat langsung mengambil semua baris yang pendapatannya melebihi 1000 tanpa menulis perulangan.
import pandas as pd
df = pd.DataFrame({
'product': ['A', 'B', 'C', 'D'],
'revenue': [500, 1500, 800, 2000]
})
# Boolean condition produces a Series of True/False
mask = df['revenue'] > 1000
print(mask)
# 0 False
# 1 True
# 2 False
# 3 TrueMenerapkan Masker Boolean
Setelah memiliki masker boolean, Anda meneruskannya di dalam tanda kurung siku pada DataFrame untuk memilih hanya baris yang cocok. Hasilnya adalah DataFrame baru — data asli tidak pernah diubah. Indeks baris dari data asli dipertahankan, sehingga Anda selalu mengetahui asal setiap baris.
Pola ini — membuat masker, lalu menerapkannya — merupakan idiom standar Pandas untuk memfilter baris.
import pandas as pd
df = pd.DataFrame({
'product': ['A', 'B', 'C', 'D'],
'revenue': [500, 1500, 800, 2000]
})
mask = df['revenue'] > 1000
filtered = df[mask]
print(filtered)
# product revenue
# 1 B 1500
# 3 D 2000Kondisi Sebaris Tanpa Variabel Masker
Anda tidak perlu menetapkan Series boolean ke sebuah variabel. Anda dapat menulis kondisi tersebut secara sebaris langsung di dalam tanda kurung siku: df[df['col'] > value]. Gaya satu baris ini sangat umum dalam notebook analisis data karena membuat kode tetap ringkas dan mudah dibaca.
Kedua pendekatan — variabel masker dan sebaris — menghasilkan hasil yang sama. Gunakan variabel jika kondisinya kompleks atau digunakan kembali; gunakan bentuk sebaris untuk filter sederhana yang hanya digunakan sekali.
import pandas as pd
df = pd.DataFrame({
'city': ['NYC', 'LA', 'Chicago', 'Houston'],
'population': [8_336_817, 3_979_576, 2_693_976, 2_320_268]
})
# Inline boolean filter
large_cities = df[df['population'] > 3_000_000]
print(large_cities)
# city population
# 0 NYC 8336817
# 1 LA 3979576Menggabungkan Kondisi dengan & (AND)
Untuk mensyaratkan bahwa kedua kondisi bernilai benar, gabungkan keduanya dengan operator & — bukan kata kunci Python and, yang tidak bekerja secara elemen demi elemen pada array. Setiap kondisi harus dibungkus dalam tanda kurung karena & memiliki prioritas operator yang lebih tinggi daripada operator perbandingan.
Hasilnya hanya mempertahankan baris yang setiap subkondisinya bernilai True.
import pandas as pd
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Carol', 'Dave'],
'age': [25, 35, 28, 45],
'salary': [50000, 90000, 70000, 120000]
})
# Both conditions must be true
result = df[(df['age'] > 27) & (df['salary'] > 60000)]
print(result)
# name age salary
# 1 Bob 35 90000
# 2 Carol 28 70000Menggabungkan Kondisi dengan | (OR)
Gunakan operator | untuk mempertahankan baris yang setidaknya satu kondisinya bernilai benar. Seperti pada &, setiap subkondisi harus berada dalam tanda kurung. Operator | melakukan OR logis secara elemen demi elemen pada array boolean.
Mencampur & dan | sepenuhnya valid — tetapi berhati-hatilah dengan tanda kurung untuk memastikan urutan evaluasi yang benar dan menghindari kesalahan logika yang sulit terlihat.
import pandas as pd
df = pd.DataFrame({
'product': ['Laptop', 'Mouse', 'Monitor', 'Keyboard'],
'price': [1200, 25, 300, 80],
'category': ['Electronics', 'Accessories', 'Electronics', 'Accessories']
})
# Rows where price > 200 OR category is Accessories
result = df[(df['price'] > 200) | (df['category'] == 'Accessories')]
print(result)
# product price category
# 0 Laptop 1200 Electronics
# 1 Mouse 25 Accessories
# 2 Monitor 300 Electronics
# 3 Keyboard 80 AccessoriesMeniadakan Kondisi dengan ~
Operator tilde ~ membalik Series boolean — mengubah True menjadi False dan sebaliknya. Gunakan ~ untuk menyatakan logika 'NOT': pertahankan baris yang tidak cocok dengan suatu kondisi. Cara ini lebih rapi daripada menyusun kondisi kebalikan secara manual.
Misalnya, df[~df['status'].isin(['cancelled', 'refunded'])] mempertahankan semua baris kecuali baris dengan kedua status tersebut.
import pandas as pd
df = pd.DataFrame({
'order_id': [1, 2, 3, 4],
'status': ['shipped', 'cancelled', 'delivered', 'refunded']
})
# Keep only rows that are NOT cancelled
active = df[~(df['status'] == 'cancelled')]
print(active)
# order_id status
# 0 1 shipped
# 2 3 delivered
# 3 4 refundedMemfilter Nilai String
Pengindeksan boolean juga berfungsi dengan baik pada kolom teks. Anda dapat memfilter kecocokan persis dengan ==, atau menggunakan metode .str seperti .str.startswith(), .str.contains(), atau .str.upper() di dalam kondisi untuk pemfilteran teks yang fleksibel.
Perbandingan string di Pandas peka huruf besar-kecil secara bawaan, sehingga 'NYC' dan 'nyc' diperlakukan sebagai nilai yang berbeda. Normalisasi huruf besar-kecil terlebih dahulu jika diperlukan.
import pandas as pd
df = pd.DataFrame({
'country': ['USA', 'Germany', 'UK', 'USA', 'France'],
'sales': [400, 200, 150, 600, 300]
})
# Filter rows where country equals USA
us_sales = df[df['country'] == 'USA']
print(us_sales)
# country sales
# 0 USA 400
# 3 USA 600
# Filter rows where country starts with 'G'
g_countries = df[df['country'].str.startswith('G')]
print(g_countries)
# country sales
# 1 Germany 200Memfilter Beberapa Kolom
Analisis kompleks sering kali memerlukan kondisi pada beberapa kolom yang digabungkan dengan & dan |. Pecah kondisi yang sangat panjang menjadi Series boolean bernama agar lebih mudah dibaca — masing-masing berperan sebagai subfilter bernama yang Anda gabungkan di akhir.
Pendekatan ini memperjelas maksud Anda: setiap baris terbaca seperti kalimat yang menjelaskan satu bagian dari logika filter.
import pandas as pd
df = pd.DataFrame({
'region': ['North', 'South', 'North', 'East'],
'year': [2022, 2023, 2023, 2022],
'profit': [5000, -200, 8000, 3000]
})
is_north = df['region'] == 'North'
is_2023 = df['year'] == 2023
is_profitable = df['profit'] > 0
result = df[is_north & is_2023 & is_profitable]
print(result)
# region year profit
# 2 North 2023 8000Menggunakan np.where untuk Kolom Kondisional
Pengindeksan boolean memfilter baris, tetapi terkadang Anda ingin menambahkan kolom baru berdasarkan suatu kondisi, bukan menghapus baris. np.where(condition, value_if_true, value_if_false) merupakan padanan tervectorisasi dari if/else yang diterapkan secara elemen demi elemen pada sebuah kolom, dan jauh lebih cepat daripada menggunakan apply dengan lambda.
import pandas as pd
import numpy as np
df = pd.DataFrame({
'score': [45, 72, 88, 61, 95]
})
# Create a new column based on a condition
df['grade'] = np.where(df['score'] >= 70, 'Pass', 'Fail')
print(df)
# score grade
# 0 45 Fail
# 1 72 Pass
# 2 88 Pass
# 3 61 Fail
# 4 95 PassMenetapkan Nilai ke Subkumpulan yang Difilter
Anda dapat memperbarui nilai secara langsung untuk baris yang difilter menggunakan .loc[mask, column]. Ini adalah cara yang aman untuk menetapkan nilai pada subkumpulan — penggunaan pengindeksan berantai seperti df[mask]['col'] = value dapat memunculkan SettingWithCopyWarning karena bekerja pada salinan.
Selalu pilih df.loc[mask, 'col'] = value jika Anda ingin mengubah DataFrame asli secara langsung.
import pandas as pd
df = pd.DataFrame({
'item': ['A', 'B', 'C', 'D'],
'stock': [0, 5, 0, 12]
})
# Mark out-of-stock items
df.loc[df['stock'] == 0, 'status'] = 'Out of Stock'
df.loc[df['stock'] > 0, 'status'] = 'Available'
print(df)
# item stock status
# 0 A 0 Out of Stock
# 1 B 5 Available
# 2 C 0 Out of Stock
# 3 D 12 AvailableMenghitung dan Menjumlahkan Masker
Karena nilai boolean secara internal adalah 1 (True) dan 0 (False), Anda dapat memanggil .sum() pada masker untuk menghitung baris yang cocok, atau .mean() untuk mendapatkan proporsi baris yang cocok. Penghitungan cepat ini membantu Anda memverifikasi logika filter sebelum menerapkannya untuk memilih baris.
import pandas as pd
df = pd.DataFrame({'value': [10, 55, 30, 80, 20, 70]})
mask = df['value'] > 40
print('Count of rows > 40:', mask.sum()) # 3
print('Fraction > 40:', mask.mean().round(2)) # 0.5
# Now apply
print(df[mask])
# value
# 1 55
# 3 80
# 5 70Pemeriksaan Cepat
Uji pemahaman Anda tentang pengindeksan boolean pada DataFrames.
Ringkasan Pelajaran
Dalam pelajaran ini Anda mempelajari bahwa: masker boolean memfilter baris dengan menerapkan kondisi pada sebuah kolom, operator & dan | menggabungkan beberapa kondisi (bukan and/or Python), dan ~ membalikkan masker boolean untuk logika NOT. Gunakan df.loc[mask, col] = value untuk menetapkan nilai dengan aman pada baris yang difilter. Selanjutnya, kita akan mempelajari metode query() untuk menulis filter sebagai string yang mudah dibaca.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pengindeksan Boolean pada DataFrames” gratis?
Ya — teks lengkap “Pengindeksan Boolean pada DataFrames” 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 “Pengindeksan Boolean pada DataFrames”?
Saring baris dengan menerapkan kondisi boolean pada kolom dan menggabungkan beberapa kondisi menggunakan operator & dan | 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 1 dari 4.
Berapa lama pelajaran “Pengindeksan Boolean pada DataFrames” 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
- Pengindeksan Boolean pada DataFrames
- Metode query()
- Penyaring isin() dan between()
- Memilih Kolom Berdasarkan Pola