Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Menambah Lajur Kaunter Berjujukan dengan Cekap pada Bingkai Data Pandas Dikumpulkan Tanpa Menggunakan Fungsi Panggilan Balik?

Bagaimana untuk Menambah Lajur Kaunter Berjujukan dengan Cekap pada Bingkai Data Pandas Dikumpulkan Tanpa Menggunakan Fungsi Panggilan Balik?

Linda Hamilton
Linda Hamiltonasal
2025-01-01 02:12:16983semak imbas

How to Efficiently Add a Sequential Counter Column to Grouped Pandas DataFrames Without Using a Callback Function?

Menambah Lajur Kaunter Berjujukan pada Bingkai Data Berkumpulan Tanpa Panggilan Balik

Apabila cuba menambah lajur pembilang berjujukan kepada kumpulan dalam DataFrame, a fungsi panggil balik mungkin bukan pendekatan yang paling cekap. Pertimbangkan DataFrame berikut:

df = pd.DataFrame(
    columns="index c1 c2 v1".split(),
    data=[
            [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, ],]).set_index("index", drop=True)

Matlamatnya adalah untuk mencipta lajur "seq" baharu yang mengandungi nombor berjujukan untuk setiap kumpulan, menghasilkan output berikut:

   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

Mengelakkan Fungsi Panggilan Balik:

Daripada menggunakan fungsi panggil balik, kami boleh memanfaatkan kaedah cumcount() untuk mencapai hasil yang sama dengan lebih cekap. cumcount() mengira bilangan kejadian setiap nilai unik dalam kumpulan dan mengembalikan Siri panda dengan kiraan terkumpul.

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

Pendekatan ini secara langsung mengubah suai DataFrame dan mengelakkan overhed fungsi panggil balik.

Menyesuaikan Nombor Permulaan:

Jika anda mahu penjujukan untuk bermula pada 1 dan bukannya 0, anda boleh menambah 1 pada hasil:

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

Dengan menggunakan kaedah cumcount(), kami memudahkan proses menambah lajur pembilang berjujukan pada bingkai data terkumpul, menambah baik kebolehbacaan dan prestasi.

Atas ialah kandungan terperinci Bagaimana untuk Menambah Lajur Kaunter Berjujukan dengan Cekap pada Bingkai Data Pandas Dikumpulkan Tanpa Menggunakan Fungsi Panggilan Balik?. 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