Pandas crosstab: Tabel Silang di Python (2026)
Blog/Tips & Trik/Pandas crosstab: Tabel Silang di Python (2026)

Pandas crosstab: Tabel Silang di Python (2026)

BimaBima
·29 Agustus 2026·8 menit baca

Penulis

Bima

Bima

Founder & Data Professional

Bagikan

TL;DR

Pandas crosstab bikin tabel silang yang menghitung berapa kali dua kategori muncul bersamaan, dengan baris untuk satu kategori dan kolom untuk kategori lain. Sintaks dasarnya pd.crosstab(baris, kolom), dan bisa diubah jadi persen pakai argumen normalize. Tambahin values dan aggfunc kalau mau menghitung agregat, bukan sekadar frekuensi.

Pandas crosstab bikin tabel silang, yaitu tabel yang menghitung berapa kali dua kategori muncul bersamaan. Baris buat satu kategori, kolom buat kategori lain, dan tiap sel isinya jumlah data yang cocok. Cara cepat lihat hubungan antar dua kolom kategori.

Contoh gampang: kamu mau tau berapa banyak transaksi tiap kategori produk di tiap kota. Satu tabel crosstab langsung jawab itu.

Di sini aku bahas cara pakainya, dari hitung frekuensi sampai persentase. Contohnya data penjualan toko.

Apa itu crosstab di pandas?

crosstab adalah fungsi pandas yang meringkas dua kolom kategori jadi satu tabel frekuensi. Nilai unik dari kolom pertama jadi baris, nilai unik kolom kedua jadi kolom, dan tiap sel ngitung berapa baris yang punya kombinasi itu. Hasilnya mirip pivot table, tapi khusus buat hitung-hitungan cepat.

Fungsi ini pas buat pertanyaan kayak berapa pelanggan pria vs wanita di tiap kategori, atau berapa order per metode pembayaran per kota.

Gimana cara pakai pandas crosstab?

Sintaks dasarnya: pd.crosstab(baris, kolom). Argumen pertama kolom yang jadi baris, argumen kedua kolom yang jadi kolom. Pandas otomatis ngitung frekuensinya.

import pandas as pd

df = pd.read_csv('transaksi.csv')

# jumlah transaksi tiap kategori per kota
tabel = pd.crosstab(df['kota'], df['kategori'])
print(tabel)

Hasilnya matriks: tiap baris satu kota, tiap kolom satu kategori produk, dan angkanya jumlah transaksi. Sekali jalan, kamu langsung lihat sebaran datanya.

Kalau mau baris dan kolom punya total, tambahin margins=True. Pandas bakal nambahin baris dan kolom 'All' berisi subtotal.

tabel = pd.crosstab(df['kota'], df['kategori'], margins=True)

Gimana cara bikin crosstab dalam persen?

Tambahin argumen normalize buat ngubah angka jadi proporsi. normalize='index' bikin tiap baris berjumlah 1, normalize='columns' bikin tiap kolom berjumlah 1, dan normalize=True bikin total keseluruhan jadi 1.

# proporsi kategori di dalam tiap kota
pd.crosstab(df['kota'], df['kategori'], normalize='index')
normalizeYang dijadikan 100%Jawab pertanyaan
'index'Tiap barisKomposisi kategori per kota
'columns'Tiap kolomSebaran kota per kategori
TrueSeluruh tabelPorsi tiap sel dari total

Persentase sering lebih berguna dari angka mentah. Kota besar pasti punya transaksi lebih banyak, tapi proporsinya yang nunjukin pola beli.

Bisa gak crosstab menghitung selain frekuensi?

Bisa. Tambahin argumen values dan aggfunc biar crosstab ngitung agregat, bukan sekadar jumlah baris. Misalnya rata-rata nominal belanja tiap kombinasi.

# rata-rata omzet tiap kategori per kota
pd.crosstab(
    df['kota'], df['kategori'],
    values=df['omzet'], aggfunc='mean'
)

Di titik ini crosstab jalan mirip pivot_table. Bedanya crosstab lebih ringkas buat kasus hitung frekuensi, sementara pivot_table lebih fleksibel buat agregasi rumit.

Contoh kasus: kategori produk per kota toko_berkah

toko_berkah jualan online ke 5 kota dan punya 4 kategori produk. Mereka mau tau kota mana yang belanjanya condong ke kategori mana, biar stok dan promo lebih tepat sasaran.

tabel = pd.crosstab(
    df['kota'], df['kategori'],
    normalize='index'
).round(2)
print(tabel)

Dari dataset ngulikdata, hasilnya nunjukin satu pola menarik: di Surabaya, kategori sembako nyumbang 61% dari transaksi, jauh di atas rata-rata kota lain yang cuma 38%. Sementara di Jakarta, kategori peralatan rumah justru mendominasi dengan 44%. Insight ini bikin tim bisa geser alokasi stok tanpa nebak-nebak.

Tanpa crosstab, pola kayak gini kependam di ribuan baris transaksi. Satu tabel silang bikin perbedaan antar kota langsung kelihatan.

Kesalahan umum pakai crosstab

  • Ketuker urutan baris dan kolom. Argumen pertama jadi baris, kedua jadi kolom. Kalau kebalik, tabelnya jadi transposisi yang bikin bingung.
  • Lupa normalize pas mau persen. Tanpa itu, kamu dapat angka mentah. Bandingin kota besar dan kecil jadi gak adil.
  • Salah pilih arah normalize. 'index' dan 'columns' jawab pertanyaan yang beda. Pikirin dulu mau 100% ke arah mana.
  • Ada nilai NaN di kolom kategori. Baris dengan kategori kosong bakal keluar dari hitungan. Bersihin atau isi dulu NaN-nya.

