pivot_table: tabulacja krzyżowa
Twórz tabele przestawne w stylu Excela za pomocą pd.pivot_table, ustawiając indeks, kolumny, wartości i aggfunc.
pivot_table: tabulacja krzyżowa 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.
Czym jest tabela przestawna?
Tabela przestawna to zestawienie krzyżowe, które podsumowuje dane według dwóch wymiarów kategorialnych — jeden tworzy wiersze, a drugi kolumny — umieszczając w każdej komórce zagregowaną wartość. Jeśli kiedykolwiek tworzysz tabelę przestawną w Excelu, od razu rozpoznasz tę koncepcję. Pandas udostępnia pd.pivot_table() (a także odpowiadającą mu metodę obiektu DataFrame), aby tworzyć takie podsumowania w całości w Pythonie.
Podstawowe wywołanie pivot_table
Cztery najważniejsze parametry pd.pivot_table() to: values (kolumna poddawana agregacji), index (kolumna, która stanie się wierszami), columns (kolumna, która stanie się kolumnami) oraz aggfunc (funkcja agregująca, domyślnie 'mean'). Wynikiem jest obiekt DataFrame, w którym każda komórka zawiera zagregowaną wartość dla danej kombinacji wiersza i kolumny.
import pandas as pd
df = pd.DataFrame({
'region': ['East', 'West', 'East', 'West', 'East', 'West'],
'product': ['A', 'A', 'B', 'B', 'A', 'B'],
'revenue': [200, 340, 150, 290, 310, 410]
})
table = pd.pivot_table(df,
values='revenue',
index='region',
columns='product',
aggfunc='sum')
print(table)
# product A B
# region
# East 510 150
# West 340 700Wybór funkcji aggfunc
Parametr aggfunc przyjmuje dowolną nazwę tekstową funkcji agregującej NumPy/Pandas, funkcję wywoływalną lub listę funkcji wywoływalnych. Typowe wybory to: 'sum' dla sum, 'mean' dla średnich, 'count' dla liczności oraz 'min'/'max' dla wartości skrajnych. Gdy przekazujesz listę, każda agregacja otrzymuje własny poziom w indeksie wielopoziomowym kolumn.
# Using mean (default)
table_mean = pd.pivot_table(df, values='revenue',
index='region', columns='product',
aggfunc='mean')
print(table_mean.round(1))
# product A B
# region
# East 255.0 150.0
# West 340.0 350.0
# Using count
table_count = pd.pivot_table(df, values='revenue',
index='region', columns='product',
aggfunc='count')
print(table_count)Obsługa pustych komórek za pomocą fill_value
Gdy dla kombinacji etykiety wiersza i kolumny nie ma danych, komórka domyślnie zawiera NaN. Przekaż fill_value, aby zastąpić takie brakujące komórki znaczącą wartością domyślną, na przykład 0 w przypadku liczności lub przychodu. Dzięki temu tabela jest łatwiejsza do odczytania, a kolejne operacje arytmetyczne nie generują niejawnie wyników NaN.
df2 = pd.DataFrame({
'region': ['East', 'West', 'East'],
'product': ['A', 'A', 'B'],
'revenue': [200, 340, 150]
})
# West-B combination has no data -> NaN by default
table = pd.pivot_table(df2, values='revenue', index='region',
columns='product', aggfunc='sum', fill_value=0)
print(table)
# product A B
# region
# East 200 150
# West 340 0 <- filled with 0 instead of NaNDodawanie sum częściowych za pomocą margins
Przekaż margins=True, aby dodać do tabeli przestawnej sumy wierszy i kolumn. Pandas dołącza wiersz 'All' na dole oraz kolumnę 'All' po prawej stronie; zawierają one zagregowane wartości dla wszystkich kategorii. Etykietę sumy można zmienić za pomocą margins_name. Działa to podobnie do wiersza „Grand Total” w tabelach przestawnych Excela.
table = pd.pivot_table(df, values='revenue', index='region',
columns='product', aggfunc='sum',
fill_value=0, margins=True, margins_name='Total')
print(table)
# product A B Total
# region
# East 510 150 660
# West 340 700 1040
# Total 850 850 1700Wiele wartości w pivot_table
Parametr values może być listą nazw kolumn, co pozwala agregować wiele miar jednocześnie. Wynik ma wielopoziomowy indeks kolumn, którego zewnętrzny poziom stanowi kolumna wartości, a wewnętrzny — kategoria. Umożliwia to utworzenie kompleksowej tabeli podsumowującej w jednym wywołaniu zamiast budowania i scalania wielu oddzielnych tabel przestawnych.
df['units'] = [10, 15, 8, 12, 14, 18]
table = pd.pivot_table(df,
values=['revenue', 'units'],
index='region',
columns='product',
aggfunc='sum')
print(table)
# Columns: (revenue, A), (revenue, B), (units, A), (units, B)
print(table.columns.tolist())Hierarchiczny indeks i kolumny
Gdy przekażesz listę do index lub columns, tabela przestawna ma MultiIndex na odpowiedniej osi. Umożliwia to tworzenie bardziej szczegółowych podsumowań — na przykład podział przychodu według regionu i kwartału w wierszach oraz według produktu w kolumnach. Dostęp do niższych poziomów uzyskasz za pomocą .loc i krotek indeksów, tak jak zwykle.
df['quarter'] = ['Q1', 'Q1', 'Q2', 'Q2', 'Q1', 'Q2']
table = pd.pivot_table(df, values='revenue',
index=['region', 'quarter'],
columns='product',
aggfunc='sum', fill_value=0)
print(table)
# product A B
# region quarter
# East Q1 510 0
# Q2 0 150
# West Q1 340 0
# Q2 0 700Spłaszczanie wyniku
Po utworzeniu tabeli przestawnej indeks stanowi kolumnę grupowania, a wielopoziomowy indeks kolumn (w przypadku użycia wielu wartości) może być niewygodny. Typowy sposób uporządkowania wyniku polega na wywołaniu reset_index() w celu spłaszczenia indeksu wierszy, a następnie połączeniu poziomów indeksu kolumn w jeden poziom za pomocą znaku podkreślenia i list comprehension.
table = pd.pivot_table(df, values=['revenue', 'units'],
index='region', columns='product', aggfunc='sum')
# Flatten MultiIndex columns
table.columns = ['_'.join(str(c) for c in col) for col in table.columns]
table = table.reset_index()
print(table.columns.tolist())
# ['region', 'revenue_A', 'revenue_B', 'units_A', 'units_B']pivot_table a groupby().agg()
Zarówno pivot_table, jak i groupby().agg() tworzą statystyki podsumowujące. Różnica dotyczy kształtu wyniku: groupby().agg() zwraca obiekt DataFrame w układzie długim, z jednym wierszem na każdą kombinację grup, natomiast pivot_table zwraca tabelę w układzie szerokim, w której jeden wymiar staje się kolumnami. W przypadku pulpitów nawigacyjnych i raportów szeroki format tabel przestawnych jest często czytelniejszy, natomiast do dalszej analizy uczenia maszynowego lub analizy statystycznej preferowany jest format długi.
# Long format (groupby)
long = df.groupby(['region', 'product'])['revenue'].sum().reset_index()
print(long)
# region product revenue
# East A 510
# East B 150
# Wide format (pivot_table)
wide = pd.pivot_table(df, 'revenue', 'region', 'product', 'sum', fill_value=0)
print(wide)
# product A B
# region
# East 510 150Sortowanie i stylizowanie tabeli przestawnej
Tabela przestawna jest zwykłym obiektem DataFrame, więc można ją sortować, obliczać kolumny pochodne i formatować dokładnie tak jak każdy inny obiekt DataFrame biblioteki Pandas. Możesz na przykład posortować dane malejąco według kolumny konkretnego produktu, aby uszeregować regiony według wyników tego produktu, albo dodać kolumnę procentową, dzieląc każdą komórkę przez sumę wiersza.
table = pd.pivot_table(df, 'revenue', 'region', 'product', 'sum', fill_value=0)
# Sort by product A revenue descending
table_sorted = table.sort_values('A', ascending=False)
print(table_sorted)
# Add percentage of row total
table['A_pct'] = (table['A'] / table.sum(axis=1) * 100).round(1)
print(table)Praktyczne zastosowanie: tabela pulpitu sprzedażowego
Tabele przestawne są podstawowym narzędziem do tworzenia raportów zarządczych i pulpitów nawigacyjnych. Typowy proces obejmuje wczytanie surowych danych transakcyjnych, utworzenie tabeli przestawnej z miesiącami jako kolumnami i kategoriami produktów jako wierszami, dodanie sum oraz eksport do Excela. Cały proces — od surowych danych do tabeli gotowej do przedstawienia zarządowi — wymaga zaledwie kilku wywołań Pandas.
# Simulated monthly product revenue pivot
result = pd.pivot_table(
df,
values='revenue',
index='product',
columns='region',
aggfunc='sum',
fill_value=0,
margins=True,
margins_name='Grand Total'
)
print(result)
# Export to Excel
# result.to_excel('sales_pivot.xlsx')Szybkie sprawdzenie
Sprawdź swoją wiedzę na temat pd.pivot_table z tego rozdziału.
Podsumowanie lekcji
W tej lekcji nauczyłeś się, że: pd.pivot_table() tworzy podsumowania w formie zestawień krzyżowych, w których jeden wymiar stanowi wiersze, a drugi kolumny; fill_value obsługuje brakujące komórki, a margins=True dodaje sumy; można agregować wiele wartości jednocześnie; a tabele przestawne tworzą wynik w szerokim formacie, idealnym do raportów. Następnie zajmiemy się operacją odwrotną: melt(), która przekształca dane z szerokiego formatu z powrotem do długiego.
Często zadawane pytania
Czy lekcja „pivot_table: tabulacja krzyżowa” jest bezpłatna?
Tak — pełny tekst „pivot_table: tabulacja krzyżowa” 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 „pivot_table: tabulacja krzyżowa”?
Twórz tabele przestawne w stylu Excela za pomocą pd.pivot_table, ustawiając indeks, kolumny, wartości i aggfunc. Ć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 „pivot_table: tabulacja krzyżowa”?
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
- pivot_table: tabulacja krzyżowa
- melt: format szeroki na długi
- stack i unstack z MultiIndex
- crosstab do tabel częstości