0Pricing
Pandas & NumPy Academy · Lekcja

Sortowanie według wartości kolumn

Sortuj DataFrame według jednej lub wielu kolumn za pomocą sort_values(), określaj kolejność rosnącą lub malejącą i kontroluj położenie wartości NaN.

Sortowanie według wartości kolumn to bezpłatna lekcja Pandas & NumPy Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Pandas & NumPy Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Pandas & NumPy Academy zawiera 4 lekcji w sumie.

Dlaczego sortowanie ma znaczenie

Sortowanie obiektu DataFrame jest ważne ze względu na prezentację (raporty top-N, rankingi), poprawność (operacje na szeregach czasowych wymagają porządku chronologicznego) oraz wydajność (wyszukiwanie binarne w posortowanym indeksie ma złożoność O(log n) zamiast O(n)). Metoda sort_values() biblioteki Pandas jest podstawowym narzędziem do sortowania według zawartości kolumn i zwraca nowy obiekt DataFrame bez modyfikowania oryginału.

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() — podstawowe użycie

DataFrame.sort_values(by) sortuje wiersze według wartości w określonej kolumnie. Argument by przyjmuje nazwę pojedynczej kolumny (ciąg znaków) lub listę nazw kolumn do sortowania według wielu kluczy. Domyślnie sortowanie odbywa się rosnąco (od najmniejszej wartości). Aby sortować malejąco, należy przekazać ascending=False.

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

Sortowanie według wielu kolumn

Przekazanie listy nazw kolumn do sort_values(by=) sortuje najpierw według pierwszej kolumny, następnie rozstrzyga remisy za pomocą drugiej kolumny itd. Parametr ascending również może być listą wartości logicznych odpowiadających kolejności kolumn, co pozwala określić różne kierunki sortowania dla poszczególnych kluczy.

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

Położenie NaN za pomocą na_position

Domyślnie wartości NaN są umieszczane na końcu wyniku, niezależnie od tego, czy sortowanie odbywa się rosnąco, czy malejąco. Parametr na_position pozwala tym sterować: 'last' (domyślnie) lub 'first'. Określenie położenia NaN ma znaczenie w tabelach rankingowych — brakujące wartości mogą oznaczać „nieznane” i powinny być wyraźnie oddzielone od prawidłowych wpisów w rankingu.

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))

Sortowanie stabilne i parametr kind=

Pandas domyślnie używa sortowania stabilnego (mergesort o złożoności O(n log n)) — gdy dwa wiersze mają takie same wartości klucza sortowania, zachowana zostaje ich pierwotna kolejność względna. Stabilność ma znaczenie przy sortowaniu najpierw według klucza głównego, a następnie pomocniczego: kolejność ustalona dla klucza głównego zostaje zachowana wśród remisów według klucza pomocniczego. Algorytm można zmienić za pomocą kind='quicksort' (szybszy, ale niestabilny) lub 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 a ponowne przypisanie

Podobnie jak większość metod Pandas, sort_values() domyślnie zwraca nowy obiekt DataFrame. Przekazanie inplace=True modyfikuje obiekt DataFrame w miejscu i zwraca None. Korzystanie z inplace jest ogólnie odradzane we współczesnym Pandas, ponieważ utrudnia tworzenie potoków operacji i debugowanie — łatwiej zawsze przypisać wynik ponownie: 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]

Resetowanie indeksu po sortowaniu

Po sortowaniu indeks wierszy odzwierciedla pierwotne pozycje. W tabeli posortowanej malejąco wiersz 0 może mieć teraz indeks 4. Wywołanie .reset_index(drop=True) ponownie przypisuje kolejne indeksy, zaczynając od 0. Jest to ważne przed użyciem .iloc[0] do niezawodnego pobrania wiersza zajmującego pierwsze miejsce lub przed eksportem do pliku, w którym luki w indeksie mogą wyglądać myląco.

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

Pobieranie top-N za pomocą nlargest() i nsmallest()

Do wybrania N pierwszych lub ostatnich wierszy według wartości kolumny funkcje df.nlargest(n, 'col') i df.nsmallest(n, 'col') są wydajniejsze niż sortowanie całego obiektu DataFrame i wycinanie fragmentu. Używają sortowania częściowego (wyboru kopcowego) o złożoności O(n log k) zamiast O(n log n), co ma znaczenie w przypadku dużych obiektów DataFrame.

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)

Sortowanie kolumn kategorycznych według kolejności kategorii

Podczas sortowania kolumny zawierającej uporządkowany typ Categorical metoda sort_values() respektuje kolejność kategorii zamiast kolejności alfabetycznej. Jest to niezbędne do prawidłowego porządkowania poziomów priorytetu, ocen ważności lub oznaczeń rozmiaru — „Small” powinno wystąpić przed „Medium”, a „Medium” przed „Large”, a nie w kolejności alfabetycznej, w której „Large” pojawia się jako pierwsze.

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

Łączenie sortowania z innymi operacjami

Ponieważ sort_values() zwraca obiekt DataFrame, naturalnie integruje się z łańcuchami metod. Typowy schemat wygląda tak: filtrowanie wierszy → agregowanie → sortowanie → wyświetlenie top-N. Łączenie metod utrzymuje potok transformacji w formie liniowej i czytelnej.

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

Praktyka: raport 5 najlepszych produktów

Oto praktyczny przykład kompleksowego utworzenia raportu 5 najlepszych produktów według przychodu: wczytanie danych, obliczenie całkowitego przychodu dla każdego produktu, sortowanie malejąco, wybranie 5 najlepszych pozycji, zresetowanie indeksu w celu uzyskania czytelnego numeru pozycji oraz dodanie kolumny z pozycją do wyświetlenia.

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)

Szybkie sprawdzenie

Sprawdź, czy rozumie Pan/Pani sortowanie obiektów DataFrame według wartości kolumn.

Podsumowanie lekcji

W tej lekcji nauczył się Pan / nauczyła się Pani: sort_values(by=) sortuje według jednej lub wielu kolumn, ascending= może być listą określającą różne kierunki dla poszczególnych kluczy, na_position='last' steruje położeniem NaN, a nlargest()/nsmallest() wydajnie wybierają N pierwszych lub ostatnich wierszy bez sortowania całego obiektu DataFrame. Po sortowaniu należy zawsze wywołać reset_index(), aby uzyskać czysty, kolejnym numerowany wynik. W następnej części posortujemy według indeksu obiektu DataFrame.

Często zadawane pytania

Czy lekcja „Sortowanie według wartości kolumn” jest bezpłatna?

Tak — pełny tekst „Sortowanie według wartości kolumn” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Pandas & NumPy Academy, przejdź na CoddyKit PRO. Kurs Pandas & NumPy Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Sortowanie według wartości kolumn”?

Sortuj DataFrame według jednej lub wielu kolumn za pomocą sort_values(), określaj kolejność rosnącą lub malejącą i kontroluj położenie wartości NaN. Ćwiczysz Pandas & NumPy Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Pandas & NumPy Academy?

Nie wymagamy żadnego doświadczenia. Pandas & NumPy Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „Sortowanie według wartości kolumn”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Pandas & NumPy Academy?

Tak. Każda lekcja Pandas & NumPy Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Sortowanie według wartości kolumn
  2. Sortowanie według indeksu
  3. Ranking wartości
  4. Ustawianie i resetowanie indeksu
← Powrót do Pandas & NumPy Academy