Cum să pivotezi tabele cu pandas
In this tutorial, you'll learn about Cum să pivotezi tabele cu pandas. We cover key concepts, practical examples, and best practices.
Pivotarea tabelelor în pandas cu pivot_table, melt și stack/unstack transformă datele între formate lung (tidy) și lat (crosstab), esențial pentru analiză și vizualizare.
The Problem
Datele vin adesea într-un format "lat" (o coloană per categorie) când ai nevoie de format "lung" (o coloană cu numele categoriei și una cu valoarea), sau invers. Fără pivotare, graficele seaborn și multe funcții statistice nu funcționează corect.
The Wrong Way
import pandas as pd
df = pd.DataFrame({
"oras": ["București", "Cluj"],
"ianuarie": [100, 80],
"februarie": [120, 90],
"martie": [110, 95]
})
# Încerci să faci un grafic, dar seaborn are nevoie de format lung
Problemă: Formatul lat (o coloană per lună) nu poate fi folosit direct cu sns.lineplot() sau cu groupby.
The Right Way
import pandas as pd
df = pd.DataFrame({
"oras": ["București", "Cluj"],
"ianuarie": [100, 80],
"februarie": [120, 90],
"martie": [110, 95]
})
# Transformă din lat în lung cu melt
df_lung = df.melt(id_vars=["oras"], var_name="luna", value_name="vanzari")
print("Format lung (melt):\n", df_lung)
# Transformă din lung în lat cu pivot_table
df_lat = df_lung.pivot_table(index="oras", columns="luna", values="vanzari")
print("\nFormat lat (pivot):\n", df_lat)
Output:
Format lung (melt):
oras luna vanzari
0 București ianuarie 100
1 Cluj ianuarie 80
2 București februarie 120
3 Cluj februarie 90
4 București martie 110
5 Cluj martie 95
Format lat (pivot):
luna februarie ianuarie martie
oras
București 120 100 110
Cluj 90 80 95
Step-by-Step Fix
1. Folosește melt() pentru lat → lung
df_lung = df.melt(id_vars=["id", "nume"], var_name="atribut", value_name="valoare")
2. Folosește pivot_table() pentru lung → lat
df_lat = df_lung.pivot_table(index="id", columns="atribut", values="valoare", aggfunc="first")
3. Folosește stack() și unstack() pentru MultiIndex
df_stacked = df.set_index(["oras", "luna"]).stack()
df_unstacked = df.unstack(level=0)
Prevention Tips
- Identifică dacă ai nevoie de format lung (tidy) sau lat înainte de a pivota
- Specifică
aggfuncînpivot_tablecând există valori duplicate - Folosește
reset_index()după pivotare pentru a transforma indexul în coloană
Common Mistakes
pivot()în loc depivot_table()—pivot()nu suportă agregare și crapă la duplicatemeltfărăid_vars— toate coloanele devin variabile, inclusiv cele de identificare- Confuzia între
stack()șiunstack()—stacktransformă coloane în rânduri,unstackinvers - Fără
aggfuncînpivot_table— eroare "Index contains duplicate entries" - Index neresetat după pivotare — coloanele rămân în index, nu în coloane
FAQ
Construit de dezvoltătorii Doda Browser, DodaZIP și Durga Antivirus Pro. Instrumentele DodaTech se integrează perfect cu pandas pentru productivitate și securitate sporite.
Built by the developers of DodaTech
Doda Browser, DodaZIP & Durga Antivirus Pro