Pandas & NumPy Academy · Les

Sorteren op kolomwaarden

Sorteer een DataFrame op een of meer kolommen met sort_values(), bepaal de oplopende of aflopende volgorde en verwerk de plaatsing van NaN.

Les 1 van 413 stappen

Sorteren op kolomwaarden is een gratis Pandas & NumPy Academy-les op CoddyKit. Dit is les 1 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Pandas & NumPy Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Pandas & NumPy Academy bevat in totaal 4 lessen.

Waarom sorteren belangrijk is

Een DataFrame sorteren is belangrijk voor presentatie (top-N-rapporten en ranglijsten), juistheid (bewerkingen met tijdreeksen vereisen een chronologische volgorde) en prestaties (binair zoeken in een gesorteerde index is O(log n) tegenover O(n)). De Pandas-methode sort_values() is het belangrijkste hulpmiddel om op kolominhoud te sorteren en retourneert een nieuw DataFrame zonder het oorspronkelijke te wijzigen.

import pandas as pd

df = pd.DataFrame({
    'name': ['Dave', 'Alice', 'Carol', 'Bob'],
    'score': [75, 92, 88, 65]
})

# Sort by score descending (highest first)
ranked = df.sort_values('score', ascending=False)
print(ranked)
#     name  score
# 1  Alice     92
# 2  Carol     88
# 0   Dave     75
# 3    Bob     65

sort_values() — Basisgebruik

DataFrame.sort_values(by) sorteert rijen op basis van de waarden in de opgegeven kolom. Het argument by accepteert één kolomnaam (een tekenreeks) of een lijst met kolomnamen voor sorteren op meerdere sleutels. Standaard wordt oplopend gesorteerd (kleinste eerst). Geef ascending=False door voor een aflopende volgorde.

import pandas as pd

df = pd.DataFrame({
    'product': ['B', 'A', 'C', 'A', 'B'],
    'price': [20, 10, 30, 15, 25]
})

# Ascending by price (default)
print(df.sort_values('price'))
#   product  price
# 1       A     10
# 3       A     15
# 0       B     20
# 4       B     25
# 2       C     30

Sorteren op meerdere kolommen

Als je een lijst met kolomnamen doorgeeft aan sort_values(by=), wordt eerst op de eerste kolom gesorteerd. Gelijke waarden worden vervolgens met de tweede kolom verder gesorteerd, enzovoort. De parameter ascending kan ook een lijst met booleaanse waarden zijn die overeenkomt met de volgorde van de kolommen, zodat je voor elke sleutel een andere sorteerrichting kunt gebruiken.

import pandas as pd

df = pd.DataFrame({
    'dept': ['HR', 'Eng', 'HR', 'Eng', 'Sales'],
    'salary': [50000, 90000, 60000, 80000, 70000],
    'name': ['Alice', 'Bob', 'Carol', 'Dave', 'Eve']
})

# Sort by dept A-Z, then by salary descending within each dept
sorted_df = df.sort_values(
    by=['dept', 'salary'],
    ascending=[True, False]
)
print(sorted_df)
#     dept  salary   name
# 1    Eng   90000    Bob
# 3    Eng   80000   Dave
# 2     HR   60000  Carol
# 0     HR   50000  Alice
# 4  Sales   70000    Eve

NaN-positie met na_position

Standaard worden NaN-waarden aan het einde van het resultaat geplaatst, ongeacht of er oplopend of aflopend wordt gesorteerd. Gebruik de parameter na_position om dit te bepalen: 'last' (standaard) of 'first'. Waar NaN wordt geplaatst, is belangrijk in gerangschikte tabellen — ontbrekende waarden kunnen 'onbekend' betekenen en moeten duidelijk worden gescheiden van geldige gerangschikte gegevens.

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Carol', 'Dave'],
    'score': [92, np.nan, 88, np.nan]
})

# NaN last (default)
print(df.sort_values('score', ascending=False, na_position='last'))
#     name  score
# 0  Alice   92.0
# 2  Carol   88.0
# 1    Bob    NaN
# 3   Dave    NaN

# NaN first
print(df.sort_values('score', na_position='first').head(2))

