0Pricing
Pandas & NumPy Academy · Lekcja

Ustawianie i resetowanie indeksu

Ustaw kolumnę jako indeks wierszy za pomocą set_index(), przywróć ją za pomocą reset_index() i poznaj przegląd MultiIndex.

Ustawianie i resetowanie indeksu to bezpłatna lekcja Pandas & NumPy Academy na CoddyKit. To lekcja 4 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.

Czym jest indeks DataFrame?

Każdy DataFrame w Pandas ma indeks wierszy — zbiór etykiet przypisanych do poszczególnych wierszy. Domyślnym indeksem jest RangeIndex (0, 1, 2, …), ale można zastąpić go dowolną kolumną pełniącą funkcję naturalnego identyfikatora: datą, identyfikatorem produktu, identyfikatorem użytkownika lub dowolnym unikalnym kluczem. Znaczący indeks poprawia czytelność, umożliwia wycinanie na podstawie etykiet i jest wymagany do resamplingu szeregów czasowych.

import pandas as pd

df = pd.DataFrame({
    'date': ['2024-01-01', '2024-01-02', '2024-01-03'],
    'sales': [100, 200, 150]
})
print('Default index:', df.index.tolist())  # [0, 1, 2]
print(df)

set_index() — przekształcanie kolumny w indeks

DataFrame.set_index('col') przekształca wskazaną kolumnę w indeks wierszy, usuwając ją ze zwykłych kolumn. Wartości tej kolumny stają się etykietami wierszy. Jest to standardowy sposób zwiększania czytelności DataFrame, gdy jedna z kolumn pełni funkcję naturalnego klucza. Zwracany jest nowy DataFrame; oryginalny pozostaje bez zmian, chyba że użyto inplace=True.

import pandas as pd

df = pd.DataFrame({
    'date': ['2024-01-01', '2024-01-02', '2024-01-03'],
    'sales': [100, 200, 150]
})

df = df.set_index('date')
print(df)
#             sales
# date
# 2024-01-01    100
# 2024-01-02    200
# 2024-01-03    150

print(df.index)  # Index(['2024-01-01', ...], dtype='object', name='date')

Wybieranie wierszy z niestandardowym indeksem

Gdy znacząca kolumna staje się indeksem, można użyć .loc[label], aby pobierać wiersze według etykiety za pomocą przejrzystej i czytelnej składni — bez konieczności stosowania masek boolowskich. W przypadku DatetimeIndex można nawet używać częściowych napisów reprezentujących daty, takich jak df.loc['2024-01'], aby wybrać wszystkie wiersze ze stycznia 2024 roku.

import pandas as pd

df = pd.DataFrame({
    'product': ['A', 'B', 'C'],
    'price': [10, 20, 30],
    'stock': [100, 50, 75]
})
df = df.set_index('product')

# Access row by label
print(df.loc['B'])
# price    20
# stock    50
# Name: B, dtype: int64

set_index() z wieloma kolumnami — MultiIndex

Przekazanie listy nazw kolumn do set_index() tworzy MultiIndex (indeks hierarchiczny). Do wynikowego DataFrame można odwoływać się za pomocą krotek w .loc[]. MultiIndex jest niezbędny w grupowanych szeregach czasowych (region + data), danych panelowych (obiekt + czas) oraz wszelkich analizach wymagających grupowania wierszy na dwóch poziomach.

import pandas as pd

df = pd.DataFrame({
    'region': ['East', 'East', 'West', 'West'],
    'year': [2023, 2024, 2023, 2024],
    'revenue': [100, 150, 200, 220]
})

df = df.set_index(['region', 'year'])
print(df)
#              revenue
# region year
# East   2023      100
#        2024      150
# West   2023      200
#        2024      220

print(df.loc[('East', 2024)])  # revenue = 150

Parametr drop= w set_index()

Domyślnie set_index('col') usuwa kolumnę ze zwykłych kolumn DataFrame, gdy staje się ona indeksem. Przekaż drop=False, aby zachować kolumnę, jednocześnie używając jej jako indeksu. Jest to czasem przydatne, gdy potrzebny jest dostęp na podstawie etykiet, ale kolumna musi pozostać dostępna do obliczeń w zwykłym obszarze kolumn.

import pandas as pd

df = pd.DataFrame({'id': [1, 2, 3], 'value': [10, 20, 30]})

# Keep 'id' as both index and column
df_with_both = df.set_index('id', drop=False)
print(df_with_both)
#     id  value
# id
# 1    1     10
# 2    2     20
# 3    3     30

reset_index() — przenoszenie indeksu z powrotem do kolumny

reset_index() jest odwrotnością set_index(): przenosi bieżący indeks wierszy z powrotem do zwykłej kolumny i zastępuje indeks domyślnym RangeIndex. Jest to często potrzebne po użyciu groupby().agg() lub po operacjach, które pozostawiły znaczący indeks, a trzeba go użyć jako kolumny w dalszym przetwarzaniu.

import pandas as pd

df = pd.DataFrame({'sales': [100, 200]}, index=['East', 'West'])
df.index.name = 'region'

reset = df.reset_index()
print(reset)
#   region  sales
# 0   East    100
# 1   West    200

print(reset.index.tolist())  # [0, 1] — default RangeIndex restored

