Skip to content

Cum să pivotezi tabele cu pandas

DodaTech Updated 2025-01-15 2 min read

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 în pivot_table când există valori duplicate
  • Folosește reset_index() după pivotare pentru a transforma indexul în coloană

Common Mistakes

  1. pivot() în loc de pivot_table()pivot() nu suportă agregare și crapă la duplicate
  2. melt fără id_vars — toate coloanele devin variabile, inclusiv cele de identificare
  3. Confuzia între stack() și unstack()stack transformă coloane în rânduri, unstack invers
  4. Fără aggfunc în pivot_table — eroare "Index contains duplicate entries"
  5. Index neresetat după pivotare — coloanele rămân în index, nu în coloane

FAQ

### Care e diferența dintre melt și pivot_table?

melt() transformă din format lat în lung (unpivot). pivot_table() transformă din lung în lat.

### Când folosesc stack/unstack?

Când ai un MultiIndex pe coloane sau rânduri și vrei să muți un nivel între index și coloane.

### Ce face `aggfunc` în pivot_table?

Aplică o funcție de agregare când există mai multe valori pentru aceeași combinație index-coloană.

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