Pilih Baris dalam Pandas MultiIndex DataFrame
Ringkasan Masalah
Memandangkan Pandas DataFrame dengan MultiIndex, bagaimana kita boleh memilih baris berdasarkan nilai tertentu/ label dalam setiap peringkat indeks?
Menghiris dengan loc
df.loc[key, :]
- kunci ialah sekumpulan label, satu untuk setiap tahap indeks.
- Ini menyediakan cara yang mudah dan ringkas untuk memilih baris berdasarkan nilai tertentu dalam tahap yang berbeza.
Menghiris dengan xs
df.xs(level_key, level=level_name, drop_level=True/False)
- level_key ialah kunci untuk tahap indeks tertentu.
- drop_level mengawal sama ada tahap itu harus digugurkan daripada DataFrame yang terhasil.
- xs ialah amat berguna apabila menghiris pada satu tahap.
Menapis dengan pertanyaan
df.query("condition")
- keadaan ialah ungkapan Boolean yang menentukan kriteria penapisan.
- Menyokong penapisan fleksibel merentas berbilang peringkat indeks.
Menggunakan nilai_tahap_get
mask = df.index.get_level_values(level_name).isin(values_list)
selected_rows = df[mask]
- Mencipta boolean topeng berdasarkan nilai dalam tahap indeks tertentu.
- Berguna untuk operasi penapisan yang lebih kompleks atau apabila menghiris pada berbilang nilai.
Contoh
Contoh 1: Memilih baris dengan nilai khusus dalam tahap 'satu' dan 'dua':
# Using loc
selected_rows = df.loc[['a'], ['t', 'u']]
# Using xs
selected_rows = df.xs('a', level='one', drop_level=False)
selected_rows = selected_rows.xs(['t', 'u'], level='two')
# Using query
selected_rows = df.query("one == 'a' and two.isin(['t', 'u'])")
# Using get_level_values
one_mask = df.index.get_level_values('one') == 'a'
two_mask = df.index.get_level_values('two').isin(['t', 'u'])
selected_rows = df[one_mask & two_mask]
Contoh 2: Menapis baris berdasarkan ketaksamaan berangka dalam tahap 'dua':
# Using query
selected_rows = df.query("two > 5")
# Using get_level_values
two_mask = df.index.get_level_values('two') > 5
selected_rows = df[two_mask]
Petua dan Pertimbangan
- Pertimbangkan kerumitannya operasi penghirisan/penapisan dan pilih kaedah yang sesuai dengan sewajarnya.
- Untuk penghirisan mudah pada satu atau beberapa tahap, loc atau xs lebih disukai.
- Untuk penapisan kompleks atau penghirisan pada berbilang nilai, pertimbangkan untuk menggunakan pertanyaan atau get_level_values kerana ia memberikan lebih fleksibiliti.
- Perhatikan penggunaan pd.IndexSlice untuk menentukan operasi penghirisan kompleks dengan loc.
- sort_index() boleh meningkatkan prestasi untuk DataFrames yang besar dengan MultiIndexes yang tidak diisih.
Atas ialah kandungan terperinci Bagaimana untuk Memilih Baris dengan Cekap dalam Pandas MultiIndex DataFrames?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!
Kenyataan:Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn