Untuk memfilter kerangka data (df) dengan satu kolom, jika kita mempertimbangkan data dengan laki-laki dan perempuan kita mungkin:
males = df[df[Gender]=='Male']
Pertanyaan 1 - Tetapi bagaimana jika data dalam rentang beberapa tahun dan saya hanya ingin melihat laki-laki untuk tahun 2014?
Dalam bahasa lain saya mungkin melakukan sesuatu seperti:
if A = "Male" and if B = "2014" then
(kecuali saya ingin melakukan ini dan mendapatkan subset dari dataframe asli di objek dataframe baru)
Pertanyaan 2. Bagaimana saya melakukan ini dalam satu lingkaran, dan membuat objek kerangka data untuk setiap set unik tahun dan jenis kelamin (yaitu df untuk: 2013-Pria, 2013-Wanita, 2014-Pria, dan 2014-Wanita
for y in year:
for g in gender:
df = .....
groupby
.Jawaban:
Menggunakan
&
operator, jangan lupa untuk membungkus sub-pernyataan dengan()
:Untuk menyimpan dataframe Anda
dict
menggunakan for loop:EDIT:
Demo untuk Anda
getDF
:sumber
key
di kamugetDF
? parameter tunggal atau tuple kunci?Gender
danYear
harus berupa string, yaitu,'Gender'
dan'Year'
.Untuk fungsi boolean yang lebih umum yang ingin Anda gunakan sebagai filter dan bergantung pada lebih dari satu kolom, Anda dapat menggunakan:
di mana f adalah fungsi yang diterapkan ke setiap pasangan elemen (x1, x2) dari col_1 dan col_2 dan mengembalikan True atau False tergantung pada kondisi apa pun yang Anda inginkan (x1, x2).
sumber
Mulai dari panda 0.13 , ini cara yang paling efisien.
sumber
Jika seseorang bertanya-tanya apa cara yang lebih cepat untuk memfilter (jawaban yang diterima atau yang dari @redreamality):
Hasil untuk 100.000 baris:
Hasil untuk 10.000.000 baris:
Jadi hasilnya tergantung pada ukuran dan datanya. Di laptop saya,
query()
semakin cepat setelah 500 ribu baris. Selanjutnya, pencarian stringYear=="2014"
memiliki overhead yang tidak perlu (Year==2014
lebih cepat).sumber
query
sintaksnya lebih rapi dan dekat dengan SQL, yang membuatnya bagus untuk data sejak itu. Ceri pada kue adalah lebih cepat dengan banyak baris :)Anda dapat membuat fungsi filter Anda sendiri menggunakan
query
dalampandas
. Di sini Anda memiliki pemfilterandf
hasil berdasarkan semuakwargs
parameter. Jangan lupa menambahkan beberapa validator (kwargs
pemfilteran) untuk mendapatkan fungsi filter Anda sendiridf
.sumber
Anda dapat memfilter dengan beberapa kolom (lebih dari dua) dengan menggunakan
np.logical_and
operator untuk mengganti&
(ataunp.logical_or
mengganti|
)Berikut adalah contoh fungsi yang melakukan pekerjaan itu, jika Anda memberikan nilai target untuk beberapa bidang. Anda dapat menyesuaikannya untuk berbagai jenis pemfilteran dan yang lainnya:
Pemakaian:
sumber