Panda: Mengeluarkan Rekod Teratas Dengan Cekap Dalam Setiap Kumpulan
Mendapatkan rekod teratas dalam setiap kumpulan DataFrame ialah tugas biasa dalam manipulasi data . Artikel ini membentangkan pelbagai pendekatan untuk mencapai objektif ini, termasuk penyelesaian yang diilhamkan oleh fungsi tetingkap SQL.
Pernyataan Masalah:
Diberikan DataFrame dengan lajur pengelompokan dan lajur nilai, kami mahu mengeluarkan rekod n teratas untuk setiap kumpulan.
Pendekatan Naif dengan Pengumpulan dan Baris Penomboran:
Salah satu cara untuk mendekati masalah ini ialah dengan menggunakan operasi kumpulan, diikuti dengan pendekatan seperti fungsi tetingkap. Ini melibatkan penambahan nombor baris pada setiap rekod dalam setiap kumpulan dan kemudian menapis untuk baris teratas berdasarkan nombor baris tersebut.
Penyelesaian Praktikal:
Penyelesaian yang lebih cekap melibatkan penggunaan kaedah head() pada DataFrame terkumpul. Secara lalai, head() mengembalikan n rekod pertama dalam setiap kumpulan. Ini sejajar dengan objektif untuk mendapatkan rekod teratas.
df.groupby('id').head(2)
Mengalih keluar MultiIndex:
Untuk mengalih keluar MultiIndex yang diperkenalkan oleh operasi kumpulan, kami menggunakan reset_index(drop=True):
df.groupby('id').head(2).reset_index(drop=True)
Output:
id value 0 1 1 1 1 2 2 2 1 3 2 2 4 3 1 5 4 1
Pendekatan Elegan untuk Penomboran Baris:
Sementara Python tidak mempunyai fungsi row_number() SQL, kita boleh meniru fungsinya menggunakan gabungan groupby() dan cumcount(). Begini caranya:
df['row_num'] = df.groupby('id').cumcount() + 1
Pendekatan ini memberikan nombor baris unik dalam setiap kumpulan tanpa memperkenalkan lajur tambahan atau berbilang indeks.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengeluarkan Rekod N Teratas dengan Cekap daripada Setiap Kumpulan dalam Bingkai Data Pandas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!