Fundamental Series — Part 16 of 20
Dua operasi penting: reshape (wide ↔︎ long) dan merge (gabung tabel).
Wide → Long
Pandas — melt()
import pandas as pd
df_wide = pd.DataFrame({
"nama": ["Andi", "Budi"],
"math": [80, 90],
"sains": [75, 85],
"bahasa": [88, 92]
})
df_long = df_wide.melt(
id_vars="nama",
var_name="mata_pelajaran",
value_name="nilai"
)Polars — unpivot()
import polars as pl
df_wide_pl = pl.DataFrame({
"nama": ["Andi", "Budi"],
"math": [80, 90],
"sains": [75, 85],
"bahasa": [88, 92]
})
df_long_pl = df_wide_pl.unpivot(
index="nama",
variable_name="mata_pelajaran",
value_name="nilai"
)Long → Wide
Pandas — pivot()
df_long.pivot(
index="nama",
columns="mata_pelajaran",
values="nilai"
).reset_index()Polars — pivot()
df_long_pl.pivot(
on="mata_pelajaran",
index="nama",
values="nilai"
)Merge / Join
siswa = pd.DataFrame({"id": [1,2,3,4], "nama": ["Andi","Budi","Citra","Dina"]})
nilai = pd.DataFrame({"id": [1,2,3,5], "skor": [80,90,75,85]})Pandas
# Left join
siswa.merge(nilai, on="id", how="left")
# Inner join
siswa.merge(nilai, on="id", how="inner")
# Full / outer join
siswa.merge(nilai, on="id", how="outer")
# Kolom berbeda nama
siswa.merge(nilai, left_on="id", right_on="id")Polars
siswa_pl = pl.DataFrame({"id": [1,2,3,4], "nama": ["Andi","Budi","Citra","Dina"]})
nilai_pl = pl.DataFrame({"id": [1,2,3,5], "skor": [80,90,75,85]})
siswa_pl.join(nilai_pl, on="id", how="left")
siswa_pl.join(nilai_pl, on="id", how="inner")
siswa_pl.join(nilai_pl, on="id", how="full")
siswa_pl.join(nilai_pl, on="id", how="anti") # tidak matchConcat — Tumpuk Data
# Pandas
df1 = pd.DataFrame({"nama": ["A","B"], "x": [1,2]})
df2 = pd.DataFrame({"nama": ["C","D"], "x": [3,4]})
pd.concat([df1, df2], ignore_index=True)
# Polars
df1_pl = pl.DataFrame({"nama": ["A","B"], "x": [1,2]})
df2_pl = pl.DataFrame({"nama": ["C","D"], "x": [3,4]})
pl.concat([df1_pl, df2_pl])Latihan
BahayaLatihan 16.1 — Reshape
gdp = pd.DataFrame({
"negara": ["Indonesia", "Malaysia", "Thailand"],
"2020": [1060, 337, 500],
"2021": [1186, 373, 506],
"2022": [1319, 407, 536]
})
# 1. Melt ke long (kolom: negara, tahun, gdp)
# 2. Pivot kembali ke wide
# Kerjakan dengan pandas DAN polars
BahayaLatihan 16.2 — Join
produk = pd.DataFrame({"id": [1,2,3], "nama": ["A","B","C"]})
penjualan = pd.DataFrame({"id": [1,1,2,4], "jumlah": [10,20,15,5]})
# 1. Left join
# 2. Hanya produk tanpa penjualan (anti join)
# 3. Inner joinRingkasan
| Operasi | Pandas | Polars |
|---|---|---|
| Wide → Long | .melt() |
.unpivot() |
| Long → Wide | .pivot() |
.pivot() |
| Join | .merge() |
.join() |
| Concat | pd.concat() |
pl.concat() |
Sebelumnya: Part 15 — Group & Summarise Selanjutnya: Part 17 — Apply & Vectorisasi