Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana Cara Menambah Lajur Kaunter Berjujukan pada Data Dikumpulkan dalam Panda dengan Cekap?

Bagaimana Cara Menambah Lajur Kaunter Berjujukan pada Data Dikumpulkan dalam Panda dengan Cekap?

Linda Hamilton
Linda Hamiltonasal
2024-12-24 14:04:15892semak imbas

How to Efficiently Add a Sequential Counter Column to Grouped Data in Pandas?

Tambah Lajur Pembilang Berjujukan pada Kumpulan dalam Pandas DataFrame

Dalam konteks perbalahan data, terdapat tugas biasa untuk menambah pembilang berjujukan lajur kepada kumpulan dalam bingkai data panda. Satu pendekatan ialah menggunakan fungsi panggil balik seperti yang telah anda tunjukkan:

def callback(x):
    x['seq'] = range(1, x.shape[0] + 1)
    return x

Walaupun kaedah ini berfungsi, ia boleh menyusahkan dan melibatkan penentuan fungsi yang berasingan. Penyelesaian yang lebih ringkas dan elegan ialah menggunakan kaedah cumcount():

df.groupby(['c1', 'c2']).cumcount()

Kaedah ini mengira kiraan terkumpul untuk setiap kumpulan, dengan berkesan memberikan nombor turutan kepada setiap baris dalam kumpulan. Sebagai contoh, pertimbangkan bingkai data berikut:

index c1 c2 v1
0 A X 3
1 A X 5
2 A Y 7
3 A Y 1
4 B X 3
5 B X 1
6 B X 3
7 B Y 1
8 C X 7
9 C Y 4
10 C Y 1
11 C Y 6

Memohon cumcount() pada bingkai data ini, dikumpulkan mengikut c1 dan c2, akan menghasilkan:

index c1 c2 v1 seq
0 A X 3 1
1 A X 5 2
2 A Y 7 1
3 A Y 1 2
4 B X 3 1
5 B X 1 2
6 B X 3 3
7 B Y 1 1
8 C X 7 1
9 C Y 4 1
10 C Y 1 2
11 C Y 6 3

Untuk memulakan pesanan pada 1 sebaliknya daripada 0, cuma tambah 1 pada hasil cumcount():

df.groupby(['c1', 'c2']).cumcount() + 1

Atas ialah kandungan terperinci Bagaimana Cara Menambah Lajur Kaunter Berjujukan pada Data Dikumpulkan dalam Panda dengan Cekap?. 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