pd.melt() / DataFrame.melt() în pandas

Transformă un tabel lat (o coloană pe lună) într-unul lung, cu un rând pentru fiecare combinație și o coloană de valori.

Sintaxă
df.melt(id_vars=None, value_vars=None, var_name=None, value_name='value', ignore_index=True)

Ce face pd.melt() / DataFrame.melt()

Multe tabele vin în format lat: câte o coloană pentru fiecare lună sau an. Pentru grupare, filtrare sau grafice e mai comod formatul lung: o coloană cu numele lunii și una cu valoarea. melt() face această transformare.

id_vars sunt coloanele care rămân cum sunt (de exemplu orașul); value_vars sunt coloanele „topite” în rânduri (dacă lipsește, se iau toate celelalte). var_name și value_name dau numele celor două coloane noi; implicit ele se numesc variable și value.

Operația inversă este pivot(). pd.melt(df, ...) și df.melt(...) fac același lucru.

Parametri

Parametru Descriere
id_vars Coloanele care identifică rândul și rămân neschimbate.
value_vars Coloanele transformate în rânduri. Implicit toate coloanele care nu sunt în id_vars.
var_name Numele coloanei noi care primește vechile nume de coloane. Implicit variable.
value_name Numele coloanei noi cu valorile. Implicit value.
ignore_index True (implicit): rezultatul primește un index nou 0, 1, 2…

Ce returnează

Un DataFrame nou, în format lung.

Exemple

Exemplul 1: Vânzări pe luni, din lat în lung

2 orașe × 3 luni = 6 rânduri.

import pandas as pd

lat = pd.DataFrame({"oras": ["Iași", "Cluj"],
                    "ian": [100, 150], "feb": [120, 130], "mar": [90, 170]})
lung = lat.melt(id_vars="oras", var_name="luna", value_name="lei")
print(lung)

Rezultat

   oras luna  lei
0  Iași  ian  100
1  Cluj  ian  150
2  Iași  feb  120
3  Cluj  feb  130
4  Iași  mar   90
5  Cluj  mar  170

Exemplul 2: Doar unele coloane, cu value_vars

import pandas as pd

note = pd.DataFrame({"elev": ["Ana", "Mihai"], "clasa": ["9A", "9B"],
                     "romana": [9, 7], "mate": [8, 10], "sport": [10, 10]})
print(pd.melt(note, id_vars=["elev", "clasa"], value_vars=["romana", "mate"],
              var_name="materie", value_name="nota"))

Rezultat

    elev clasa materie  nota
0    Ana    9A  romana     9
1  Mihai    9B  romana     7
2    Ana    9A    mate     8
3  Mihai    9B    mate    10

Exemplul 3: Formatul lung ușurează gruparea

import pandas as pd

lat = pd.DataFrame({"oras": ["Iași", "Cluj", "Brașov"],
                    "ian": [100, 150, 80], "feb": [120, 130, 95]})
lung = lat.melt(id_vars="oras", var_name="luna", value_name="lei")
print(lung.groupby("luna")["lei"].sum())

Rezultat

luna
feb    345
ian    330
Name: lei, dtype: int64

Greșeli frecvente

  • Uiți id_vars: și coloana cu orașul este topită în rânduri, iar legătura dintre oraș și valori se pierde.
  • Nu dai var_name/value_name și rămâi cu coloane numite variable și value, greu de citit mai târziu.
  • Topești coloane cu tipuri diferite (text și numere) în aceeași coloană value; tipul ei devine amestecat. Alege cu value_vars doar coloanele de același fel.

Comenzi înrudite

  • DataFrame.pivot(): Rearanjează un tabel lung într-unul lat: valorile unei coloane devin nume de coloane, fără calcule de agregare.
  • 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ă.
  • DataFrame.groupby(): Împarte tabelul în grupuri după una sau mai multe coloane, ca să calculezi totaluri, medii sau numărări pentru fiecare grup.
  • pd.DataFrame(): Creează un tabel cu rânduri și coloane, dintr-un dicționar de liste, dintr-o listă de dicționare sau dintr-o listă de liste.
Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: pd.melt() / DataFrame.melt()

Ai o nelămurire despre utilizarea comenzii pd.melt() / DataFrame.melt() 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.