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
Lepaskan: 2024-11-28 06:19:13
asal
922 orang telah melayarinya

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)
Salin selepas log masuk

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)
Salin selepas log masuk

Output:

   id  value
0   1      1
1   1      2
2   2      1
3   2      2
4   3      1
5   4      1
Salin selepas log masuk

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
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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 terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan