0Pricing
Pandas & NumPy Academy · Pelajaran

GroupBy dengan Satu dan Beberapa Kunci

Kelompokkan berdasarkan satu atau beberapa kolom dengan groupby(), lalu terapkan agregasi sum, mean, count, serta min/max.

GroupBy dengan Satu dan Beberapa Kunci adalah pelajaran Pandas & NumPy Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Pandas & NumPy Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.

GroupBy dengan Satu Kunci

Pemanggilan GroupBy paling sederhana menggunakan satu kolom sebagai kunci pengelompokan. Anda memanggil df.groupby('column_name') lalu merangkaikannya dengan agregasi. Pandas membuat satu kelompok untuk setiap nilai unik dalam kolom tersebut dan menerapkan agregasi pada setiap kolom numerik (atau kolom yang dipilih). Inilah bentuk GroupBy yang paling umum dalam analisis sehari-hari.

import pandas as pd

df = pd.DataFrame({
    'dept': ['Eng', 'HR', 'Eng', 'HR', 'Eng'],
    'salary': [90000, 60000, 95000, 62000, 88000],
    'years': [3, 5, 7, 2, 4]
})

print(df.groupby('dept')['salary'].mean())
# dept
# Eng    91000.0
# HR     61000.0

Memilih Kolom yang Akan Diagregasi

Setelah memanggil groupby(), Anda dapat memilih satu kolom dengan notasi kurung siku untuk mendapatkan SeriesGroupBy, atau memilih beberapa kolom dengan sebuah daftar untuk mendapatkan DataFrameGroupBy. Jika Anda tidak melakukan pemilihan sama sekali, Pandas akan mengagregasi semua kolom numerik. Hal ini praktis, tetapi dapat menghasilkan hasil yang tidak terduga jika terdapat kolom numerik yang tidak relevan.

# Single column result -> SeriesGroupBy
print(df.groupby('dept')['salary'].sum())

# Multiple columns result -> DataFrameGroupBy
print(df.groupby('dept')[['salary', 'years']].mean())
#        salary  years
# dept
# Eng   91000.0    4.667
# HR    61000.0    3.500

Semua Agregasi Umum

Pandas mendukung serangkaian lengkap metode agregasi bawaan pada objek GroupBy: sum(), mean(), median(), min(), max(), count(), std(), var(), first(), dan last(). Masing-masing mengembalikan satu skalar per kelompok, sehingga menghasilkan tabel ringkasan yang rapi dan diindeks berdasarkan kunci pengelompokan.

g = df.groupby('dept')['salary']
print('sum:   ', g.sum())
print('mean:  ', g.mean())
print('min:   ', g.min())
print('max:   ', g.max())
print('count: ', g.count())
print('std:   ', g.std().round(2))

GroupBy dengan Beberapa Kunci

Teruskan daftar nama kolom ke groupby() untuk mengelompokkan berdasarkan lebih dari satu dimensi sekaligus. Setiap kombinasi nilai unik dalam kolom-kolom tersebut menjadi kelompok tersendiri. Hasilnya memiliki MultiIndex dengan satu tingkat untuk setiap kolom pengelompokan, sehingga Anda dapat menelusuri ringkasan lintas dimensi dalam satu langkah.

df2 = pd.DataFrame({
    'dept':   ['Eng', 'Eng', 'HR',  'HR',  'Eng', 'HR'],
    'level':  ['L1',  'L2',  'L1',  'L2',  'L1',  'L1'],
    'salary': [80000, 100000, 55000, 70000, 82000, 58000]
})

result = df2.groupby(['dept', 'level'])['salary'].mean()
print(result)
# dept  level
# Eng   L1       81000.0
#       L2      100000.0
# HR    L1       56500.0
#       L2       70000.0

Mengakses Hasil MultiIndex

Ketika Anda mengelompokkan berdasarkan beberapa kunci, indeks hasilnya adalah MultiIndex. Anda dapat mengakses tingkat luar tertentu dengan .loc['value'] dan menavigasi tingkat dalam menggunakan tuple. Memanggil reset_index() meratakan MultiIndex menjadi kolom biasa, yang sering kali lebih praktis untuk operasi lanjutan atau ekspor.

result = df2.groupby(['dept', 'level'])['salary'].mean()

# Access Engineering rows only
print(result.loc['Eng'])
# level
# L1     81000.0
# L2    100000.0

# Flatten to a regular DataFrame
print(result.reset_index())
#   dept level    salary
# 0  Eng    L1   81000.0
# 1  Eng    L2  100000.0

Menggunakan as_index=False

Secara bawaan, kolom pengelompokan menjadi indeks hasil. Meneruskan as_index=False akan mempertahankannya sebagai kolom biasa, sehingga menghasilkan DataFrame datar yang lebih mudah diteruskan ke operasi Pandas berikutnya atau diekspor. Hasil ini setara dengan memanggil reset_index() pada hasil tersebut.

flat = df2.groupby(['dept', 'level'], as_index=False)['salary'].mean()
print(flat)
#   dept level    salary
# 0  Eng    L1   81000.0
# 1  Eng    L2  100000.0
# 2   HR    L1   56500.0
# 3   HR    L2   70000.0

Menghitung Baris per Kelompok