Kalau kategorimu banyak banget, tabelnya jadi lebar dan susah dibaca. Pertimbangin gabungin kategori kecil jadi 'lainnya' dulu sebelum bikin crosstab.

FAQ

Apa bedanya crosstab dan pivot_table di pandas?

crosstab dirancang khusus buat hitung frekuensi antar kategori dan sintaksnya lebih ringkas buat kasus itu. pivot_table lebih umum dan fleksibel, cocok buat agregasi rumit dengan banyak kolom nilai. Buat sekadar hitung berapa kali dua kategori muncul bareng, pakai crosstab. Buat ringkasan angka yang lebih kompleks, pivot_table lebih pas.

Gimana cara menampilkan crosstab dalam persen?

Tambahin argumen normalize. Pakai normalize='index' kalau mau tiap baris berjumlah 100%, normalize='columns' kalau mau tiap kolom 100%, atau normalize=True buat proporsi dari total keseluruhan. Kalikan hasilnya dengan 100 dan bulatkan pakai .round(1) biar lebih gampang dibaca. Persentase bikin perbandingan antar kelompok jadi adil.

Bisa gak crosstab pakai tiga kolom atau lebih?

Bisa. Kamu bisa kasih daftar kolom di argumen baris atau kolom, misalnya pd.crosstab([df['kota'], df['gender']], df['kategori']). Hasilnya tabel dengan index bertingkat. Tapi hati-hati, makin banyak kolom, tabelnya makin lebar dan susah dibaca. Buat kombinasi tiga dimensi atau lebih, kadang pivot_table lebih rapi.

Kenapa ada baris atau kolom yang hilang di crosstab?

Biasanya karena nilai di kolom itu NaN, jadi pandas gak masukin ke hitungan. Cek dulu pakai df.isna().sum() buat lihat kolom mana yang punya nilai kosong. Isi NaN pakai fillna dengan label kayak 'tidak diketahui', atau buang barisnya kalau memang gak relevan. Setelah bersih, semua kategori bakal muncul di tabel.

Gimana cara menghitung rata-rata, bukan frekuensi, di crosstab?

Isi argumen values dengan kolom angka dan aggfunc dengan fungsi agregat. Misalnya pd.crosstab(df['kota'], df['kategori'], values=df['omzet'], aggfunc='mean') ngitung rata-rata omzet tiap kombinasi. Kamu bisa ganti 'mean' jadi 'sum', 'max', atau fungsi lain sesuai kebutuhan. Di mode ini crosstab jalan mirip pivot_table.

Penutup

Rangkuman: crosstab bikin tabel silang buat hitung frekuensi antar dua kategori. Tambahin normalize buat persen, dan values plus aggfunc buat agregat selain jumlah.

Coba ambil dua kolom kategori di datamu, bikin crosstab-nya, dan lihat pola yang selama ini gak keliatan.

Mau lanjut olah data pandas? Baca cara bikin pivot di Python pakai pivot_table dan cara hitung frekuensi nilai pakai value_counts. Buat konsep dasarnya, cek glosarium tabel silang dan glosarium pivot table. Dokumentasi resmi ada di halaman pandas.crosstab.

Coba Langsung

Mau praktek langsung? Mulai latihan SQL gratis

Latihan interaktif, langsung di browser.

Buka NgulikSQL →
Bagikan:
Bima
Ditulis oleh

Bima

Founder & Data Professional

Founder Ngulik Data. Passionate about making data analysis accessible for everyone.

Artikel terkait

NumPy reshape: Ubah Bentuk Array (2026)
Tips & Trik
8 Oktober 2026•9 menit baca

NumPy reshape: Ubah Bentuk Array (2026)

Fungsi reshape di NumPy ngatur ulang bentuk array tanpa ngubah datanya. Ini cara pakainya, arti angka -1, dan cara ngeflat array.

BimaBima
NumPy Array: Dasar-Dasar untuk Analis Data (2026)
Tips & Trik
6 Oktober 2026•10 menit baca

NumPy Array: Dasar-Dasar untuk Analis Data (2026)

NumPy array bikin hitungan data di Python jauh lebih cepat dari list biasa. Ini dasar bikin, slicing, dan operasi array buat analis.

BimaBima
Alternatif iterrows yang Lebih Cepat di Pandas
Tips & Trik
3 Oktober 2026•8 menit baca

Alternatif iterrows yang Lebih Cepat di Pandas

iterrows nyaman ditulis tapi lambat. Ini urutan alternatif iterrows di pandas dari yang tercepat, plus benchmark biar kamu tau kapan pakai yang mana.

BimaBima
Kembali ke Blog
Ngulik Data logoNgulik Data

Platform edukasi data lengkap untuk professionals Indonesia. Belajar SQL, Data Analysis, dan lebih banyak lagi dengan praktek langsung dan feedback real-time.

© 2026 Ngulik Data. Semua hak dilindungi.

TAUTAN
BantuanHargaDatasetBlogAfiliasi
LEGAL
Syarat & KetentuanKebijakan Privasi
Ngulik Data
DatasetLeaderboardBlogStore