Stabiel sorteren en de parameter kind=

Pandas gebruikt standaard een stabiele sorteermethode (mergesort, met een complexiteit van O(n log n)) — wanneer twee rijen gelijke waarden in de sorteersleutel hebben, blijft hun oorspronkelijke onderlinge volgorde behouden. Deze stabiliteit is belangrijk wanneer je eerst op een primaire sleutel en daarna op een secundaire sleutel sorteert: de primaire sorteervolgorde blijft behouden bij gelijke waarden van de secundaire sortering. Je kunt het algoritme wijzigen met kind='quicksort' (sneller maar niet stabiel) of kind='heapsort'.

import pandas as pd

df = pd.DataFrame({
    'group': ['A', 'B', 'A', 'B'],
    'value': [10, 10, 20, 20],
    'original_row': [0, 1, 2, 3]
})

# Stable sort: equal values keep original relative order
result = df.sort_values('value', kind='mergesort')
print(result)
#    group  value  original_row
# 0      A     10             0
# 1      B     10             1   <- row 0 before row 1 (stable)
# 2      A     20             2
# 3      B     20             3

inplace=True tegenover opnieuw toewijzen

Net als de meeste Pandas-methoden retourneert sort_values() standaard een nieuw DataFrame. Als je inplace=True doorgeeft, wordt het DataFrame ter plaatse gewijzigd en wordt None geretourneerd. Het gebruik van inplace wordt over het algemeen afgeraden in moderne Pandas, omdat het code moeilijker te verwerken en te debuggen maakt — het is eenvoudiger om altijd opnieuw toe te wijzen: df = df.sort_values('col').

import pandas as pd

df = pd.DataFrame({'x': [3, 1, 4, 1, 5]})

# Preferred: reassign
df = df.sort_values('x')
print(df['x'].tolist())  # [1, 1, 3, 4, 5]

# Alternative: inplace (not recommended for pipelines)
df2 = pd.DataFrame({'x': [3, 1, 4]})
df2.sort_values('x', inplace=True)
print(df2['x'].tolist())  # [1, 3, 4]

De index resetten na het sorteren

Na het sorteren weerspiegelt de rij-index de oorspronkelijke posities. In een aflopend gesorteerde tabel kan rij 0 nu bijvoorbeeld index 4 hebben. Roep .reset_index(drop=True) aan om opeenvolgende indices vanaf 0 toe te wijzen. Dit is belangrijk voordat je .iloc[0] gebruikt om op betrouwbare wijze de hoogst gerangschikte rij op te halen, of voordat je exporteert naar een bestand waarin gaten in de index verwarrend kunnen lijken.

import pandas as pd

df = pd.DataFrame({'score': [70, 90, 80]})
sorted_df = df.sort_values('score', ascending=False)
print(sorted_df)
#    score
# 1     90
# 2     80
# 0     70

# Clean sequential index
reset_df = sorted_df.reset_index(drop=True)
print(reset_df)
#    score
# 0     90
# 1     80
# 2     70

Top-N ophalen met nlargest() en nsmallest()

Voor het selecteren van de bovenste of onderste N rijen op basis van een kolomwaarde zijn df.nlargest(n, 'col') en df.nsmallest(n, 'col') efficiënter dan het volledige DataFrame sorteren en er een deel uit nemen. Ze gebruiken een gedeeltelijke sortering (selectie met een heap) met een complexiteit van O(n log k) in plaats van O(n log n), wat belangrijk is voor grote DataFrames.

import pandas as pd

df = pd.DataFrame({
    'product': ['A', 'B', 'C', 'D', 'E'],
    'revenue': [5000, 12000, 8000, 3000, 15000]
})

# Top 3 by revenue
top3 = df.nlargest(3, 'revenue')
print(top3)
#   product  revenue
# 4       E    15000
# 1       B    12000
# 2       C     8000

# Bottom 2 by revenue
bottom2 = df.nsmallest(2, 'revenue')
print(bottom2)

Categorische kolommen sorteren volgens de categor volgorde

