Materi
Laporan spreadsheet sering berbentuk lebar: satu baris per cabang dan satu kolom per bulan. Bentuk itu enak dibaca, tetapi bulan tersimpan sebagai nama kolom, bukan sebagai isi, sehingga tidak bisa disaring atau dikelompokkan. Bentuk panjang menyimpan satu pengamatan per baris — cabang, bulan, nilai — dan cocok dengan semua cara olah di kelas ini. df.melt(id_vars=..., var_name=..., value_name=...) melipat kolom-kolom bulan menjadi baris; kolom yang disebut di id_vars tetap menjadi penanda.
nilai = pd.DataFrame({"siswa": ["Rani", "Yusuf"], "uts": [78, 85], "uas": [82, 74]})
panjang = nilai.melt(id_vars="siswa", var_name="ujian", value_name="skor")
print(panjang.shape) # (4, 3)
lebar = panjang.pivot(index="siswa", columns="ujian", values="skor")
print(list(lebar.columns)) # ['uas', 'uts']pivot mengerjakan kebalikannya: satu kolom menjadi label baris, satu kolom menjadi nama kolom, dan satu kolom menjadi isi sel. Label baris dan kolom hasilnya terurut menurut abjad, seperti uas sebelum uts pada contoh; urutan lain dipilih ulang dengan daftar kolom.
pd.concat([jan, feb], ignore_index=True) menumpuk tabel-tabel berkolom sama, misalnya ekspor kasir per bulan, menjadi satu tabel. Tanpa ignore_index, nomor baris tiap tabel ikut terbawa sehingga label 0 muncul dua kali dan df.loc[0] mengembalikan dua baris.