count() mengembalikan jumlah nilai yang tidak bernilai null dalam setiap kelompok. Jika Anda menginginkan jumlah total baris per kelompok tanpa memperhatikan nilai null, gunakan size(). Perbedaan ini penting ketika data Anda memiliki nilai yang hilang, karena count() akan menghitung lebih sedikit baris pada kelompok yang memiliki entri NaN.

import numpy as np

df3 = pd.DataFrame({
    'dept': ['Eng', 'Eng', 'HR', 'HR'],
    'bonus': [5000, np.nan, 3000, 4000]
})

print(df3.groupby('dept')['bonus'].count())  # ignores NaN
# dept
# Eng    1
# HR     2

print(df3.groupby('dept')['bonus'].size())   # includes NaN rows
# dept
# Eng    2
# HR     2

Mengurutkan Hasil GroupBy

Secara bawaan, GroupBy mengurutkan hasil berdasarkan kunci kelompok. Anda dapat menonaktifkan pengurutan dengan sort=False untuk mempertahankan urutan kemunculan pertama, yang sedikit lebih cepat pada kumpulan data besar. Setelah mendapatkan hasil sebagai DataFrame, Anda dapat mengurutkannya lebih lanjut dengan sort_values() berdasarkan kolom apa pun.

result = (df.groupby('dept', sort=False)['salary']
            .mean()
            .reset_index()
            .sort_values('salary', ascending=False))
print(result)
#   dept    salary
# 0  Eng   91000.0
# 1   HR   61000.0

Merangkaikan GroupBy dengan Metode Lain

Hasil GroupBy berupa Series atau DataFrame biasa, sehingga Anda dapat langsung merangkaikan metode Pandas berikutnya. Pola yang umum adalah melakukan agregasi, lalu reset_index(), mengganti nama kolom, kemudian sort_values() — semuanya dalam satu rangkaian metode yang mudah dibaca tanpa menyimpan variabel perantara.

summary = (
    df
    .groupby('dept')['salary']
    .agg(['mean', 'count'])
    .rename(columns={'mean': 'avg_salary', 'count': 'headcount'})
    .reset_index()
    .sort_values('avg_salary', ascending=False)
)
print(summary)

Menerapkan sum, mean, dan count Bersamaan

Anda sering kali memerlukan lebih dari satu statistik per kelompok. Teruskan daftar nama fungsi ke .agg() untuk menghitung beberapa statistik sekaligus. Hasilnya berupa DataFrame dengan satu kolom untuk setiap fungsi. Cara ini lebih efisien daripada memanggil setiap agregasi secara terpisah karena Pandas memproses semuanya dalam satu lintasan data.

result = df.groupby('dept')['salary'].agg(['sum', 'mean', 'count', 'max'])
print(result)
#           sum      mean  count    max
# dept
# Eng    273000   91000.0      3  95000
# HR     122000   61000.0      2  62000

Mengelompokkan Berdasarkan Kolom Kategoris

Ketika kolom pengelompokan memiliki tipe data Categorical, Pandas secara bawaan menyertakan semua kategori dalam hasil, termasuk kategori yang tidak memiliki baris. Hal ini dapat berguna untuk memastikan tabel ringkasan selalu menampilkan setiap kategori, tetapi akan membuat baris dengan NaN atau 0 untuk kelompok kosong. Kendalikan perilaku ini dengan parameter observed (atur ke True untuk melewati kategori kosong).

df['dept'] = df['dept'].astype('category')
# With observed=True, only groups that appear in data are included
print(df.groupby('dept', observed=True)['salary'].mean())
# dept
# Eng    91000.0
# HR     61000.0

Pemeriksaan Singkat

Uji pemahaman Anda tentang GroupBy dengan satu dan beberapa kunci dari pelajaran ini.

Ringkasan Pelajaran

Dalam pelajaran ini Anda mempelajari: cara mengelompokkan berdasarkan satu kolom dan menerapkan agregasi umum, cara mengelompokkan berdasarkan beberapa kolom untuk menghasilkan ringkasan lintas dimensi, serta perbedaan antara count() dan size() ketika terdapat nilai null. Selanjutnya, kita akan membahas metode agg() yang andal untuk menghitung beberapa statistik berbeda dalam satu pemanggilan.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “GroupBy dengan Satu dan Beberapa Kunci” gratis?

Ya — teks lengkap “GroupBy dengan Satu dan Beberapa Kunci” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Pandas & NumPy Academy, upgrade ke CoddyKit PRO. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “GroupBy dengan Satu dan Beberapa Kunci”?

Kelompokkan berdasarkan satu atau beberapa kolom dengan groupby(), lalu terapkan agregasi sum, mean, count, serta min/max. Kamu berlatih Pandas & NumPy Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Pandas & NumPy Academy?

Tidak diperlukan pengalaman sebelumnya. Pandas & NumPy Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “GroupBy dengan Satu dan Beberapa Kunci” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Pandas & NumPy Academy ini?

Ya. Setiap pelajaran Pandas & NumPy Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Pola Pisahkan-Terapkan-Gabungkan
  2. GroupBy dengan Satu dan Beberapa Kunci
  3. Metode agg()
  4. Transformasi dan Filter GroupBy
← Kembali ke Pandas & NumPy Academy