reset_index(drop=True)

Przekazanie drop=True do reset_index() całkowicie usuwa bieżący indeks zamiast przenosić go do kolumny. Użyj tej opcji, gdy bieżący indeks nie zawiera istotnych informacji (np. po filtrowaniu wierszy indeks ma luki, takie jak 0, 3, 7) i potrzebujesz po prostu czystego indeksu sekwencyjnego zaczynającego się od 0.

import pandas as pd

df = pd.DataFrame({'x': [10, 20, 30, 40, 50]})
filtered = df[df['x'] > 15]
print('Filtered index:', filtered.index.tolist())  # [1, 2, 3, 4]

# Drop the old index — don't move it to a column
clean = filtered.reset_index(drop=True)
print('Clean index:', clean.index.tolist())  # [0, 1, 2, 3]

reset_index() po groupby

Po wywołaniu groupby().agg() klucze grupowania stają się indeksem. Wywołanie reset_index() przekształca je z powrotem w zwykłe kolumny, tworząc płaski wynik tabelaryczny, z którym łatwiej pracować, łączyć go lub eksportować. Jest to jedno z najczęstszych praktycznych zastosowań reset_index().

import pandas as pd

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

# After groupby, dept becomes the index
agg = df.groupby('dept')['salary'].mean()
print(type(agg), agg.index.tolist())
# dept is the index

# Reset makes dept a regular column again
result = agg.reset_index()
result.columns = ['dept', 'avg_salary']
print(result)

rename_axis() dla nazwy indeksu

Gdy indeks wierszy nie ma nazwy lub chcesz zmienić ją dla większej czytelności, użyj df.rename_axis('new_name') (dla indeksu wierszy) albo df.rename_axis('col_name', axis=1) (dla osi kolumn). Nadanie indeksowi znaczącej nazwy sprawia, że wynik jest bardziej zrozumiały sam w sobie, szczególnie podczas eksportu do CSV, gdzie nazwa indeksu staje się nagłówkiem kolumny.

import pandas as pd

df = pd.DataFrame({'sales': [100, 200, 300]}, index=['A', 'B', 'C'])
print(df.index.name)  # None

# Name the index
df = df.rename_axis('region')
print(df)
#         sales
# region
# A         100
# B         200
# C         300

Ponowne indeksowanie w celu uzupełnienia luk

DataFrame.reindex(new_index) przekształca DataFrame tak, aby odpowiadał nowemu indeksowi, wypełniając wartościami NaN pozycje występujące w nowym indeksie, ale nieobecne w oryginalnych danych. Służy to do wyrównywania DataFrame względem wspólnego, kompletnego indeksu — na przykład do zagwarantowania, że pojawi się każdy miesiąc roku, nawet jeśli dla niektórych miesięcy nie ma danych.

import pandas as pd

df = pd.DataFrame({
    'month': ['Jan', 'Mar', 'Jun'],
    'revenue': [100, 200, 300]
}).set_index('month')

all_months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun']
complete = df.reindex(all_months)
print(complete)
#       revenue
# Jan     100.0
# Feb       NaN   <- filled with NaN
# Mar     200.0
# Apr       NaN
# May       NaN
# Jun     300.0

reset_index i wybieranie poziomu w MultiIndex

W przypadku DataFrame z MultiIndex reset_index() domyślnie przenosi wszystkie poziomy z powrotem do kolumn. Przekaż level=, aby zresetować tylko określone poziomy. Jest to przydatne, gdy jeden poziom ma pozostać indeksem (np. data), a tylko drugi ma zostać przeniesiony do kolumny.

import pandas as pd

df = pd.DataFrame(
    {'revenue': [100, 150, 200, 220]},
    index=pd.MultiIndex.from_tuples(
        [('East', 2023), ('East', 2024), ('West', 2023), ('West', 2024)],
        names=['region', 'year']
    )
)

# Reset only the 'year' level, keep 'region' as index
df2 = df.reset_index(level='year')
print(df2)
#         year  revenue
# region
# East    2023      100
# East    2024      150
# West    2023      200
# West    2024      220

Szybki test

Sprawdź swoją wiedzę na temat ustawiania i resetowania indeksu.

Podsumowanie lekcji

W tej lekcji nauczyłeś się, że: set_index('col') przekształca kolumnę w indeks wierszy, umożliwiając dostęp na podstawie etykiet, przekazanie listy tworzy MultiIndex, a reset_index() przenosi indeks z powrotem do kolumny (użyj drop=True, aby go usunąć). Użyj reindex(), aby dopasować dane do kompletnego indeksu docelowego, wypełniając brakujące pozycje wartościami NaN. Techniki te stanowią podstawę kolejnych lekcji dotyczących GroupBy i scalania danych.

Często zadawane pytania

Czy lekcja „Ustawianie i resetowanie indeksu” jest bezpłatna?

Tak — pełny tekst „Ustawianie i resetowanie indeksu” 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 „Ustawianie i resetowanie indeksu”?

Ustaw kolumnę jako indeks wierszy za pomocą set_index(), przywróć ją za pomocą reset_index() i poznaj przegląd MultiIndex. Ć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 4 z 4.

Ile czasu zajmuje lekcja „Ustawianie i resetowanie indeksu”?

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