0Pricing
Pandas & NumPy Academy · Pelajaran

melt: Format Lebar ke Panjang

Konversikan DataFrame berformat lebar menjadi format panjang dengan pd.melt, dengan menentukan id_vars dan value_vars.

melt: Format Lebar ke Panjang 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.

Format Data Lebar vs Panjang

Data dapat disusun dalam dua bentuk mendasar. Format lebar memiliki satu baris untuk setiap subjek dan menyebarkan pengukuran ke beberapa kolom — misalnya, kolom terpisah untuk penjualan Januari, Februari, dan Maret. Format panjang memiliki satu baris untuk setiap pengamatan, dengan satu kolom untuk nama variabel dan kolom lainnya untuk nilainya. Sebagian besar fungsi analisis Pandas, pustaka pembelajaran mesin, dan alat visualisasi lebih menyukai format panjang, sehingga melt() menjadi alat transformasi yang penting.

Fungsi pd.melt()

pd.melt(df) (yang juga tersedia sebagai df.melt()) mengubah DataFrame lebar menjadi format panjang. Parameter utamanya adalah id_vars (kolom yang dipertahankan sebagai pengenal tanpa perubahan), value_vars (kolom yang diubah menjadi baris), var_name (nama untuk kolom variabel baru), dan value_name (nama untuk kolom nilai baru).

import pandas as pd

# Wide format: separate columns per month
df_wide = pd.DataFrame({
    'product': ['A', 'B'],
    'Jan':     [100, 150],
    'Feb':     [120, 130],
    'Mar':     [140, 160]
})

print(df_wide)
#   product  Jan  Feb  Mar
# 0       A  100  120  140
# 1       B  150  130  160

Pemanggilan Dasar melt()

Panggil melt() dengan id_vars berisi kolom yang ingin Anda pertahankan sebagai pengenal. Setiap kolom lainnya diubah: namanya menjadi nilai dalam kolom variabel baru, sedangkan nilai selnya berpindah ke kolom nilai. Jumlah baris keluaran sama dengan jumlah baris masukan dikalikan jumlah kolom nilai yang diubah.

df_long = df_wide.melt(
    id_vars='product',
    var_name='month',
    value_name='sales'
)
print(df_long)
#   product month  sales
# 0       A   Jan    100
# 1       B   Jan    150
# 2       A   Feb    120
# 3       B   Feb    130
# 4       A   Mar    140
# 5       B   Mar    160

Memilih Kolom yang Akan Diubah

Secara bawaan, setiap kolom yang tidak tercantum dalam id_vars akan diubah. Gunakan value_vars untuk mengubah hanya sebagian kolom. Kolom yang tidak tercantum dalam id_vars maupun value_vars akan dihapus dari hasil. Ini berguna ketika DataFrame lebar Anda berisi campuran kolom deret waktu dan atribut lain yang tidak ingin Anda ubah.

df_wide2 = pd.DataFrame({
    'product': ['A', 'B'],
    'category': ['Electronics', 'Clothing'],
    'Jan': [100, 150],
    'Feb': [120, 130],
    'Mar': [140, 160]
})

# Melt only Jan and Feb, keep product and category
df_long2 = df_wide2.melt(
    id_vars=['product', 'category'],
    value_vars=['Jan', 'Feb'],
    var_name='month',
    value_name='sales'
)
print(df_long2)

Mengatur Ulang Indeks Setelah melt()

melt() mempertahankan indeks baris asli dengan mengulanginya untuk setiap variabel. Hasilnya sering memiliki indeks yang tidak berurutan seperti [0, 1, 0, 1, 0, 1]. Sebaiknya panggil reset_index(drop=True) segera setelah melt() untuk mendapatkan indeks berurutan yang bersih, dari 0 hingga n-1, pada keluaran.

df_long = df_wide.melt(id_vars='product', var_name='month', value_name='sales')
print('Before reset:', df_long.index.tolist())
# [0, 1, 0, 1, 0, 1]

df_long = df_long.reset_index(drop=True)
print('After reset:', df_long.index.tolist())
# [0, 1, 2, 3, 4, 5]

melt() Adalah Kebalikan dari pivot()

melt() secara konseptual merupakan kebalikan dari pivot() / pivot_table(). Anda dapat mengubah data panjang menjadi lebar dengan pivot_table(), dan mengubah data lebar kembali menjadi panjang dengan melt(). Proses bolak-balik ini sering digunakan dalam alur kerja: menerima data dalam format lebar, mengubahnya menjadi panjang untuk visualisasi Seaborn atau fitur pembelajaran mesin, lalu, jika perlu, mengubahnya kembali untuk tabel laporan.

# long -> wide
table = df_long.pivot_table(values='sales', index='product',
                            columns='month', aggfunc='sum')
print(table)
# product  Feb  Jan  Mar
# A        120  100  140
# B        130  150  160

# wide -> long again
long_again = table.reset_index().melt(id_vars='product', var_name='month', value_name='sales')
print(long_again.head())

Menggunakan melt() untuk Visualisasi Seaborn

