Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimanakah saya boleh mengumpulkan dan mengira kejadian istilah dengan cekap dalam Pandas DataFrames mengikut ID dan kumpulan tanpa menggunakan gelung?

Bagaimanakah saya boleh mengumpulkan dan mengira kejadian istilah dengan cekap dalam Pandas DataFrames mengikut ID dan kumpulan tanpa menggunakan gelung?

DDD
Lepaskan: 2024-11-29 00:01:12
asal
523 orang telah melayarinya

How can I efficiently group and count occurrences of terms within Pandas DataFrames by ID and group without using loops?

Mengumpul dan Mengira Nilai dalam Pandas DataFrames

Dalam analisis data, selalunya perlu untuk mengumpulkan data dan mengira kejadian nilai atau istilah tertentu. Pengagregatan jenis ini boleh dicapai dengan mudah menggunakan fungsi kumpulan mengikut dan saiz dalam Panda.

Masalah:

Andaikan anda mempunyai DataFrame df dengan lajur berikut: id, kumpulan, dan istilah. Matlamatnya adalah untuk mengira bilangan kejadian setiap istilah unik bagi setiap gabungan id dan kumpulan, tanpa menggunakan gelung.

Penyelesaian:

Untuk mencapai matlamat ini, kami boleh menggunakan langkah berikut:

  1. Berkumpulan: Kumpulkan DataFrame mengikut tiga lajur menggunakan groupby(['id', 'group', 'term']). Ini membahagikan data kepada kumpulan berdasarkan gabungan unik lajur ini.
  2. Saiz: Gunakan fungsi saiz pada data terkumpul. saiz mengira bilangan baris dalam setiap kumpulan, yang secara berkesan mengira bilangan kejadian bagi setiap istilah unik dalam setiap pasangan kumpulan id.
  3. Nyahtindan: Hasil daripada operasi kumpulan mengikut ialah indeks hierarki. Untuk membuat jadual dengan baris yang mewakili pasangan kumpulan id dan lajur yang mewakili istilah unik, kita boleh menggunakan unstack(fill_value=0). Ini menyahtindan indeks hierarki dan mengisi sebarang nilai yang hilang dengan 0.

DataFrame yang terhasil akan menyerupai reka letak ini:

masukkan penerangan imej di sini

Contoh Kod:

df = pd.DataFrame([
    (1, 1, 'term1'),
    (1, 2, 'term2'),
    (1, 1, 'term1'),
    (1, 1, 'term2'),
    (2, 2, 'term3'),
    (2, 3, 'term1'),
    (2, 2, 'term1')
], columns=['id', 'group', 'term'])

result = df.groupby(['id', 'group', 'term']).size().unstack(fill_value=0)

print(result)
Salin selepas log masuk

Output:

   term1  term2  term3
id group             
1   1      2      1
2   2      2      1
   3      1      0
Salin selepas log masuk

Prestasi:

Untuk set data yang besar, operasi kumpulan mengikut saiz dan boleh jadi mahal dari segi pengiraan. Kod berikut menyediakan statistik masa untuk mengumpulkan dan mengira pada DataFrame dengan 1,000,000 baris:

df = pd.DataFrame(dict(id=np.random.choice(100, 1000000),
                       group=np.random.choice(20, 1000000),
                       term=np.random.choice(10, 1000000)))

%timeit df.groupby(['id', 'group', 'term']).size().unstack(fill_value=0)
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah saya boleh mengumpulkan dan mengira kejadian istilah dengan cekap dalam Pandas DataFrames mengikut ID dan kumpulan tanpa menggunakan gelung?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan