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.
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 65sort_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 30Sorteren 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 EveNaN-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 3inplace=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 70Top-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 7Sorteren 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.00Praktisch: 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.
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
- Sorteren op kolomwaarden
- Sorteren op index
- Waarden rangschikken
- De index instellen en herstellen