DataFrame.sort_values() și sort_index() în pandas

Ordonează rândurile după valorile uneia sau mai multor coloane (sort_values) sau după etichetele din index (sort_index).

Sintaxă
df.sort_values(by, *, axis=0, ascending=True, kind='quicksort', na_position='last', ignore_index=False, key=None)
df.sort_index(*, axis=0, level=None, ascending=True, kind='quicksort', na_position='last', sort_remaining=True, ignore_index=False, key=None)

Ce face DataFrame.sort_values() și sort_index()

sort_values("nota") ordonează rândurile crescător după coloana nota; cu ascending=False ordinea devine descrescătoare. Pentru mai multe coloane dai o listă: by=["oras", "nota"] sortează după oraș, iar în cadrul aceluiași oraș după notă. ascending poate fi tot o listă, câte o direcție pentru fiecare coloană.

Valorile lipsă ajung implicit la final (na_position="last"); cu "first" ajung la început. Rândurile își păstrează etichetele; ignore_index=True le renumerotează de la 0. Parametrul key primește o funcție aplicată coloanei înainte de comparare, de exemplu pentru a ignora majusculele.

sort_index() ordonează după etichetele din index (sau, cu axis=1, după numele coloanelor). Este util după o sortare sau o grupare, ca să revii la ordinea inițială.

Parametri

Parametru Descriere
by Numele coloanei sau o listă de nume după care se sortează (doar la sort_values).
ascending True (implicit, crescător), False sau o listă de valori booleene, câte una pentru fiecare coloană din by.
na_position "last" (implicit) sau "first": unde ajung valorile lipsă.
ignore_index Dacă este True, rezultatul primește indexul 0, 1, 2, …
key Funcție aplicată valorilor înainte de sortare (primește un Series, returnează un Series).
kind Algoritmul: "quicksort", "mergesort", "heapsort", "stable". Contează doar la sortarea după o singură coloană.

Ce returnează

Un DataFrame nou, cu rândurile în ordinea cerută.

Exemple

Exemplul 1: Sortare după una și după două coloane

A doua sortare pune orașele în ordine alfabetică, iar în fiecare oraș notele de la mare la mic.

import pandas as pd

df = pd.DataFrame({
    "nume": ["Ana", "Mihai", "Ioana", "Andrei", "Elena"],
    "oras": ["Iași", "Cluj", "Iași", "Cluj", "Brașov"],
    "nota": [8.5, 7.0, 9.5, 9.0, 6.0],
})

print(df.sort_values("nota", ascending=False))
print()
print(df.sort_values(by=["oras", "nota"], ascending=[True, False], ignore_index=True))

Rezultat

     nume    oras  nota
2   Ioana    Iași   9.5
3  Andrei    Cluj   9.0
0     Ana    Iași   8.5
1   Mihai    Cluj   7.0
4   Elena  Brașov   6.0

     nume    oras  nota
0   Elena  Brașov   6.0
1  Andrei    Cluj   9.0
2   Mihai    Cluj   7.0
3   Ioana    Iași   9.5
4     Ana    Iași   8.5

Exemplul 2: Valori lipsă, key și sort_index

Cu na_position="first" luna fără date ajunge prima. sort_index() readuce rândurile în ordinea etichetelor.

import pandas as pd

vanzari = pd.DataFrame({
    "luna": ["ian", "feb", "mar", "apr"],
    "lei": [1450.0, None, 980.0, 2100.0],
})

sortat = vanzari.sort_values("lei", na_position="first")
print(sortat)
print()
print(sortat.sort_index())
print()

orase = pd.DataFrame({"oras": ["cluj", "Iași", "brașov"]})
print(orase.sort_values("oras", key=lambda s: s.str.lower()))

Rezultat

  luna     lei
1  feb     NaN
2  mar   980.0
0  ian  1450.0
3  apr  2100.0

  luna     lei
0  ian  1450.0
1  feb     NaN
2  mar   980.0
3  apr  2100.0

     oras
2  brașov
0    cluj
1    Iași

Greșeli frecvente

  • Dai lui ascending o listă de altă lungime decât by: by=["oras", "nota"], ascending=[False] aruncă ValueError.
  • Te aștepți ca indexul să fie din nou 0, 1, 2, … după sortare. Etichetele rămân cu rândurile; folosește ignore_index=True sau reset_index(drop=True).
  • Literele cu diacritice nu se sortează ca în dicționarul românesc: textul se compară după codul caracterelor, deci „Ștefan” ajunge după „Zoe”, iar majusculele înaintea literelor mici. Pentru majuscule ajută key=lambda s: s.str.lower().
  • Folosești inplace=True: în pandas 3.1 este depreciat (apare un avertisment). Scrie df = df.sort_values(...).

Comenzi înrudite

  • head() / tail(): Afișează primele (head) sau ultimele (tail) n rânduri dintr-un DataFrame sau Series. Implicit 5.
  • value_counts(): Numără de câte ori apare fiecare valoare într-o coloană (sau fiecare combinație de valori pe rânduri), în ordine descrescătoare.
  • DataFrame.iloc: Selectează rânduri și coloane după poziție (0, 1, 2, …), ca la listele Python, cu interval care exclude capătul din dreapta.
  • 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.sort_values() și sort_index()

Ai o nelămurire despre utilizarea comenzii DataFrame.sort_values() și sort_index() 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.