Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Saya Boleh Mengeluarkan Rekod N Teratas dengan Cekap daripada Setiap Kumpulan dalam Bingkai Data Pandas?

Bagaimanakah Saya Boleh Mengeluarkan Rekod N Teratas dengan Cekap daripada Setiap Kumpulan dalam Bingkai Data Pandas?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-28 06:19:13931semak imbas

How Can I Efficiently Extract the Top N Records from Each Group in a Pandas DataFrame?

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!

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
Artikel sebelumnya:Overfitting vs UnderfittingArtikel seterusnya:Overfitting vs Underfitting