Bagaimana untuk Mendapatkan Rekod N Teratas dengan Cekap dalam Setiap Kumpulan Bingkai Data Pandas?

Linda Hamilton
Lepaskan: 2024-11-25 03:16:14
asal
544 orang telah melayarinya

How to Efficiently Get the Top N Records within Each Group of a Pandas DataFrame?

Dapatkan n Rekod Tertinggi dalam Setiap Kumpulan dalam DataFrame

Untuk mendapatkan n rekod teratas bagi setiap kumpulan dalam DataFrame, pertimbangkan untuk menggunakan Pandas' kaedah yang cekap. Katakan kita mempunyai DataFrame berikut dengan lajur 'id' dan 'value':

df = pd.DataFrame({'id': [1, 1, 1, 2, 2, 2, 2, 3, 4], 'value': [1, 2, 3, 1, 2, 3, 4, 1, 1]})
Salin selepas log masuk

Menggunakan fungsi groupby() dan head(), kita boleh mendapatkan semula 2 rekod teratas untuk setiap 'id':

df_top2 = df.groupby('id').head(2)
Salin selepas log masuk

Output:

       id  value
id             
1  0   1      1
   1   1      2 
2  3   2      1
   4   2      2
3  7   3      1
4  8   4      1
Salin selepas log masuk

Untuk meratakan MultiIndex dan menghapuskan pendua indeks baris, gunakan reset_index():

df_top2 = df.groupby('id').head(2).reset_index(drop=True)
Salin selepas log masuk

Keputusan:

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

Sebagai alternatif, jika rekod perlu dipesan sebelum memilih n teratas untuk setiap kumpulan, gunakan pengisihan dahulu:

df_sorted = df.sort_values('value', ascending=False)
df_top2 = df_sorted.groupby('id').head(2)
Salin selepas log masuk

Ini menyediakan pendekatan yang lebih cekap dan elegan untuk mendapatkan rekod teratas dalam setiap kumpulan dalam DataFrame.

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Rekod N Teratas dengan Cekap dalam Setiap Kumpulan 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