Plot kategorikal dan relasional Seaborn bekerja paling baik dengan data berformat panjang. Alur kerja yang umum: mulai dengan DataFrame berformat lebar yang memiliki satu kolom untuk setiap kelompok, gunakan melt untuk mengubahnya ke format panjang sehingga satu kolom mengidentifikasi kelompok dan kolom lainnya menyimpan nilai, lalu teruskan keduanya ke parameter hue dan x/y milik Seaborn. Ini adalah salah satu alasan paling umum untuk menggunakan melt().

import seaborn as sns
import matplotlib.pyplot as plt

# Long format is required for sns.lineplot with hue
df_long = df_wide.melt(id_vars='product', var_name='month', value_name='sales')

# sns.lineplot(data=df_long, x='month', y='sales', hue='product')
# plt.show()
print('Long data ready for Seaborn:')
print(df_long)

Memberi Nama pada Kolom Output

Secara default, melt() memberi nama kolom variabel baru dengan 'variable' dan kolom nilai dengan 'value'. Selalu ganti nama tersebut dengan nama yang bermakna menggunakan var_name dan value_name. Nama kolom yang deskriptif membuat kode berikutnya lebih mudah dibaca dan mencegah kebingungan ketika sebuah DataFrame memiliki puluhan kolom.

# Default: generic column names 'variable' and 'value'
default = df_wide.melt(id_vars='product')
print(default.columns.tolist())
# ['product', 'variable', 'value']

# Better: descriptive names
good = df_wide.melt(id_vars='product', var_name='month', value_name='revenue_usd')
print(good.columns.tolist())
# ['product', 'month', 'revenue_usd']

Mengubah Data Survei ke Format Panjang

Salah satu penggunaan klasik melt() adalah untuk respons survei, ketika setiap kolom merupakan pertanyaan dan setiap baris merupakan responden. Proses ini mengubah format lebar menjadi format panjang dengan kolom untuk ID responden, nama pertanyaan, dan nilai jawaban. Selanjutnya, Anda dapat dengan mudah menghitung distribusi jawaban untuk setiap pertanyaan menggunakan groupby().

survey = pd.DataFrame({
    'respondent': [1, 2, 3],
    'Q1_rating': [5, 3, 4],
    'Q2_rating': [4, 5, 3],
    'Q3_rating': [2, 4, 5]
})

long = survey.melt(id_vars='respondent', var_name='question', value_name='rating')
print(long)
print(long.groupby('question')['rating'].mean())

Mengurutkan Hasil yang Telah Diubah

Setelah diubah, baris-baris diurutkan berdasarkan urutan kolom asli (Jan, Feb, Mar untuk setiap baris). Sering kali Anda ingin mengurutkannya terlebih dahulu berdasarkan kolom pengenal, lalu berdasarkan kolom variabel. Gunakan sort_values() pada DataFrame hasil perubahan untuk mendapatkan urutan yang paling sesuai dengan analisis atau pemrosesan berikutnya.

df_long = df_wide.melt(id_vars='product', var_name='month', value_name='sales')

# Sort by product, then month
df_sorted = df_long.sort_values(['product', 'month']).reset_index(drop=True)
print(df_sorted)
#   product month  sales
# 0       A   Feb    120
# 1       A   Jan    100
# 2       A   Mar    140
# 3       B   Feb    130
# 4       B   Jan    150
# 5       B   Mar    160

melt() dalam Alur Data

Dalam alur data yang umum, melt() muncul tepat setelah memuat atau membersihkan data berformat lebar, sebelum langkah analisis atau pemodelan apa pun. Letakkan fungsi ini di awal alur Anda agar dapat segera memperoleh format panjang, kemudian semua operasi berikutnya (groupby, seaborn, sklearn) bekerja pada data berformat panjang yang bersih tanpa perlakuan khusus.

def load_and_reshape(filepath):
    raw = pd.read_csv(filepath)
    # Melt all month columns into long format
    month_cols = [c for c in raw.columns if c.startswith('month_')]
    long = raw.melt(
        id_vars=[c for c in raw.columns if c not in month_cols],
        value_vars=month_cols,
        var_name='month',
        value_name='value'
    )
    return long.reset_index(drop=True)

Pemeriksaan Cepat

Uji pemahaman Anda tentang transformasi data berformat lebar ke panjang menggunakan pd.melt dari pelajaran ini.

Rangkuman Pelajaran

Dalam pelajaran ini Anda mempelajari bahwa melt() mengubah format lebar menjadi format panjang dengan mengubah kolom menjadi baris; id_vars menentukan kolom yang tetap dan value_vars memilih kolom yang akan diubah; var_name dan value_name memberikan nama deskriptif pada kolom baru; serta format panjang lebih disukai untuk Seaborn, groupby, dan alur ML. Selanjutnya, kita akan mempelajari stack dan unstack untuk mengubah bentuk DataFrames MultiIndex.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “melt: Format Lebar ke Panjang” gratis?

Ya — teks lengkap “melt: Format Lebar ke Panjang” 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 “melt: Format Lebar ke Panjang”?

Konversikan DataFrame berformat lebar menjadi format panjang dengan pd.melt, dengan menentukan id_vars dan value_vars. 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 “melt: Format Lebar ke Panjang” 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. pivot_table: Tabulasi Silang
  2. melt: Format Lebar ke Panjang
  3. stack dan unstack dengan MultiIndex
  4. crosstab untuk Tabel Frekuensi
← Kembali ke Pandas & NumPy Academy