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, :]
Salin selepas log masuk
- 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)
Salin selepas log masuk
- 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")
Salin selepas log masuk
- 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]
Salin selepas log masuk
- 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]
Salin selepas log masuk
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]
Salin selepas log masuk
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!