Wanneer je een kolom met een geordend Categorical-gegevenstype sorteert, houdt sort_values() rekening met de categorievolgorde in plaats van met de alfabetische volgorde. Dit is essentieel om prioriteitsniveaus, ernstgradaties of formaataanduidingen correct te ordenen — 'Small' hoort vóór 'Medium' en 'Large' te komen, niet in alfabetische volgorde, waarin 'Large' eerst komt.

import pandas as pd

df = pd.DataFrame({
    'size': pd.Categorical(
        ['Large', 'Small', 'Medium', 'Small', 'Large'],
        categories=['Small', 'Medium', 'Large'],
        ordered=True
    ),
    'count': [10, 5, 8, 3, 7]
})

print(df.sort_values('size'))
#      size  count
# 1   Small      5
# 3   Small      3
# 2  Medium      8
# 0   Large     10
# 4   Large      7

Sorteren combineren met andere bewerkingen

Omdat sort_values() een DataFrame retourneert, kan het op natuurlijke wijze worden opgenomen in method chains. Een gebruikelijk patroon is: rijen filteren → aggregeren → sorteren → de top-N weergeven. Door bewerkingen te koppelen blijft de transformatiepijplijn lineair en leesbaar.

import pandas as pd

df = pd.DataFrame({
    'dept': ['Eng', 'HR', 'Eng', 'Sales', 'HR', 'Eng'],
    'salary': [90000, 50000, 120000, 70000, 55000, 80000]
})

result = (
    df
    .groupby('dept')['salary'].mean()
    .reset_index()
    .sort_values('salary', ascending=False)
    .head(2)
)
print(result)
#    dept    salary
# 0   Eng  96666.67
# 2  Sales  70000.00

Praktisch: rapport met de 5 beste producten

Hier is een praktisch voorbeeld van begin tot eind waarin je een rapport met de 5 beste producten op basis van omzet maakt: gegevens laden, de totale omzet per product berekenen, aflopend sorteren, de top 5 nemen, de index resetten om een duidelijk rangnummer te produceren en een rangkolom toevoegen voor de weergave.

import pandas as pd

orders = pd.DataFrame({
    'product': ['A', 'B', 'A', 'C', 'B', 'D', 'E', 'A', 'C', 'E'],
    'revenue': [100, 200, 150, 80, 300, 60, 400, 120, 90, 350]
})

top5 = (
    orders
    .groupby('product')['revenue'].sum()
    .reset_index()
    .sort_values('revenue', ascending=False)
    .head(5)
    .reset_index(drop=True)
)
top5.index = top5.index + 1  # rank from 1
top5.index.name = 'rank'
print(top5)

Korte controle

Test je begrip van het sorteren van DataFrames op kolomwaarden.

Samenvatting van de les

In deze les heb je geleerd: sort_values(by=) sorteert op één of meer kolommen, ascending= kan een lijst zijn voor verschillende richtingen per sleutel, na_position='last' bepaalt waar NaN-waarden worden geplaatst en nlargest()/nsmallest() halen efficiënt de bovenste of onderste N rijen op zonder het volledige DataFrame te sorteren. Gebruik na het sorteren altijd reset_index() voor een nette opeenvolgende uitvoer. Hierna sorteren we op de DataFrame-index.

Gratis beginnen

Leer Python met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
30
Lessen
120

Veelgestelde vragen

Is de les “Sorteren op kolomwaarden” gratis?

Ja — de volledige tekst van “Sorteren op kolomwaarden” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Pandas & NumPy Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Pandas & NumPy Academy bevat in totaal 4 lessen.

Wat leer ik in “Sorteren op kolomwaarden”?

Sorteer een DataFrame op een of meer kolommen met sort_values(), bepaal de oplopende of aflopende volgorde en verwerk de plaatsing van NaN. Je oefent met Pandas & NumPy Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Pandas & NumPy Academy te beginnen?

Ervaring vooraf is niet nodig. Pandas & NumPy Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 4.

Hoe lang duurt de les “Sorteren op kolomwaarden”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Pandas & NumPy Academy?

Ja. Elke les over Pandas & NumPy Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Sorteren op kolomwaarden
  2. Sorteren op index
  3. Waarden rangschikken
  4. De index instellen en herstellen
← Terug naar Pandas & NumPy Academy