DataFrame.pivot() în pandas

Rearanjează un tabel lung într-unul lat: valorile unei coloane devin nume de coloane, fără calcule de agregare.

Sintaxă
df.pivot(*, columns, index=..., values=...)

Ce face DataFrame.pivot()

pivot() este inversul lui melt(): valorile din index devin rânduri, valorile din columns devin coloane, iar values umple celulele. Nu face nicio sumă sau medie, doar mută valorile.

De aceea fiecare pereche (rând, coloană) trebuie să apară o singură dată. Dacă există duplicate, apare ValueError: Index contains duplicate entries, cannot reshape. În acest caz folosește pivot_table(), care adună sau face media valorilor duplicate (parametrul aggfunc).

Din pandas 2.0, argumentele lui pivot() se dau doar cu nume: df.pivot(index="oras", columns="luna", values="lei"). Combinațiile care lipsesc devin valori lipsă.

Parametri

Parametru Descriere
index Coloana ale cărei valori devin etichetele rândurilor. Dacă lipsește, se folosește indexul existent.
columns Coloana ale cărei valori devin coloanele noi. Obligatoriu.
values Coloana (sau lista de coloane) care umple celulele. Dacă lipsește, se folosesc toate celelalte coloane.

Ce returnează

Un DataFrame nou, în format lat.

Exemple

Exemplul 1: Din lung în lat

import pandas as pd

lung = pd.DataFrame({"oras": ["Iași", "Iași", "Cluj", "Cluj"],
                     "luna": ["ian", "feb", "ian", "feb"],
                     "lei": [100, 120, 150, 130]})
print(lung.pivot(index="oras", columns="luna", values="lei"))

Rezultat

luna  feb  ian
oras          
Cluj  130  150
Iași  120  100

Exemplul 2: Duplicatele opresc pivot()

Iași apare de două ori în ianuarie, deci pivot() nu știe ce valoare să pună. pivot_table() le adună.

import pandas as pd

lung = pd.DataFrame({"oras": ["Iași", "Iași", "Iași", "Cluj"],
                     "luna": ["ian", "ian", "feb", "ian"],
                     "lei": [100, 40, 120, 150]})
try:
    lung.pivot(index="oras", columns="luna", values="lei")
except ValueError as eroare:
    print("Eroare:", eroare)
print(lung.pivot_table(index="oras", columns="luna", values="lei", aggfunc="sum"))

Rezultat

Eroare: Index contains duplicate entries, cannot reshape
luna    feb    ian
oras              
Cluj    NaN  150.0
Iași  120.0  140.0

Exemplul 3: Combinații lipsă

Mihai nu are notă la sport, așa că celula rămâne NaN.

import pandas as pd

note = pd.DataFrame({"elev": ["Ana", "Ana", "Mihai"],
                     "materie": ["mate", "sport", "mate"],
                     "nota": [9, 10, 8]})
print(note.pivot(index="elev", columns="materie", values="nota"))

Rezultat

materie  mate  sport
elev                
Ana       9.0   10.0
Mihai     8.0    NaN

Greșeli frecvente

  • Folosești pivot() pe date cu duplicate și primești ValueError: Index contains duplicate entries. Elimină duplicatele sau folosește pivot_table() cu aggfunc.
  • Dai argumentele după poziție: df.pivot("oras", "luna", "lei"). În pandas 2.0+ apare TypeError; scrie index=, columns=, values=.
  • Te aștepți ca pivot() să facă totaluri. Nu calculează nimic; pentru sume și medii este pivot_table().

Comenzi înrudite

  • pd.melt() / DataFrame.melt(): Transformă un tabel lat (o coloană pe lună) într-unul lung, cu un rând pentru fiecare combinație și o coloană de valori.
  • pd.pivot_table(): Creează un tabel pivot ca în Excel: rânduri după o coloană, coloane după alta și o valoare agregată (sumă, medie) în fiecare celulă.
  • pd.crosstab(): Numără de câte ori apare fiecare combinație de valori din două coloane și le pune într-un tabel cu rânduri și coloane.
  • DataFrame.groupby(): Împarte tabelul în grupuri după una sau mai multe coloane, ca să calculezi totaluri, medii sau numărări pentru fiecare grup.
Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: DataFrame.pivot()

Ai o nelămurire despre utilizarea comenzii DataFrame.pivot() sau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!

💬

Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!

Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.