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: int64set_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 = 150Parametr 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 30reset_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 restoredreset_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 300Ponowne 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.0reset_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 220Szybki 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
- Sortowanie według wartości kolumn
- Sortowanie według indeksu
- Ranking wartości
- Ustawianie i resetowanie indeksu