Na dnešní lekci si do virtuálního prostředí nainstalujte následující balíčky. Můžete použít prostředí z lekce o NumPy.
$ python -m pip install --upgrade pip
$ python -m pip install notebook pandas matplotlib
Pro případ, že by vaše verze pip-u neuměla wheels nebo na PyPI nebyly příslušné wheel balíčky, je dobré mít na systému nainstalovaný překladač C a Fortranu (např. gcc, gcc-gfortran) a hlavičkové soubory Pythonu (např. python3-devel). Jestli je ale nemáte, zkuste instalaci přímo – wheels pro většinu operačních systémů existují – a až kdyby to nefungovalo, instalujte překladače a hlavičky.
Mezitím co se instaluje, stáhněte si do adresáře static potřebné soubory:
actors.csv a
spouses.csv.
A až bude nainstalováno, spusťte si nový Notebook. (Viz lekce o Notebooku.)
Jedna z oblastí, kde popularita Pythonu neustále roste, je analýza dat. Co tenhle termín znamená?
Máme nějaká data; je jich moc a jsou nepřehledná. Datový analytik je zpracuje, přeskládá, najde v nich smysl, vytvoří shrnutí toho nejdůležitějšího nebo barevnou infografiku.
Ze statistických údajů o obyvatelstvu zjistíme, jak souvisí příjmy s dostupností škol. Zpracováním měření z fyzikálního experimentu ověříme, jestli platí hypotéza. Z log přístupů na webovou službu určíme, co uživatelé čtou a kde stránky opouštějí.
Na podobné úkoly je možné použít jazyky vyvinuté přímo pro analýzu dat, jako R, které takovým úkolům svojí syntaxí a filozofií odpovídají víc. Python jako obecný programovací jazyk sice místy vyžaduje krkolomnější zápis, ale zato nabízí možnost data spojit s jinými oblastmi – od získávání informací z webových stránek po tvoření webových či desktopových rozhraní.
Práce datového analytika se většinou drží následujícího postupu:
*(založeno na diagramu z knihy *Data Wrangling in Python* od Jacqueline Kazil & Katharine Jarmul, str. 3)*
S prvními dvěma kroky Python příliš nepomůže; k těm jen poznamenám, že „Co zajímavého se z těch dat dá vyčíst?” je validní otázka. Na druhé dva kroky se dá s úspěchem použít pythonní standardní knihovna: json, csv, případně doinstalovat requests, lxml pro XML či xlwt/openpyxl na excelové soubory.
Na zkoumání dat a přípravu výsledků pak použijeme specializovanou „datovou” knihovnu – Pandas.
Pandas slouží pro analýzu dat, které lze reprezentovat 2D tabulkou. Tento „tvar” dat najdeme v SQL databázích, souborech CSV nebo tabulkových procesorech. Stručně řečeno, co jde dělat v Excelu, jde dělat i v Pandas. (Pandas má samozřejmě funkce navíc, a hlavně umožňuje analýzu automatizovat.)
Jak bylo řečeno u NumPy, analytici – cílová skupina této knihovny – mají rádi zkratky. Ve spoustě materiálů na Webu proto najdete import pandas as pd, případně rovnou (a bez vysvětlení) použité pd jako zkratku pro pandas. Tento návod ale používá plné jméno.
import pandas
Základní datový typ, který Pandas nabízí, je DataFrame, neboli lidově „tabulka”. Jednotlivé záznamy jsou v ní uvedeny jako řádky a části těchto záznamů jsou úhledně srovnány ve sloupcích.
Nejpoužívanější způsob, jak naplnit první DataFrame, je načtení ze souboru. Na to má Pandas sadu funkcí začínající read_. (Některé z nich potřebují další knihovny, viz dokumentace.)
Jeden z nejpříjemnějších formátů je CSV:
actors = pandas.read_csv('static/actors.csv', index_col=None)
actors
Případně lze tabulku vytvořit ze seznamu seznamů:
items = pandas.DataFrame([
["Book", 123],
["Computer", 2185],
])
items
…nebo seznamu slovníků:
items = pandas.DataFrame([
{"name": "Book", "price": 123},
{"name": "Computer", "price": 2185},
])
items
V Jupyter Notebooku se tabulka vykreslí „graficky”. V konzoli se vypíše textově, ale data v ní jsou stejná:
print(actors)
Základní informace o tabulce se dají získat metodou info:
actors.info()
Vidíme, že je to tabulka (DataFrame), má 6 řádků indexovaných
(pomocí automaticky vygenerovaného indexu) od 0 do 5
a 3 sloupce: jeden s objekty, jeden s int64 a jeden s bool.
Tyto datové typy (dtypes) se doplnily automaticky podle zadaných
hodnot. Pandas je používá hlavně pro šetření pamětí: pythonní objekt
typu bool zabírá v paměti desítky bytů, ale v bool sloupci
si každá hodnota vystačí s jedním bytem.
Na rozdíl od NumPy jsou typy dynamické: když do sloupce zapíšeme „nekompatibilní”
hodnotu, kterou Pandas neumí převést na daný typ, typ sloupce
se automaticky zobecní.
Některé automatické převody ovšem nemusí být úplně intuitivní, např. None na NaN.
Sloupec, neboli Series, je druhý základní datový typ v Pandas. Obsahuje sérii hodnot, jako seznam, ale navíc má jméno, datový typ a „index”, který jednotlivé hodnoty pojmenovává. Sloupce se dají získat vybráním z tabulky:
birth_years = actors['birth']
birth_years
type(birth_years)
birth_years.name
birth_years.index
birth_years.dtype
S informacemi ve sloupcích se dá počítat. Základní aritmetické operace (jako sčítání či dělení) se sloupcem a skalární hodnotou (číslem, řetězcem, ...) provedou danou operaci nad každou hodnotou ve sloupci. Výsledek je nový sloupec:
ages = 2016 - birth_years
ages
century = birth_years // 100 + 1
century
To platí jak pro aritmetické operace (+, -, *, /, //, %, **), tak pro porovnávání:
birth_years > 1940
birth_years == 1940
Když sloupec nesečteme se skalární hodnotou (číslem) ale sekvencí, např. seznamem nebo dalším sloupcem, operace se provede na odpovídajících prvcích. Sloupec a druhá sekvence musí mít stejnou délku.
actors['name'] + [' (1)', ' (2)', ' (3)', ' (4)', ' (5)', ' (6)']
Řetězcové operace se u řetězcových sloupců schovávají pod jmenným prostorem str:
actors['name'].str.upper()
... a operace s daty a časy (datetime) najdeme pod dt.
Ze slupců jdou vybírat prvky či podsekvence podobně jako třeba ze seznamů:
birth_years[2]
birth_years[2:-2]
A navíc je lze vybírat pomocí sloupce typu bool, což vybere ty záznamy, u kterých je odpovídající hodnota true. Tak lze rychle vybrat hodnoty, které odpovídají nějaké podmínce:
# Roky narození po roce 1940
birth_years[birth_years > 1940]
Protože Python neumožňuje předefinovat chování operátorů and a or, logické spojení operací se tradičně dělá přes bitové operátory & (a) a | (nebo). Ty mají ale neintuitivní prioritu, proto se jednotlivé výrazy hodí uzavřít do závorek:
# Roky narození v daném rozmezí
birth_years[(birth_years > 1940) & (birth_years < 1943)]
Sloupce mají zabudovanou celou řadu operací, od základních (např. column.sum(), která bývá rychlejší než vestavěná funkce sum()) po roztodivné statistické specialitky. Kompletní seznam hledejte v dokumentaci. Povědomí o operacích, které sloupce umožňují, je základní znalost datového analytika.
print('Součet: ', birth_years.sum())
print('Průměr: ', birth_years.mean())
print('Medián: ', birth_years.median())
print('Počet unikátních hodnot: ', birth_years.nunique())
print('Koeficient špičatosti: ', birth_years.kurtosis())
Zvláště mocná je metoda apply, která nám dovoluje aplikovat jakoukoli funkci na všechny hodnoty sloupce:
actors['name'].apply(lambda x: ''.join(reversed(x)))
actors['alive'].apply({True: 'alive', False: 'deceased'}.get)
Prvky ze sloupců jdou vybírat jako u seznamů. Ale z tabulek v Pandas jde vybírat spoustou různých způsobů. Tradiční hranaté závorky plní několik funkcí najednou, takže někdy není na první pohled jasné, co jaké indexování znamená:
actors['name'] # Jméno sloupce
actors[1:-1] # Interval řádků
actors[['name', 'alive']] # Seznam sloupců
Toto je příklad nejednoznačného chování, které zjednodušuje život datovým analytikům, pro které je knihovna Pandas primárně určena.
My, coby programátoři píšící robustní kód, budeme čisté indexování ([]) používat jen pro výběr sloupců podle jména.
Pro ostatní přístup použijeme tzv. indexery, jako loc a iloc.
locIndexer loc zprostředkovává primárně řádky, a to podle indexu, tedy hlaviček tabulky. V našem příkladu jsou řádky očíslované a sloupce pojmenované, ale dále uvidíme, že v obou indexech můžou být jakékoli hodnoty.
actors
actors.loc[2]
Všimněte si, že loc není metoda: používají se s ním hranaté závorky.
Použijeme-li k indexování n-tici, prvním prvkem se indexují řádky a druhým sloupce – podobně jako u NumPy:
actors.loc[2, 'birth']
Na obou pozicích může být „interval”, ale na rozdíl od klasického Pythonu jsou ve výsledku obsaženy obě koncové hodnoty. (S indexem, který nemusí být vždy číselný, to dává smysl.)
actors.loc[2:4, 'birth':'alive']
Když uvedeme jen jednu hodnotu, sníží se dimenzionalita – z tabulky na sloupec (případně řádek – taky Series), ze sloupce na skalární hodnotu. Porovnejte:
actors.loc[2:4, 'name']
actors.loc[2:4, 'name':'name']
Chcete-li vybrat sloupec, na místě řádků uveďte dvojtečku – t.j. kompletní interval.
actors.loc[:, 'alive']
Další možnost indexování je seznamem hodnot. Tím se dají řádky či sloupce vybírat, přeskupovat, nebo i duplikovat:
actors.loc[:, ['name', 'alive']]
actors.loc[[3, 2, 4, 4], :]
ilocDruhý indexer, který si v krátkosti ukážeme, je iloc. Umí to samé co loc, jen nepracuje s klíčem, ale s pozicemi řádků či sloupců. Funguje tedy jako indexování v NumPy.
actors
actors.iloc[0, 0]
Protože iloc pracuje s čísly, záporná čísla a intervaly fungují jako ve standardním Pythonu:
actors.iloc[-1, 1]
actors.iloc[:, 0:1]
Indexování seznamem ale funguje jako u loc:
actors.iloc[[0, -1, 3], [-1, 1, 0]]
Jak loc tak iloc fungují i na sloupcích (Series), takže se dají kombinovat:
actors.iloc[-1].loc['name']
V minulé sekci jsme naťukli indexy – jména jednotlivých sloupců nebo řádků. Teď se podívejme, co všechno s nimi lze dělat. Načtěte si znovu stejnou tabulku:
actors = pandas.read_csv('static/actors.csv', index_col=None)
actors
Tato tabulka má dva klíče: jeden pro řádky, index, a druhý pro sloupce, který se jmenuje columns.
actors.index
actors.columns
Klíč se dá změnit tím, že do něj přiřadíme sloupec (nebo jinou sekvenci):
actors.index = actors['name']
actors
actors.index
Potom jde pomocí tohoto klíče vyhledávat. Chceme-li vyhledávat efektivně (což dává smysl, pokud by řádků byly miliony), je dobré nejdřív tabulku podle indexu seřadit:
actors = actors.sort_index()
actors
actors.loc[['Eric', 'Graham']]
Pozor ale na situaci, kdy hodnoty v klíči nejsou unikátní. To Pandas podporuje, ale chování nemusí být podle vašich představ:
actors.loc['Terry']
Trochu pokročilejší možnost, jak klíč nastavit, je metoda set_index. Nejčastěji se používá k přesunutí sloupců do klíče, ale v dokumentaci se dočtete i o dalších možnostech.
Přesuňte teď do klíče dva sloupce najednou:
indexed_actors = actors.set_index(['name', 'birth'])
indexed_actors
Vznikl tím víceúrovňový klíč:
indexed_actors.index
Řádky z tabulky s víceúrovňovým klíčem se dají vybírat buď postupně po jednotlivých úrovních, nebo n-ticí:
indexed_actors.loc['Terry']
indexed_actors.loc['Terry'].loc[1940]
indexed_actors.loc[('Terry', 1942)]
Kromě výběru dat mají klíče i jinou vlastnost: přidáme-li do tabulky nový sloupec s klíčem, jednotlivé řádky se seřadí podle něj:
indexed_actors
last_names = pandas.Series(['Gilliam', 'Jones', 'Cleveland'],
index=[('Terry', 1940), ('Terry', 1942), ('Carol', 1942)])
last_names
indexed_actors['last_name'] = last_names
indexed_actors
V posledním příkladu vidíme, že Pandas doplňuje za neznámé hodnoty NaN, tedy "Not a Number" – hodnotu, která plní podobnou funkci jako NULL v SQL nebo None v Pythonu. Znamená, že daná informace chybí, není k dispozici nebo ani nedává smysl ji mít. Naprostá většina operací s NaN dává opět NaN:
'(' + indexed_actors['last_name'] + ')'
NaN se chová divně i při porovnávání; (NaN == NaN) je nepravda. Pro zjištění chybějících hodnot máme metodu isnull():
indexed_actors['last_name'].isnull()
Abychom se NaN zbavili, máme dvě možnosti. Buď je zaplníme pomocí metody fillna hodnotou jako 0, False nebo, pro přehlednější výpis, prázdným řetězcem:
indexed_actors.fillna('')
Nebo se můžeme zbavit všech řádků, které nějaký NaN obsahují:
indexed_actors.dropna()
Bohužel existuje jistá nekonzistence mezi NaN a slovy null či na v názvech funkcí. C'est la vie.
Někdy se stane, že máme více souvisejících tabulek, které je potřeba spojit dohromady. Na to mají DataFrame metodu merge(), která umí podobné operace jako JOIN v SQL.
actors = pandas.read_csv('static/actors.csv', index_col=None)
actors
spouses = pandas.read_csv('static/spouses.csv', index_col=None)
spouses
actors.merge(spouses)
Mají-li spojované tabulky sloupce stejných jmen, Pandas je spojí podle těchto sloupců. V dokumentaci se dá zjistit, jak explicitně určit podle kterých klíčů spojovat, co udělat když v jedné z tabulek chybí odpovídající hodnoty apod.
Fanoušky SQL ještě odkážu na porovnání mezi SQL a Pandas.
Dostáváme se do bodu, kdy nám jednoduchá tabulka přestává stačit. Pojďme si vytvořit tabulku větší: fiktivních prodejů v e-shopu, ve formátu jaký bychom mohli dostat z SQL databáze nebo datového souboru.
Použijeme k tomu mimo jiné date_range, která vytváří kalendářní intervaly. Zde, i v jiných případech, kdy je jasné, že se má nějaká hodnota interpretovat jako datum, nám Pandas dovolí místo objektů datetime zadávat data řetězcem:
import itertools
import random
random.seed(0)
months = pandas.date_range('2015-01', '2016-12', freq='M')
categories = ['Electronics', 'Power Tools', 'Clothing']
data = pandas.DataFrame([{'month': a, 'category': b, 'sales': random.randint(-1000, 10000)}
for a, b in itertools.product(months, categories)
if random.randrange(20) > 0])
Tabulka je celkem dlouhá (i když v analýze dat bývají ještě delší). Podívejme se na několik obecných informací:
# Prvních pár řádků (dá se použít i např. head(10), bylo by jich víc)
data.head()
# Celkový počet řádků
len(data)
data['sales'].describe()
Pomocí set_index nastavíme, které sloupce budeme brát jako hlavičky:
indexed = data.set_index(['category', 'month'])
indexed.head()
Budeme-li chtít z těchto dat vytvořit tabulku, která má v řádcích kategorie a ve sloupcích měsíce, můžeme využít metodu unstack, která "přesune" vnitřní úroveň indexu řádků do sloupců a uspořádá podle toho i data.
Můžeme samozřejmě použít kteroukoli úroveň klíče; viz dokumentace k unstack a reverzní operaci stack.
unstacked = indexed.unstack('month')
unstacked
Teď je sloupcový klíč dvouúrovňový, ale úroveň sales je zbytečná. Můžeme se jí zbavit pomocí MultiIndex.droplevel.
unstacked.columns = unstacked.columns.droplevel()
unstacked
A teď můžeme data analyzovat. Kolik se celkem utratilo za elektroniku?
unstacked.loc['Electronics'].sum()
Jak to vypadalo se všemi elektrickými zařízeními v třech konkrétních měsících?
unstacked.loc[['Electronics', 'Power Tools'], '2016-03':'2016-05']
A jak se prodávalo oblečení?
unstacked.loc['Clothing']
Metody stack a unstack jsou sice asi nejužitečnější, ale stále jen jeden ze způsobů jak v Pandas tabulky přeskládávat. Náročnější studenti najdou další možnosti v dokumentaci.
Je-li nainstalována knihovna matplotlib, Pandas ji umí využít k tomu, aby kreslil grafy. Nastavení je trochu jiné pro Jupyter Notebook a pro příkazovou řádku.
Používáte-li Jupyter Notebook, zapněte integraci pro kreslení grafů pomocí:
import matplotlib
# Zapnout zobrazování grafů (procento uvozuje „magickou” zkratku IPythonu):
%matplotlib inline
a pak můžete přímo použít metodu plot(), která bez dalších argumentů vynese data z tabulky proti indexu:
unstacked.loc['Clothing'].dropna().plot()
Jste-li v příkazové řádce, napřed použij plot() a potom se na graf buď podívete, nebo ho uložte:
# Setup
import matplotlib.pyplot
# Plot
unstacked.loc['Clothing'].plot()
matplotlib.pyplot.show()
matplotlib.pyplot.savefig('graph.png')
Funkce show a savefig pracují s „aktuálním” grafem – typicky posledním, který se vykreslil. Pozor na to, že funkce savefig aktuální graf zahodí; před dalším show nebo savefig je potřeba ho vykreslit znovu.
V kombinaci s dalšími funkcemi Series a DataFrame umožňují grafy získat o datech rychlý přehled:
# Jak se postupně vyvíjely zisky z oblečení?
# `.T` udělá transpozici tabulky (vymění řádky a sloupce)
# `cumsum()` spočítá průběžný součet po sloupcích
unstacked.T.fillna(0).cumsum().plot()
# Jak si proti sobě stály jednotlivé kategorie v březnu, dubnu a květnu 2016?
unstacked.loc[:, '2016-03':'2016-05'].plot.bar(legend=False)
Další informace jsou, jak už to bývá, v dokumentaci.
Často používaná operace pro zjednodušení tabulky je groupby, která sloučí dohromady řádky se stejnou hodnotou v některém sloupci a sloučená data nějak agreguje.
data.head()
Samotný výsledek groupby() je jen objekt:
data.groupby('category')
... na který musíme zavolat příslušnou agregující funkci. Tady je například součet částek podle kategorie:
data.groupby('category').sum()
Nebo počet záznamů:
data.groupby('category').count()
Groupby umí agregovat podle více sloupců najednou (i když u našeho příkladu nedává velký smysl):
data.groupby(['category', 'month']).sum().head()
Chceme-li aplikovat více funkcí najednou, předáme jejich seznam metodě agg. Časté funkce lze předat jen jménem, jinak předáme funkci či metodu přímo:
data.groupby('category').agg(['mean', 'median', sum, pandas.Series.kurtosis])
Případně použijeme zkratku pro základní analýzu:
g = data.groupby('month')
g.describe()
A perlička nakonec – agregovat se dá i podle sloupců, které nejsou v tabulce. Následující kód rozloží data na slabé, průměrné a silné měsíce podle toho, kolik jsme v daném měsíci vydělali celých tisícikorun, a zjistí celkový zisk ze slabých, průměrných a silných měsíců:
bin_size = 10000
by_month = data.groupby('month').sum()
by_thousands = by_month.groupby(by_month['sales'] // bin_size * bin_size).agg(['count', 'sum'])
by_thousands
by_thousands[('sales', 'sum')].plot()
{
"data": {
"sessionMaterial": {
"id": "session-material:2019/pyladies-praha-jaro-ntk:data:1",
"title": "Pandas",
"html": "\n \n \n\n <div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Na dnešní lekci si do virtuálního prostředí nainstalujte následující balíčky.\nMůžete použít prostředí z lekce o NumPy.</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">$ </span>python -m pip install --upgrade pip\n<span class=\"gp\">$ </span>python -m pip install notebook pandas matplotlib\n</pre></div><p>Pro případ, že by vaše verze <code>pip</code>-u neuměla <em>wheels</em> nebo na PyPI nebyly příslušné <em>wheel</em> balíčky, je dobré mít na systému nainstalovaný překladač C a Fortranu (např. <code>gcc</code>, <code>gcc-gfortran</code>) a hlavičkové soubory Pythonu (např. <code>python3-devel</code>). Jestli je ale nemáte, zkuste instalaci přímo – <em>wheels</em> pro většinu operačních systémů existují – a až kdyby to nefungovalo, instalujte překladače a hlavičky.</p>\n<p>Mezitím co se instaluje, stáhněte si do adresáře <code>static</code> potřebné soubory:\n<a href=\"/2019/pyladies-praha-jaro-ntk/intro/pandas/static/actors.csv\">actors.csv</a> a\n<a href=\"/2019/pyladies-praha-jaro-ntk/intro/pandas/static/spouses.csv\">spouses.csv</a>.</p>\n<p>A až bude nainstalováno, spusťte si nový Notebook. (Viz <a href=\"/2019/pyladies-praha-jaro-ntk/intro/notebook/\">lekce o Notebooku</a>.)</p>\n<hr>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<h1>Analýza dat v Pythonu</h1>\n<p>Jedna z oblastí, kde popularita Pythonu neustále roste, je analýza dat. Co tenhle termín znamená?</p>\n<p>Máme nějaká data; je jich moc a jsou nepřehledná. Datový analytik je zpracuje, přeskládá, najde v nich smysl, vytvoří shrnutí toho nejdůležitějšího nebo barevnou infografiku.</p>\n<p>Ze statistických údajů o obyvatelstvu zjistíme, jak souvisí příjmy s dostupností škol. Zpracováním měření z fyzikálního experimentu ověříme, jestli platí hypotéza. Z log přístupů na webovou službu určíme, co uživatelé čtou a kde stránky opouštějí.</p>\n<p>Na podobné úkoly je možné použít jazyky vyvinuté přímo pro analýzu dat, jako R, které takovým úkolům svojí syntaxí a filozofií odpovídají víc. Python jako obecný programovací jazyk sice místy vyžaduje krkolomnější zápis, ale zato nabízí možnost data spojit s jinými oblastmi – od získávání informací z webových stránek po tvoření webových či desktopových rozhraní.</p>\n<h2>Proces analýzy dat</h2>\n<p>Práce datového analytika se většinou drží následujícího postupu:</p>\n<ul>\n<li>Formulace otázky, kterou chceme zodpovědět</li>\n<li>Identifikace dat, která můžeme použít</li>\n<li>Získání dat (stažení, převod do použitelného formátu)</li>\n<li>Uložení dat</li>\n<li>Zkoumání dat</li>\n<li>Publikace výsledků</li>\n</ul>\n<p><small>*(založeno na diagramu z knihy *Data Wrangling in Python* od Jacqueline Kazil & Katharine Jarmul, str. 3)*</small></p>\n<p>S prvními dvěma kroky Python příliš nepomůže; k těm jen poznamenám, že „Co zajímavého se z těch dat dá vyčíst?” je validní otázka. Na druhé dva kroky se dá s úspěchem použít pythonní standardní knihovna: <code>json</code>, <code>csv</code>, případně doinstalovat <code>requests</code>, <code>lxml</code> pro XML či <code>xlwt</code>/<code>openpyxl</code> na excelové soubory.</p>\n<p>Na zkoumání dat a přípravu výsledků pak použijeme specializovanou „datovou” knihovnu – Pandas.</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<h1>Pandas</h1>\n<p>Pandas slouží pro analýzu dat, které lze reprezentovat 2D tabulkou. Tento „tvar” dat najdeme v SQL databázích, souborech CSV nebo tabulkových procesorech. Stručně řečeno, co jde dělat v Excelu, jde dělat i v Pandas. (Pandas má samozřejmě funkce navíc, a hlavně umožňuje analýzu automatizovat.)</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Jak bylo řečeno u <a href=\"/2019/pyladies-praha-jaro-ntk/intro/numpy/\">NumPy</a>, analytici – cílová skupina této knihovny – mají rádi zkratky. Ve spoustě materiálů na Webu proto najdete <code>import pandas as pd</code>, případně rovnou (a bez vysvětlení) použité <code>pd</code> jako zkratku pro <code>pandas</code>. Tento návod ale používá plné jméno.</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [1]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">pandas</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<h2>Tabulky</h2>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Základní datový typ, který Pandas nabízí, je <code>DataFrame</code>, neboli lidově „tabulka”. Jednotlivé záznamy jsou v ní uvedeny jako řádky a části těchto záznamů jsou úhledně srovnány ve sloupcích.</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Nejpoužívanější způsob, jak naplnit první DataFrame, je načtení ze souboru. Na to má Pandas sadu funkcí začínající <code>read_</code>. (Některé z nich potřebují další knihovny, viz dokumentace.)</p>\n<p>Jeden z nejpříjemnějších formátů je CSV:</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [2]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">actors</span> <span class=\"o\">=</span> <span class=\"n\">pandas</span><span class=\"o\">.</span><span class=\"n\">read_csv</span><span class=\"p\">(</span><span class=\"s1\">'static/actors.csv'</span><span class=\"p\">,</span> <span class=\"n\">index_col</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n<span class=\"n\">actors</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[2]:</div>\n\n\n\n<div class=\"output_html rendered_html output_subarea output_execute_result\">\n<div>\n<style>.lesson-content .dataframe thead tr:only-child th {\n text-align: right\n }\n.lesson-content .dataframe thead th {\n text-align: left\n }\n.lesson-content .dataframe tbody tr th {\n vertical-align: top\n }</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>name</th>\n <th>birth</th>\n <th>alive</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>Terry</td>\n <td>1942</td>\n <td>True</td>\n </tr>\n <tr>\n <th>1</th>\n <td>Michael</td>\n <td>1943</td>\n <td>True</td>\n </tr>\n <tr>\n <th>2</th>\n <td>Eric</td>\n <td>1943</td>\n <td>True</td>\n </tr>\n <tr>\n <th>3</th>\n <td>Graham</td>\n <td>1941</td>\n <td>False</td>\n </tr>\n <tr>\n <th>4</th>\n <td>Terry</td>\n <td>1940</td>\n <td>True</td>\n </tr>\n <tr>\n <th>5</th>\n <td>John</td>\n <td>1939</td>\n <td>True</td>\n </tr>\n </tbody>\n</table>\n</div>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Případně lze tabulku vytvořit ze seznamu seznamů:</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [3]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">items</span> <span class=\"o\">=</span> <span class=\"n\">pandas</span><span class=\"o\">.</span><span class=\"n\">DataFrame</span><span class=\"p\">([</span>\n <span class=\"p\">[</span><span class=\"s2\">"Book"</span><span class=\"p\">,</span> <span class=\"mi\">123</span><span class=\"p\">],</span>\n <span class=\"p\">[</span><span class=\"s2\">"Computer"</span><span class=\"p\">,</span> <span class=\"mi\">2185</span><span class=\"p\">],</span>\n<span class=\"p\">])</span>\n<span class=\"n\">items</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[3]:</div>\n\n\n\n<div class=\"output_html rendered_html output_subarea output_execute_result\">\n<div>\n<style>.lesson-content .dataframe thead tr:only-child th {\n text-align: right\n }\n.lesson-content .dataframe thead th {\n text-align: left\n }\n.lesson-content .dataframe tbody tr th {\n vertical-align: top\n }</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>0</th>\n <th>1</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>Book</td>\n <td>123</td>\n </tr>\n <tr>\n <th>1</th>\n <td>Computer</td>\n <td>2185</td>\n </tr>\n </tbody>\n</table>\n</div>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>…nebo seznamu slovníků:</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [4]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">items</span> <span class=\"o\">=</span> <span class=\"n\">pandas</span><span class=\"o\">.</span><span class=\"n\">DataFrame</span><span class=\"p\">([</span>\n <span class=\"p\">{</span><span class=\"s2\">"name"</span><span class=\"p\">:</span> <span class=\"s2\">"Book"</span><span class=\"p\">,</span> <span class=\"s2\">"price"</span><span class=\"p\">:</span> <span class=\"mi\">123</span><span class=\"p\">},</span>\n <span class=\"p\">{</span><span class=\"s2\">"name"</span><span class=\"p\">:</span> <span class=\"s2\">"Computer"</span><span class=\"p\">,</span> <span class=\"s2\">"price"</span><span class=\"p\">:</span> <span class=\"mi\">2185</span><span class=\"p\">},</span>\n<span class=\"p\">])</span>\n<span class=\"n\">items</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[4]:</div>\n\n\n\n<div class=\"output_html rendered_html output_subarea output_execute_result\">\n<div>\n<style>.lesson-content .dataframe thead tr:only-child th {\n text-align: right\n }\n.lesson-content .dataframe thead th {\n text-align: left\n }\n.lesson-content .dataframe tbody tr th {\n vertical-align: top\n }</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>name</th>\n <th>price</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>Book</td>\n <td>123</td>\n </tr>\n <tr>\n <th>1</th>\n <td>Computer</td>\n <td>2185</td>\n </tr>\n </tbody>\n</table>\n</div>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>V Jupyter Notebooku se tabulka vykreslí „graficky”.\nV konzoli se vypíše textově, ale data v ní jsou stejná:</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [5]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">actors</span><span class=\"p\">)</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt\"></div>\n\n\n<div class=\"output_subarea output_stream output_stdout output_text\">\n<pre> name birth alive\n0 Terry 1942 True\n1 Michael 1943 True\n2 Eric 1943 True\n3 Graham 1941 False\n4 Terry 1940 True\n5 John 1939 True\n</pre>\n</div>\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Základní informace o tabulce se dají získat metodou <code>info</code>:</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [6]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">actors</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">()</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt\"></div>\n\n\n<div class=\"output_subarea output_stream output_stdout output_text\">\n<pre><class 'pandas.core.frame.DataFrame'>\nRangeIndex: 6 entries, 0 to 5\nData columns (total 3 columns):\nname 6 non-null object\nbirth 6 non-null int64\nalive 6 non-null bool\ndtypes: bool(1), int64(1), object(1)\nmemory usage: 182.0+ bytes\n</pre>\n</div>\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Vidíme, že je to tabulka (<code>DataFrame</code>), má 6 řádků indexovaných\n(pomocí automaticky vygenerovaného indexu) od 0 do 5\na 3 sloupce: jeden s objekty, jeden s <code>int64</code> a jeden s <code>bool</code>.</p>\n<p>Tyto datové typy (<code>dtypes</code>) se doplnily automaticky podle zadaných\nhodnot. Pandas je používá hlavně pro šetření pamětí: pythonní objekt\ntypu <code>bool</code> zabírá v paměti desítky bytů, ale v <code>bool</code> sloupci\nsi každá hodnota vystačí s jedním bytem.</p>\n<p>Na rozdíl od NumPy jsou typy dynamické: když do sloupce zapíšeme „nekompatibilní”\nhodnotu, kterou Pandas neumí převést na daný typ, typ sloupce\nse automaticky zobecní.\nNěkteré automatické převody ovšem nemusí být úplně intuitivní, např. <code>None</code> na <code>NaN</code>.</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<h2>Sloupce</h2>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Sloupec, neboli <code>Series</code>, je druhý základní datový typ v Pandas. Obsahuje sérii hodnot, jako seznam, ale navíc má jméno, datový typ a „index”, který jednotlivé hodnoty pojmenovává. Sloupce se dají získat vybráním z tabulky:</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [7]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">birth_years</span> <span class=\"o\">=</span> <span class=\"n\">actors</span><span class=\"p\">[</span><span class=\"s1\">'birth'</span><span class=\"p\">]</span>\n<span class=\"n\">birth_years</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[7]:</div>\n\n\n\n\n<div class=\"output_text output_subarea output_execute_result\">\n<pre>0 1942\n1 1943\n2 1943\n3 1941\n4 1940\n5 1939\nName: birth, dtype: int64</pre>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [8]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">birth_years</span><span class=\"p\">)</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[8]:</div>\n\n\n\n\n<div class=\"output_text output_subarea output_execute_result\">\n<pre>pandas.core.series.Series</pre>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [9]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">birth_years</span><span class=\"o\">.</span><span class=\"n\">name</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[9]:</div>\n\n\n\n\n<div class=\"output_text output_subarea output_execute_result\">\n<pre>'birth'</pre>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [10]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">birth_years</span><span class=\"o\">.</span><span class=\"n\">index</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[10]:</div>\n\n\n\n\n<div class=\"output_text output_subarea output_execute_result\">\n<pre>RangeIndex(start=0, stop=6, step=1)</pre>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [11]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">birth_years</span><span class=\"o\">.</span><span class=\"n\">dtype</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[11]:</div>\n\n\n\n\n<div class=\"output_text output_subarea output_execute_result\">\n<pre>dtype('int64')</pre>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>S informacemi ve sloupcích se dá počítat.\nZákladní aritmetické operace (jako sčítání či dělení) se sloupcem a skalární hodnotou (číslem, řetězcem, ...) provedou danou operaci nad každou hodnotou ve sloupci. Výsledek je nový sloupec:</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [12]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">ages</span> <span class=\"o\">=</span> <span class=\"mi\">2016</span> <span class=\"o\">-</span> <span class=\"n\">birth_years</span>\n<span class=\"n\">ages</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[12]:</div>\n\n\n\n\n<div class=\"output_text output_subarea output_execute_result\">\n<pre>0 74\n1 73\n2 73\n3 75\n4 76\n5 77\nName: birth, dtype: int64</pre>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [13]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">century</span> <span class=\"o\">=</span> <span class=\"n\">birth_years</span> <span class=\"o\">//</span> <span class=\"mi\">100</span> <span class=\"o\">+</span> <span class=\"mi\">1</span>\n<span class=\"n\">century</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[13]:</div>\n\n\n\n\n<div class=\"output_text output_subarea output_execute_result\">\n<pre>0 20\n1 20\n2 20\n3 20\n4 20\n5 20\nName: birth, dtype: int64</pre>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>To platí jak pro aritmetické operace (<code>+</code>, <code>-</code>, <code>*</code>, <code>/</code>, <code>//</code>, <code>%</code>, <code>**</code>), tak pro porovnávání:</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [14]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">birth_years</span> <span class=\"o\">></span> <span class=\"mi\">1940</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[14]:</div>\n\n\n\n\n<div class=\"output_text output_subarea output_execute_result\">\n<pre>0 True\n1 True\n2 True\n3 True\n4 False\n5 False\nName: birth, dtype: bool</pre>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [15]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">birth_years</span> <span class=\"o\">==</span> <span class=\"mi\">1940</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[15]:</div>\n\n\n\n\n<div class=\"output_text output_subarea output_execute_result\">\n<pre>0 False\n1 False\n2 False\n3 False\n4 True\n5 False\nName: birth, dtype: bool</pre>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Když sloupec nesečteme se skalární hodnotou (číslem) ale sekvencí, např. seznamem nebo dalším sloupcem, operace se provede na odpovídajících prvcích. Sloupec a druhá sekvence musí mít stejnou délku.</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [16]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">actors</span><span class=\"p\">[</span><span class=\"s1\">'name'</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"p\">[</span><span class=\"s1\">' (1)'</span><span class=\"p\">,</span> <span class=\"s1\">' (2)'</span><span class=\"p\">,</span> <span class=\"s1\">' (3)'</span><span class=\"p\">,</span> <span class=\"s1\">' (4)'</span><span class=\"p\">,</span> <span class=\"s1\">' (5)'</span><span class=\"p\">,</span> <span class=\"s1\">' (6)'</span><span class=\"p\">]</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[16]:</div>\n\n\n\n\n<div class=\"output_text output_subarea output_execute_result\">\n<pre>0 Terry (1)\n1 Michael (2)\n2 Eric (3)\n3 Graham (4)\n4 Terry (5)\n5 John (6)\nName: name, dtype: object</pre>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Řetězcové operace se u řetězcových sloupců schovávají pod jmenným prostorem <code>str</code>:</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [17]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">actors</span><span class=\"p\">[</span><span class=\"s1\">'name'</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">str</span><span class=\"o\">.</span><span class=\"n\">upper</span><span class=\"p\">()</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[17]:</div>\n\n\n\n\n<div class=\"output_text output_subarea output_execute_result\">\n<pre>0 TERRY\n1 MICHAEL\n2 ERIC\n3 GRAHAM\n4 TERRY\n5 JOHN\nName: name, dtype: object</pre>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>... a operace s daty a časy (<em>datetime</em>) najdeme pod <code>dt</code>.</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Ze slupců jdou vybírat prvky či podsekvence podobně jako třeba ze seznamů:</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [18]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">birth_years</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">]</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[18]:</div>\n\n\n\n\n<div class=\"output_text output_subarea output_execute_result\">\n<pre>1943</pre>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [19]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">birth_years</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">:</span><span class=\"o\">-</span><span class=\"mi\">2</span><span class=\"p\">]</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[19]:</div>\n\n\n\n\n<div class=\"output_text output_subarea output_execute_result\">\n<pre>2 1943\n3 1941\nName: birth, dtype: int64</pre>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>A navíc je lze vybírat pomocí sloupce typu <code>bool</code>, což vybere ty záznamy, u kterých je odpovídající hodnota <em>true</em>. Tak lze rychle vybrat hodnoty, které odpovídají nějaké podmínce:</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [20]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"c1\"># Roky narození po roce 1940</span>\n<span class=\"n\">birth_years</span><span class=\"p\">[</span><span class=\"n\">birth_years</span> <span class=\"o\">></span> <span class=\"mi\">1940</span><span class=\"p\">]</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[20]:</div>\n\n\n\n\n<div class=\"output_text output_subarea output_execute_result\">\n<pre>0 1942\n1 1943\n2 1943\n3 1941\nName: birth, dtype: int64</pre>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Protože Python neumožňuje předefinovat chování operátorů <code>and</code> a <code>or</code>, logické spojení operací se tradičně dělá přes bitové operátory <code>&</code> (a) a <code>|</code> (nebo). Ty mají ale neintuitivní prioritu, proto se jednotlivé výrazy hodí uzavřít do závorek:</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [21]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"c1\"># Roky narození v daném rozmezí</span>\n<span class=\"n\">birth_years</span><span class=\"p\">[(</span><span class=\"n\">birth_years</span> <span class=\"o\">></span> <span class=\"mi\">1940</span><span class=\"p\">)</span> <span class=\"o\">&</span> <span class=\"p\">(</span><span class=\"n\">birth_years</span> <span class=\"o\"><</span> <span class=\"mi\">1943</span><span class=\"p\">)]</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[21]:</div>\n\n\n\n\n<div class=\"output_text output_subarea output_execute_result\">\n<pre>0 1942\n3 1941\nName: birth, dtype: int64</pre>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Sloupce mají zabudovanou celou řadu operací, od základních (např. <code>column.sum()</code>, která bývá rychlejší než vestavěná funkce <code>sum()</code>) po roztodivné statistické specialitky. Kompletní seznam hledejte v <a href=\"http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.html\">dokumentaci</a>. Povědomí o operacích, které sloupce umožňují, je základní znalost datového analytika.</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [22]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">'Součet: '</span><span class=\"p\">,</span> <span class=\"n\">birth_years</span><span class=\"o\">.</span><span class=\"n\">sum</span><span class=\"p\">())</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">'Průměr: '</span><span class=\"p\">,</span> <span class=\"n\">birth_years</span><span class=\"o\">.</span><span class=\"n\">mean</span><span class=\"p\">())</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">'Medián: '</span><span class=\"p\">,</span> <span class=\"n\">birth_years</span><span class=\"o\">.</span><span class=\"n\">median</span><span class=\"p\">())</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">'Počet unikátních hodnot: '</span><span class=\"p\">,</span> <span class=\"n\">birth_years</span><span class=\"o\">.</span><span class=\"n\">nunique</span><span class=\"p\">())</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">'Koeficient špičatosti: '</span><span class=\"p\">,</span> <span class=\"n\">birth_years</span><span class=\"o\">.</span><span class=\"n\">kurtosis</span><span class=\"p\">())</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt\"></div>\n\n\n<div class=\"output_subarea output_stream output_stdout output_text\">\n<pre>Součet: 11648\nPrůměr: 1941.3333333333333\nMedián: 1941.5\nPočet unikátních hodnot: 5\nKoeficient špičatosti: -1.48125\n</pre>\n</div>\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Zvláště mocná je metoda <code>apply</code>, která nám dovoluje aplikovat jakoukoli funkci na všechny hodnoty sloupce:</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [23]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">actors</span><span class=\"p\">[</span><span class=\"s1\">'name'</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">apply</span><span class=\"p\">(</span><span class=\"k\">lambda</span> <span class=\"n\">x</span><span class=\"p\">:</span> <span class=\"s1\">''</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"nb\">reversed</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">)))</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[23]:</div>\n\n\n\n\n<div class=\"output_text output_subarea output_execute_result\">\n<pre>0 yrreT\n1 leahciM\n2 cirE\n3 maharG\n4 yrreT\n5 nhoJ\nName: name, dtype: object</pre>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [24]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">actors</span><span class=\"p\">[</span><span class=\"s1\">'alive'</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">apply</span><span class=\"p\">({</span><span class=\"kc\">True</span><span class=\"p\">:</span> <span class=\"s1\">'alive'</span><span class=\"p\">,</span> <span class=\"kc\">False</span><span class=\"p\">:</span> <span class=\"s1\">'deceased'</span><span class=\"p\">}</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">)</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[24]:</div>\n\n\n\n\n<div class=\"output_text output_subarea output_execute_result\">\n<pre>0 alive\n1 alive\n2 alive\n3 deceased\n4 alive\n5 alive\nName: alive, dtype: object</pre>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<h2>Tabulky a vybírání prvků</h2>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Prvky ze sloupců jdou vybírat jako u seznamů. Ale z tabulek v Pandas jde vybírat spoustou různých způsobů. Tradiční hranaté závorky plní několik funkcí najednou, takže někdy není na první pohled jasné, co jaké indexování znamená:</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [25]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">actors</span><span class=\"p\">[</span><span class=\"s1\">'name'</span><span class=\"p\">]</span> <span class=\"c1\"># Jméno sloupce</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[25]:</div>\n\n\n\n\n<div class=\"output_text output_subarea output_execute_result\">\n<pre>0 Terry\n1 Michael\n2 Eric\n3 Graham\n4 Terry\n5 John\nName: name, dtype: object</pre>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [26]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">actors</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">:</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"c1\"># Interval řádků</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[26]:</div>\n\n\n\n<div class=\"output_html rendered_html output_subarea output_execute_result\">\n<div>\n<style>.lesson-content .dataframe thead tr:only-child th {\n text-align: right\n }\n.lesson-content .dataframe thead th {\n text-align: left\n }\n.lesson-content .dataframe tbody tr th {\n vertical-align: top\n }</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>name</th>\n <th>birth</th>\n <th>alive</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>1</th>\n <td>Michael</td>\n <td>1943</td>\n <td>True</td>\n </tr>\n <tr>\n <th>2</th>\n <td>Eric</td>\n <td>1943</td>\n <td>True</td>\n </tr>\n <tr>\n <th>3</th>\n <td>Graham</td>\n <td>1941</td>\n <td>False</td>\n </tr>\n <tr>\n <th>4</th>\n <td>Terry</td>\n <td>1940</td>\n <td>True</td>\n </tr>\n </tbody>\n</table>\n</div>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [27]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">actors</span><span class=\"p\">[[</span><span class=\"s1\">'name'</span><span class=\"p\">,</span> <span class=\"s1\">'alive'</span><span class=\"p\">]]</span> <span class=\"c1\"># Seznam sloupců</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[27]:</div>\n\n\n\n<div class=\"output_html rendered_html output_subarea output_execute_result\">\n<div>\n<style>.lesson-content .dataframe thead tr:only-child th {\n text-align: right\n }\n.lesson-content .dataframe thead th {\n text-align: left\n }\n.lesson-content .dataframe tbody tr th {\n vertical-align: top\n }</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>name</th>\n <th>alive</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>Terry</td>\n <td>True</td>\n </tr>\n <tr>\n <th>1</th>\n <td>Michael</td>\n <td>True</td>\n </tr>\n <tr>\n <th>2</th>\n <td>Eric</td>\n <td>True</td>\n </tr>\n <tr>\n <th>3</th>\n <td>Graham</td>\n <td>False</td>\n </tr>\n <tr>\n <th>4</th>\n <td>Terry</td>\n <td>True</td>\n </tr>\n <tr>\n <th>5</th>\n <td>John</td>\n <td>True</td>\n </tr>\n </tbody>\n</table>\n</div>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Toto je příklad nejednoznačného chování, které zjednodušuje život datovým analytikům, pro které je knihovna Pandas primárně určena.</p>\n<p>My, coby programátoři píšící robustní kód, budeme čisté indexování (<code>[]</code>) používat <em>jen</em> pro výběr sloupců podle jména.\nPro ostatní přístup použijeme tzv. <em>indexery</em>, jako <code>loc</code> a <code>iloc</code>.</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<h3>Indexer <code>loc</code></h3>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Indexer <code>loc</code> zprostředkovává primárně <em>řádky</em>, a to podle <em>indexu</em>, tedy hlaviček tabulky. V našem příkladu jsou řádky očíslované a sloupce pojmenované, ale dále uvidíme, že v obou indexech můžou být jakékoli hodnoty.</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [28]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">actors</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[28]:</div>\n\n\n\n<div class=\"output_html rendered_html output_subarea output_execute_result\">\n<div>\n<style>.lesson-content .dataframe thead tr:only-child th {\n text-align: right\n }\n.lesson-content .dataframe thead th {\n text-align: left\n }\n.lesson-content .dataframe tbody tr th {\n vertical-align: top\n }</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>name</th>\n <th>birth</th>\n <th>alive</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>Terry</td>\n <td>1942</td>\n <td>True</td>\n </tr>\n <tr>\n <th>1</th>\n <td>Michael</td>\n <td>1943</td>\n <td>True</td>\n </tr>\n <tr>\n <th>2</th>\n <td>Eric</td>\n <td>1943</td>\n <td>True</td>\n </tr>\n <tr>\n <th>3</th>\n <td>Graham</td>\n <td>1941</td>\n <td>False</td>\n </tr>\n <tr>\n <th>4</th>\n <td>Terry</td>\n <td>1940</td>\n <td>True</td>\n </tr>\n <tr>\n <th>5</th>\n <td>John</td>\n <td>1939</td>\n <td>True</td>\n </tr>\n </tbody>\n</table>\n</div>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [29]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">actors</span><span class=\"o\">.</span><span class=\"n\">loc</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">]</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[29]:</div>\n\n\n\n\n<div class=\"output_text output_subarea output_execute_result\">\n<pre>name Eric\nbirth 1943\nalive True\nName: 2, dtype: object</pre>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Všimněte si, že <code>loc</code> není metoda: používají se s ním hranaté závorky.</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Použijeme-li k indexování <em>n</em>-tici, prvním prvkem se indexují řádky a druhým sloupce – podobně jako u NumPy:</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [30]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">actors</span><span class=\"o\">.</span><span class=\"n\">loc</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"s1\">'birth'</span><span class=\"p\">]</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[30]:</div>\n\n\n\n\n<div class=\"output_text output_subarea output_execute_result\">\n<pre>1943</pre>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Na obou pozicích může být „interval”, ale na rozdíl od klasického Pythonu jsou ve výsledku obsaženy <em>obě koncové hodnoty</em>. (S indexem, který nemusí být vždy číselný, to dává smysl.)</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [31]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">actors</span><span class=\"o\">.</span><span class=\"n\">loc</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">:</span><span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"s1\">'birth'</span><span class=\"p\">:</span><span class=\"s1\">'alive'</span><span class=\"p\">]</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[31]:</div>\n\n\n\n<div class=\"output_html rendered_html output_subarea output_execute_result\">\n<div>\n<style>.lesson-content .dataframe thead tr:only-child th {\n text-align: right\n }\n.lesson-content .dataframe thead th {\n text-align: left\n }\n.lesson-content .dataframe tbody tr th {\n vertical-align: top\n }</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>birth</th>\n <th>alive</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>2</th>\n <td>1943</td>\n <td>True</td>\n </tr>\n <tr>\n <th>3</th>\n <td>1941</td>\n <td>False</td>\n </tr>\n <tr>\n <th>4</th>\n <td>1940</td>\n <td>True</td>\n </tr>\n </tbody>\n</table>\n</div>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Když uvedeme jen jednu hodnotu, sníží se dimenzionalita – z tabulky na sloupec (případně řádek – taky Series), ze sloupce na skalární hodnotu. Porovnejte:</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [32]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">actors</span><span class=\"o\">.</span><span class=\"n\">loc</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">:</span><span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"s1\">'name'</span><span class=\"p\">]</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[32]:</div>\n\n\n\n\n<div class=\"output_text output_subarea output_execute_result\">\n<pre>2 Eric\n3 Graham\n4 Terry\nName: name, dtype: object</pre>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [33]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">actors</span><span class=\"o\">.</span><span class=\"n\">loc</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">:</span><span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"s1\">'name'</span><span class=\"p\">:</span><span class=\"s1\">'name'</span><span class=\"p\">]</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[33]:</div>\n\n\n\n<div class=\"output_html rendered_html output_subarea output_execute_result\">\n<div>\n<style>.lesson-content .dataframe thead tr:only-child th {\n text-align: right\n }\n.lesson-content .dataframe thead th {\n text-align: left\n }\n.lesson-content .dataframe tbody tr th {\n vertical-align: top\n }</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>name</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>2</th>\n <td>Eric</td>\n </tr>\n <tr>\n <th>3</th>\n <td>Graham</td>\n </tr>\n <tr>\n <th>4</th>\n <td>Terry</td>\n </tr>\n </tbody>\n</table>\n</div>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Chcete-li vybrat sloupec, na místě řádků uveďte dvojtečku – t.j. kompletní interval.</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [34]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">actors</span><span class=\"o\">.</span><span class=\"n\">loc</span><span class=\"p\">[:,</span> <span class=\"s1\">'alive'</span><span class=\"p\">]</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[34]:</div>\n\n\n\n\n<div class=\"output_text output_subarea output_execute_result\">\n<pre>0 True\n1 True\n2 True\n3 False\n4 True\n5 True\nName: alive, dtype: bool</pre>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Další možnost indexování je seznamem hodnot. Tím se dají řádky či sloupce vybírat, přeskupovat, nebo i duplikovat:</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [35]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">actors</span><span class=\"o\">.</span><span class=\"n\">loc</span><span class=\"p\">[:,</span> <span class=\"p\">[</span><span class=\"s1\">'name'</span><span class=\"p\">,</span> <span class=\"s1\">'alive'</span><span class=\"p\">]]</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[35]:</div>\n\n\n\n<div class=\"output_html rendered_html output_subarea output_execute_result\">\n<div>\n<style>.lesson-content .dataframe thead tr:only-child th {\n text-align: right\n }\n.lesson-content .dataframe thead th {\n text-align: left\n }\n.lesson-content .dataframe tbody tr th {\n vertical-align: top\n }</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>name</th>\n <th>alive</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>Terry</td>\n <td>True</td>\n </tr>\n <tr>\n <th>1</th>\n <td>Michael</td>\n <td>True</td>\n </tr>\n <tr>\n <th>2</th>\n <td>Eric</td>\n <td>True</td>\n </tr>\n <tr>\n <th>3</th>\n <td>Graham</td>\n <td>False</td>\n </tr>\n <tr>\n <th>4</th>\n <td>Terry</td>\n <td>True</td>\n </tr>\n <tr>\n <th>5</th>\n <td>John</td>\n <td>True</td>\n </tr>\n </tbody>\n</table>\n</div>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [36]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">actors</span><span class=\"o\">.</span><span class=\"n\">loc</span><span class=\"p\">[[</span><span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">],</span> <span class=\"p\">:]</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[36]:</div>\n\n\n\n<div class=\"output_html rendered_html output_subarea output_execute_result\">\n<div>\n<style>.lesson-content .dataframe thead tr:only-child th {\n text-align: right\n }\n.lesson-content .dataframe thead th {\n text-align: left\n }\n.lesson-content .dataframe tbody tr th {\n vertical-align: top\n }</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>name</th>\n <th>birth</th>\n <th>alive</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>3</th>\n <td>Graham</td>\n <td>1941</td>\n <td>False</td>\n </tr>\n <tr>\n <th>2</th>\n <td>Eric</td>\n <td>1943</td>\n <td>True</td>\n </tr>\n <tr>\n <th>4</th>\n <td>Terry</td>\n <td>1940</td>\n <td>True</td>\n </tr>\n <tr>\n <th>4</th>\n <td>Terry</td>\n <td>1940</td>\n <td>True</td>\n </tr>\n </tbody>\n</table>\n</div>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<h3>Indexer <code>iloc</code></h3>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Druhý indexer, který si v krátkosti ukážeme, je <code>iloc</code>. Umí to samé co <code>loc</code>, jen nepracuje s klíčem, ale s pozicemi řádků či sloupců. Funguje tedy jako indexování v NumPy.</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [37]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">actors</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[37]:</div>\n\n\n\n<div class=\"output_html rendered_html output_subarea output_execute_result\">\n<div>\n<style>.lesson-content .dataframe thead tr:only-child th {\n text-align: right\n }\n.lesson-content .dataframe thead th {\n text-align: left\n }\n.lesson-content .dataframe tbody tr th {\n vertical-align: top\n }</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>name</th>\n <th>birth</th>\n <th>alive</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>Terry</td>\n <td>1942</td>\n <td>True</td>\n </tr>\n <tr>\n <th>1</th>\n <td>Michael</td>\n <td>1943</td>\n <td>True</td>\n </tr>\n <tr>\n <th>2</th>\n <td>Eric</td>\n <td>1943</td>\n <td>True</td>\n </tr>\n <tr>\n <th>3</th>\n <td>Graham</td>\n <td>1941</td>\n <td>False</td>\n </tr>\n <tr>\n <th>4</th>\n <td>Terry</td>\n <td>1940</td>\n <td>True</td>\n </tr>\n <tr>\n <th>5</th>\n <td>John</td>\n <td>1939</td>\n <td>True</td>\n </tr>\n </tbody>\n</table>\n</div>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [38]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">actors</span><span class=\"o\">.</span><span class=\"n\">iloc</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">0</span><span class=\"p\">]</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[38]:</div>\n\n\n\n\n<div class=\"output_text output_subarea output_execute_result\">\n<pre>'Terry'</pre>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Protože <code>iloc</code> pracuje s čísly, záporná čísla a intervaly fungují jako ve standardním Pythonu:</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [39]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">actors</span><span class=\"o\">.</span><span class=\"n\">iloc</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">]</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[39]:</div>\n\n\n\n\n<div class=\"output_text output_subarea output_execute_result\">\n<pre>1939</pre>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [40]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">actors</span><span class=\"o\">.</span><span class=\"n\">iloc</span><span class=\"p\">[:,</span> <span class=\"mi\">0</span><span class=\"p\">:</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[40]:</div>\n\n\n\n<div class=\"output_html rendered_html output_subarea output_execute_result\">\n<div>\n<style>.lesson-content .dataframe thead tr:only-child th {\n text-align: right\n }\n.lesson-content .dataframe thead th {\n text-align: left\n }\n.lesson-content .dataframe tbody tr th {\n vertical-align: top\n }</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>name</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>Terry</td>\n </tr>\n <tr>\n <th>1</th>\n <td>Michael</td>\n </tr>\n <tr>\n <th>2</th>\n <td>Eric</td>\n </tr>\n <tr>\n <th>3</th>\n <td>Graham</td>\n </tr>\n <tr>\n <th>4</th>\n <td>Terry</td>\n </tr>\n <tr>\n <th>5</th>\n <td>John</td>\n </tr>\n </tbody>\n</table>\n</div>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Indexování seznamem ale funguje jako u <code>loc</code>:</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [41]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">actors</span><span class=\"o\">.</span><span class=\"n\">iloc</span><span class=\"p\">[[</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">],</span> <span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">0</span><span class=\"p\">]]</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[41]:</div>\n\n\n\n<div class=\"output_html rendered_html output_subarea output_execute_result\">\n<div>\n<style>.lesson-content .dataframe thead tr:only-child th {\n text-align: right\n }\n.lesson-content .dataframe thead th {\n text-align: left\n }\n.lesson-content .dataframe tbody tr th {\n vertical-align: top\n }</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>alive</th>\n <th>birth</th>\n <th>name</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>True</td>\n <td>1942</td>\n <td>Terry</td>\n </tr>\n <tr>\n <th>5</th>\n <td>True</td>\n <td>1939</td>\n <td>John</td>\n </tr>\n <tr>\n <th>3</th>\n <td>False</td>\n <td>1941</td>\n <td>Graham</td>\n </tr>\n </tbody>\n</table>\n</div>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Jak <code>loc</code> tak <code>iloc</code> fungují i na sloupcích (Series), takže se dají kombinovat:</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [42]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">actors</span><span class=\"o\">.</span><span class=\"n\">iloc</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">loc</span><span class=\"p\">[</span><span class=\"s1\">'name'</span><span class=\"p\">]</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[42]:</div>\n\n\n\n\n<div class=\"output_text output_subarea output_execute_result\">\n<pre>'John'</pre>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<h2>Indexy</h2>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>V minulé sekci jsme naťukli indexy – jména jednotlivých sloupců nebo řádků. Teď se podívejme, co všechno s nimi lze dělat.\nNačtěte si znovu stejnou tabulku:</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [43]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">actors</span> <span class=\"o\">=</span> <span class=\"n\">pandas</span><span class=\"o\">.</span><span class=\"n\">read_csv</span><span class=\"p\">(</span><span class=\"s1\">'static/actors.csv'</span><span class=\"p\">,</span> <span class=\"n\">index_col</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n<span class=\"n\">actors</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[43]:</div>\n\n\n\n<div class=\"output_html rendered_html output_subarea output_execute_result\">\n<div>\n<style>.lesson-content .dataframe thead tr:only-child th {\n text-align: right\n }\n.lesson-content .dataframe thead th {\n text-align: left\n }\n.lesson-content .dataframe tbody tr th {\n vertical-align: top\n }</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>name</th>\n <th>birth</th>\n <th>alive</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>Terry</td>\n <td>1942</td>\n <td>True</td>\n </tr>\n <tr>\n <th>1</th>\n <td>Michael</td>\n <td>1943</td>\n <td>True</td>\n </tr>\n <tr>\n <th>2</th>\n <td>Eric</td>\n <td>1943</td>\n <td>True</td>\n </tr>\n <tr>\n <th>3</th>\n <td>Graham</td>\n <td>1941</td>\n <td>False</td>\n </tr>\n <tr>\n <th>4</th>\n <td>Terry</td>\n <td>1940</td>\n <td>True</td>\n </tr>\n <tr>\n <th>5</th>\n <td>John</td>\n <td>1939</td>\n <td>True</td>\n </tr>\n </tbody>\n</table>\n</div>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Tato tabulka má dva klíče: jeden pro řádky, <code>index</code>, a druhý pro sloupce, který se jmenuje <code>columns</code>.</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [44]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">actors</span><span class=\"o\">.</span><span class=\"n\">index</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[44]:</div>\n\n\n\n\n<div class=\"output_text output_subarea output_execute_result\">\n<pre>RangeIndex(start=0, stop=6, step=1)</pre>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [45]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">actors</span><span class=\"o\">.</span><span class=\"n\">columns</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[45]:</div>\n\n\n\n\n<div class=\"output_text output_subarea output_execute_result\">\n<pre>Index(['name', 'birth', 'alive'], dtype='object')</pre>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Klíč se dá změnit tím, že do něj přiřadíme sloupec (nebo jinou sekvenci):</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [46]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">actors</span><span class=\"o\">.</span><span class=\"n\">index</span> <span class=\"o\">=</span> <span class=\"n\">actors</span><span class=\"p\">[</span><span class=\"s1\">'name'</span><span class=\"p\">]</span>\n<span class=\"n\">actors</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[46]:</div>\n\n\n\n<div class=\"output_html rendered_html output_subarea output_execute_result\">\n<div>\n<style>.lesson-content .dataframe thead tr:only-child th {\n text-align: right\n }\n.lesson-content .dataframe thead th {\n text-align: left\n }\n.lesson-content .dataframe tbody tr th {\n vertical-align: top\n }</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>name</th>\n <th>birth</th>\n <th>alive</th>\n </tr>\n <tr>\n <th>name</th>\n <th></th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>Terry</th>\n <td>Terry</td>\n <td>1942</td>\n <td>True</td>\n </tr>\n <tr>\n <th>Michael</th>\n <td>Michael</td>\n <td>1943</td>\n <td>True</td>\n </tr>\n <tr>\n <th>Eric</th>\n <td>Eric</td>\n <td>1943</td>\n <td>True</td>\n </tr>\n <tr>\n <th>Graham</th>\n <td>Graham</td>\n <td>1941</td>\n <td>False</td>\n </tr>\n <tr>\n <th>Terry</th>\n <td>Terry</td>\n <td>1940</td>\n <td>True</td>\n </tr>\n <tr>\n <th>John</th>\n <td>John</td>\n <td>1939</td>\n <td>True</td>\n </tr>\n </tbody>\n</table>\n</div>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [47]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">actors</span><span class=\"o\">.</span><span class=\"n\">index</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[47]:</div>\n\n\n\n\n<div class=\"output_text output_subarea output_execute_result\">\n<pre>Index(['Terry', 'Michael', 'Eric', 'Graham', 'Terry', 'John'], dtype='object', name='name')</pre>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Potom jde pomocí tohoto klíče vyhledávat. Chceme-li vyhledávat efektivně (což dává smysl, pokud by řádků byly miliony), je dobré nejdřív tabulku podle indexu seřadit:</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [48]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">actors</span> <span class=\"o\">=</span> <span class=\"n\">actors</span><span class=\"o\">.</span><span class=\"n\">sort_index</span><span class=\"p\">()</span>\n<span class=\"n\">actors</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[48]:</div>\n\n\n\n<div class=\"output_html rendered_html output_subarea output_execute_result\">\n<div>\n<style>.lesson-content .dataframe thead tr:only-child th {\n text-align: right\n }\n.lesson-content .dataframe thead th {\n text-align: left\n }\n.lesson-content .dataframe tbody tr th {\n vertical-align: top\n }</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>name</th>\n <th>birth</th>\n <th>alive</th>\n </tr>\n <tr>\n <th>name</th>\n <th></th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>Eric</th>\n <td>Eric</td>\n <td>1943</td>\n <td>True</td>\n </tr>\n <tr>\n <th>Graham</th>\n <td>Graham</td>\n <td>1941</td>\n <td>False</td>\n </tr>\n <tr>\n <th>John</th>\n <td>John</td>\n <td>1939</td>\n <td>True</td>\n </tr>\n <tr>\n <th>Michael</th>\n <td>Michael</td>\n <td>1943</td>\n <td>True</td>\n </tr>\n <tr>\n <th>Terry</th>\n <td>Terry</td>\n <td>1942</td>\n <td>True</td>\n </tr>\n <tr>\n <th>Terry</th>\n <td>Terry</td>\n <td>1940</td>\n <td>True</td>\n </tr>\n </tbody>\n</table>\n</div>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [49]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">actors</span><span class=\"o\">.</span><span class=\"n\">loc</span><span class=\"p\">[[</span><span class=\"s1\">'Eric'</span><span class=\"p\">,</span> <span class=\"s1\">'Graham'</span><span class=\"p\">]]</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[49]:</div>\n\n\n\n<div class=\"output_html rendered_html output_subarea output_execute_result\">\n<div>\n<style>.lesson-content .dataframe thead tr:only-child th {\n text-align: right\n }\n.lesson-content .dataframe thead th {\n text-align: left\n }\n.lesson-content .dataframe tbody tr th {\n vertical-align: top\n }</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>name</th>\n <th>birth</th>\n <th>alive</th>\n </tr>\n <tr>\n <th>name</th>\n <th></th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>Eric</th>\n <td>Eric</td>\n <td>1943</td>\n <td>True</td>\n </tr>\n <tr>\n <th>Graham</th>\n <td>Graham</td>\n <td>1941</td>\n <td>False</td>\n </tr>\n </tbody>\n</table>\n</div>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Pozor ale na situaci, kdy hodnoty v klíči nejsou unikátní. To Pandas podporuje, ale chování nemusí být podle vašich představ:</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [50]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">actors</span><span class=\"o\">.</span><span class=\"n\">loc</span><span class=\"p\">[</span><span class=\"s1\">'Terry'</span><span class=\"p\">]</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[50]:</div>\n\n\n\n<div class=\"output_html rendered_html output_subarea output_execute_result\">\n<div>\n<style>.lesson-content .dataframe thead tr:only-child th {\n text-align: right\n }\n.lesson-content .dataframe thead th {\n text-align: left\n }\n.lesson-content .dataframe tbody tr th {\n vertical-align: top\n }</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>name</th>\n <th>birth</th>\n <th>alive</th>\n </tr>\n <tr>\n <th>name</th>\n <th></th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>Terry</th>\n <td>Terry</td>\n <td>1942</td>\n <td>True</td>\n </tr>\n <tr>\n <th>Terry</th>\n <td>Terry</td>\n <td>1940</td>\n <td>True</td>\n </tr>\n </tbody>\n</table>\n</div>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Trochu pokročilejší možnost, jak klíč nastavit, je metoda <code>set_index</code>. Nejčastěji se používá k přesunutí sloupců do klíče, ale v <a href=\"http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.set_index.html\">dokumentaci</a> se dočtete i o dalších možnostech.\nPřesuňte teď do klíče dva sloupce najednou:</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [51]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">indexed_actors</span> <span class=\"o\">=</span> <span class=\"n\">actors</span><span class=\"o\">.</span><span class=\"n\">set_index</span><span class=\"p\">([</span><span class=\"s1\">'name'</span><span class=\"p\">,</span> <span class=\"s1\">'birth'</span><span class=\"p\">])</span>\n<span class=\"n\">indexed_actors</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[51]:</div>\n\n\n\n<div class=\"output_html rendered_html output_subarea output_execute_result\">\n<div>\n<style>.lesson-content .dataframe thead tr:only-child th {\n text-align: right\n }\n.lesson-content .dataframe thead th {\n text-align: left\n }\n.lesson-content .dataframe tbody tr th {\n vertical-align: top\n }</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th></th>\n <th>alive</th>\n </tr>\n <tr>\n <th>name</th>\n <th>birth</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>Eric</th>\n <th>1943</th>\n <td>True</td>\n </tr>\n <tr>\n <th>Graham</th>\n <th>1941</th>\n <td>False</td>\n </tr>\n <tr>\n <th>John</th>\n <th>1939</th>\n <td>True</td>\n </tr>\n <tr>\n <th>Michael</th>\n <th>1943</th>\n <td>True</td>\n </tr>\n <tr>\n <th rowspan=\"2\" valign=\"top\">Terry</th>\n <th>1942</th>\n <td>True</td>\n </tr>\n <tr>\n <th>1940</th>\n <td>True</td>\n </tr>\n </tbody>\n</table>\n</div>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Vznikl tím víceúrovňový klíč:</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [52]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">indexed_actors</span><span class=\"o\">.</span><span class=\"n\">index</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[52]:</div>\n\n\n\n\n<div class=\"output_text output_subarea output_execute_result\">\n<pre>MultiIndex(levels=[['Eric', 'Graham', 'John', 'Michael', 'Terry'], [1939, 1940, 1941, 1942, 1943]],\n labels=[[0, 1, 2, 3, 4, 4], [4, 2, 0, 4, 3, 1]],\n names=['name', 'birth'])</pre>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Řádky z tabulky s víceúrovňovým klíčem se dají vybírat buď postupně po jednotlivých úrovních, nebo <em>n</em>-ticí:</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [53]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">indexed_actors</span><span class=\"o\">.</span><span class=\"n\">loc</span><span class=\"p\">[</span><span class=\"s1\">'Terry'</span><span class=\"p\">]</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[53]:</div>\n\n\n\n<div class=\"output_html rendered_html output_subarea output_execute_result\">\n<div>\n<style>.lesson-content .dataframe thead tr:only-child th {\n text-align: right\n }\n.lesson-content .dataframe thead th {\n text-align: left\n }\n.lesson-content .dataframe tbody tr th {\n vertical-align: top\n }</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>alive</th>\n </tr>\n <tr>\n <th>birth</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>1942</th>\n <td>True</td>\n </tr>\n <tr>\n <th>1940</th>\n <td>True</td>\n </tr>\n </tbody>\n</table>\n</div>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [54]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">indexed_actors</span><span class=\"o\">.</span><span class=\"n\">loc</span><span class=\"p\">[</span><span class=\"s1\">'Terry'</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">loc</span><span class=\"p\">[</span><span class=\"mi\">1940</span><span class=\"p\">]</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[54]:</div>\n\n\n\n\n<div class=\"output_text output_subarea output_execute_result\">\n<pre>alive True\nName: 1940, dtype: bool</pre>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [55]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">indexed_actors</span><span class=\"o\">.</span><span class=\"n\">loc</span><span class=\"p\">[(</span><span class=\"s1\">'Terry'</span><span class=\"p\">,</span> <span class=\"mi\">1942</span><span class=\"p\">)]</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[55]:</div>\n\n\n\n\n<div class=\"output_text output_subarea output_execute_result\">\n<pre>alive True\nName: (Terry, 1942), dtype: bool</pre>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Kromě výběru dat mají klíče i jinou vlastnost: přidáme-li do tabulky nový sloupec s klíčem, jednotlivé řádky se seřadí podle něj:</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [56]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">indexed_actors</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[56]:</div>\n\n\n\n<div class=\"output_html rendered_html output_subarea output_execute_result\">\n<div>\n<style>.lesson-content .dataframe thead tr:only-child th {\n text-align: right\n }\n.lesson-content .dataframe thead th {\n text-align: left\n }\n.lesson-content .dataframe tbody tr th {\n vertical-align: top\n }</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th></th>\n <th>alive</th>\n </tr>\n <tr>\n <th>name</th>\n <th>birth</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>Eric</th>\n <th>1943</th>\n <td>True</td>\n </tr>\n <tr>\n <th>Graham</th>\n <th>1941</th>\n <td>False</td>\n </tr>\n <tr>\n <th>John</th>\n <th>1939</th>\n <td>True</td>\n </tr>\n <tr>\n <th>Michael</th>\n <th>1943</th>\n <td>True</td>\n </tr>\n <tr>\n <th rowspan=\"2\" valign=\"top\">Terry</th>\n <th>1942</th>\n <td>True</td>\n </tr>\n <tr>\n <th>1940</th>\n <td>True</td>\n </tr>\n </tbody>\n</table>\n</div>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [57]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">last_names</span> <span class=\"o\">=</span> <span class=\"n\">pandas</span><span class=\"o\">.</span><span class=\"n\">Series</span><span class=\"p\">([</span><span class=\"s1\">'Gilliam'</span><span class=\"p\">,</span> <span class=\"s1\">'Jones'</span><span class=\"p\">,</span> <span class=\"s1\">'Cleveland'</span><span class=\"p\">],</span>\n <span class=\"n\">index</span><span class=\"o\">=</span><span class=\"p\">[(</span><span class=\"s1\">'Terry'</span><span class=\"p\">,</span> <span class=\"mi\">1940</span><span class=\"p\">),</span> <span class=\"p\">(</span><span class=\"s1\">'Terry'</span><span class=\"p\">,</span> <span class=\"mi\">1942</span><span class=\"p\">),</span> <span class=\"p\">(</span><span class=\"s1\">'Carol'</span><span class=\"p\">,</span> <span class=\"mi\">1942</span><span class=\"p\">)])</span>\n<span class=\"n\">last_names</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[57]:</div>\n\n\n\n\n<div class=\"output_text output_subarea output_execute_result\">\n<pre>(Terry, 1940) Gilliam\n(Terry, 1942) Jones\n(Carol, 1942) Cleveland\ndtype: object</pre>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [58]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">indexed_actors</span><span class=\"p\">[</span><span class=\"s1\">'last_name'</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">last_names</span>\n<span class=\"n\">indexed_actors</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[58]:</div>\n\n\n\n<div class=\"output_html rendered_html output_subarea output_execute_result\">\n<div>\n<style>.lesson-content .dataframe thead tr:only-child th {\n text-align: right\n }\n.lesson-content .dataframe thead th {\n text-align: left\n }\n.lesson-content .dataframe tbody tr th {\n vertical-align: top\n }</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th></th>\n <th>alive</th>\n <th>last_name</th>\n </tr>\n <tr>\n <th>name</th>\n <th>birth</th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>Eric</th>\n <th>1943</th>\n <td>True</td>\n <td>NaN</td>\n </tr>\n <tr>\n <th>Graham</th>\n <th>1941</th>\n <td>False</td>\n <td>NaN</td>\n </tr>\n <tr>\n <th>John</th>\n <th>1939</th>\n <td>True</td>\n <td>NaN</td>\n </tr>\n <tr>\n <th>Michael</th>\n <th>1943</th>\n <td>True</td>\n <td>NaN</td>\n </tr>\n <tr>\n <th rowspan=\"2\" valign=\"top\">Terry</th>\n <th>1942</th>\n <td>True</td>\n <td>Jones</td>\n </tr>\n <tr>\n <th>1940</th>\n <td>True</td>\n <td>Gilliam</td>\n </tr>\n </tbody>\n</table>\n</div>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<h2>NaN neboli NULL či N/A</h2>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>V posledním příkladu vidíme, že Pandas doplňuje za neznámé hodnoty <code>NaN</code>, tedy "Not a Number" – hodnotu, která plní podobnou funkci jako <code>NULL</code> v SQL nebo <code>None</code> v Pythonu. Znamená, že daná informace chybí, není k dispozici nebo ani nedává smysl ji mít. Naprostá většina operací s <code>NaN</code> dává opět <code>NaN</code>:</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [59]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"s1\">'('</span> <span class=\"o\">+</span> <span class=\"n\">indexed_actors</span><span class=\"p\">[</span><span class=\"s1\">'last_name'</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">')'</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[59]:</div>\n\n\n\n\n<div class=\"output_text output_subarea output_execute_result\">\n<pre>name birth\nEric 1943 NaN\nGraham 1941 NaN\nJohn 1939 NaN\nMichael 1943 NaN\nTerry 1942 (Jones)\n 1940 (Gilliam)\nName: last_name, dtype: object</pre>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>NaN se chová divně i při porovnávání; <code>(NaN == NaN)</code> je nepravda. Pro zjištění chybějících hodnot máme metodu <code>isnull()</code>:</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [60]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">indexed_actors</span><span class=\"p\">[</span><span class=\"s1\">'last_name'</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">isnull</span><span class=\"p\">()</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[60]:</div>\n\n\n\n\n<div class=\"output_text output_subarea output_execute_result\">\n<pre>name birth\nEric 1943 True\nGraham 1941 True\nJohn 1939 True\nMichael 1943 True\nTerry 1942 False\n 1940 False\nName: last_name, dtype: bool</pre>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Abychom se <code>NaN</code> zbavili, máme dvě možnosti. Buď je zaplníme pomocí metody <a href=\"http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.fillna.html\"><code>fillna</code></a> hodnotou jako <code>0</code>, <code>False</code> nebo, pro přehlednější výpis, prázdným řetězcem:</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [61]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">indexed_actors</span><span class=\"o\">.</span><span class=\"n\">fillna</span><span class=\"p\">(</span><span class=\"s1\">''</span><span class=\"p\">)</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[61]:</div>\n\n\n\n<div class=\"output_html rendered_html output_subarea output_execute_result\">\n<div>\n<style>.lesson-content .dataframe thead tr:only-child th {\n text-align: right\n }\n.lesson-content .dataframe thead th {\n text-align: left\n }\n.lesson-content .dataframe tbody tr th {\n vertical-align: top\n }</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th></th>\n <th>alive</th>\n <th>last_name</th>\n </tr>\n <tr>\n <th>name</th>\n <th>birth</th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>Eric</th>\n <th>1943</th>\n <td>True</td>\n <td></td>\n </tr>\n <tr>\n <th>Graham</th>\n <th>1941</th>\n <td>False</td>\n <td></td>\n </tr>\n <tr>\n <th>John</th>\n <th>1939</th>\n <td>True</td>\n <td></td>\n </tr>\n <tr>\n <th>Michael</th>\n <th>1943</th>\n <td>True</td>\n <td></td>\n </tr>\n <tr>\n <th rowspan=\"2\" valign=\"top\">Terry</th>\n <th>1942</th>\n <td>True</td>\n <td>Jones</td>\n </tr>\n <tr>\n <th>1940</th>\n <td>True</td>\n <td>Gilliam</td>\n </tr>\n </tbody>\n</table>\n</div>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Nebo se můžeme zbavit všech řádků, které nějaký <code>NaN</code> obsahují:</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [62]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">indexed_actors</span><span class=\"o\">.</span><span class=\"n\">dropna</span><span class=\"p\">()</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[62]:</div>\n\n\n\n<div class=\"output_html rendered_html output_subarea output_execute_result\">\n<div>\n<style>.lesson-content .dataframe thead tr:only-child th {\n text-align: right\n }\n.lesson-content .dataframe thead th {\n text-align: left\n }\n.lesson-content .dataframe tbody tr th {\n vertical-align: top\n }</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th></th>\n <th>alive</th>\n <th>last_name</th>\n </tr>\n <tr>\n <th>name</th>\n <th>birth</th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th rowspan=\"2\" valign=\"top\">Terry</th>\n <th>1942</th>\n <td>True</td>\n <td>Jones</td>\n </tr>\n <tr>\n <th>1940</th>\n <td>True</td>\n <td>Gilliam</td>\n </tr>\n </tbody>\n</table>\n</div>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Bohužel existuje jistá nekonzistence mezi <code>NaN</code> a slovy <code>null</code> či <code>na</code> v názvech funkcí. <em>C'est la vie.</em></p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<h2>Merge</h2>\n<p>Někdy se stane, že máme více souvisejících tabulek, které je potřeba spojit dohromady. Na to mají <code>DataFrame</code> metodu <code>merge()</code>, která umí podobné operace jako <code>JOIN</code> v SQL.</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [63]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">actors</span> <span class=\"o\">=</span> <span class=\"n\">pandas</span><span class=\"o\">.</span><span class=\"n\">read_csv</span><span class=\"p\">(</span><span class=\"s1\">'static/actors.csv'</span><span class=\"p\">,</span> <span class=\"n\">index_col</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n<span class=\"n\">actors</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[63]:</div>\n\n\n\n<div class=\"output_html rendered_html output_subarea output_execute_result\">\n<div>\n<style>.lesson-content .dataframe thead tr:only-child th {\n text-align: right\n }\n.lesson-content .dataframe thead th {\n text-align: left\n }\n.lesson-content .dataframe tbody tr th {\n vertical-align: top\n }</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>name</th>\n <th>birth</th>\n <th>alive</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>Terry</td>\n <td>1942</td>\n <td>True</td>\n </tr>\n <tr>\n <th>1</th>\n <td>Michael</td>\n <td>1943</td>\n <td>True</td>\n </tr>\n <tr>\n <th>2</th>\n <td>Eric</td>\n <td>1943</td>\n <td>True</td>\n </tr>\n <tr>\n <th>3</th>\n <td>Graham</td>\n <td>1941</td>\n <td>False</td>\n </tr>\n <tr>\n <th>4</th>\n <td>Terry</td>\n <td>1940</td>\n <td>True</td>\n </tr>\n <tr>\n <th>5</th>\n <td>John</td>\n <td>1939</td>\n <td>True</td>\n </tr>\n </tbody>\n</table>\n</div>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [64]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">spouses</span> <span class=\"o\">=</span> <span class=\"n\">pandas</span><span class=\"o\">.</span><span class=\"n\">read_csv</span><span class=\"p\">(</span><span class=\"s1\">'static/spouses.csv'</span><span class=\"p\">,</span> <span class=\"n\">index_col</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n<span class=\"n\">spouses</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[64]:</div>\n\n\n\n<div class=\"output_html rendered_html output_subarea output_execute_result\">\n<div>\n<style>.lesson-content .dataframe thead tr:only-child th {\n text-align: right\n }\n.lesson-content .dataframe thead th {\n text-align: left\n }\n.lesson-content .dataframe tbody tr th {\n vertical-align: top\n }</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>name</th>\n <th>birth</th>\n <th>spouse_name</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>Graham</td>\n <td>1941</td>\n <td>David Sherlock</td>\n </tr>\n <tr>\n <th>1</th>\n <td>John</td>\n <td>1939</td>\n <td>Connie Booth</td>\n </tr>\n <tr>\n <th>2</th>\n <td>John</td>\n <td>1939</td>\n <td>Barbara Trentham</td>\n </tr>\n <tr>\n <th>3</th>\n <td>John</td>\n <td>1939</td>\n <td>Alyce Eichelberger</td>\n </tr>\n <tr>\n <th>4</th>\n <td>John</td>\n <td>1939</td>\n <td>Jennifer Wade</td>\n </tr>\n <tr>\n <th>5</th>\n <td>Terry</td>\n <td>1940</td>\n <td>Maggie Westo</td>\n </tr>\n <tr>\n <th>6</th>\n <td>Eric</td>\n <td>1943</td>\n <td>Lyn Ashley</td>\n </tr>\n <tr>\n <th>7</th>\n <td>Eric</td>\n <td>1943</td>\n <td>Tania Kosevich</td>\n </tr>\n <tr>\n <th>8</th>\n <td>Terry</td>\n <td>1942</td>\n <td>Alison Telfer</td>\n </tr>\n <tr>\n <th>9</th>\n <td>Terry</td>\n <td>1942</td>\n <td>Anna Söderström</td>\n </tr>\n <tr>\n <th>10</th>\n <td>Michael</td>\n <td>1943</td>\n <td>Helen Gibbins</td>\n </tr>\n </tbody>\n</table>\n</div>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [65]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">actors</span><span class=\"o\">.</span><span class=\"n\">merge</span><span class=\"p\">(</span><span class=\"n\">spouses</span><span class=\"p\">)</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[65]:</div>\n\n\n\n<div class=\"output_html rendered_html output_subarea output_execute_result\">\n<div>\n<style>.lesson-content .dataframe thead tr:only-child th {\n text-align: right\n }\n.lesson-content .dataframe thead th {\n text-align: left\n }\n.lesson-content .dataframe tbody tr th {\n vertical-align: top\n }</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>name</th>\n <th>birth</th>\n <th>alive</th>\n <th>spouse_name</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>Terry</td>\n <td>1942</td>\n <td>True</td>\n <td>Alison Telfer</td>\n </tr>\n <tr>\n <th>1</th>\n <td>Terry</td>\n <td>1942</td>\n <td>True</td>\n <td>Anna Söderström</td>\n </tr>\n <tr>\n <th>2</th>\n <td>Michael</td>\n <td>1943</td>\n <td>True</td>\n <td>Helen Gibbins</td>\n </tr>\n <tr>\n <th>3</th>\n <td>Eric</td>\n <td>1943</td>\n <td>True</td>\n <td>Lyn Ashley</td>\n </tr>\n <tr>\n <th>4</th>\n <td>Eric</td>\n <td>1943</td>\n <td>True</td>\n <td>Tania Kosevich</td>\n </tr>\n <tr>\n <th>5</th>\n <td>Graham</td>\n <td>1941</td>\n <td>False</td>\n <td>David Sherlock</td>\n </tr>\n <tr>\n <th>6</th>\n <td>Terry</td>\n <td>1940</td>\n <td>True</td>\n <td>Maggie Westo</td>\n </tr>\n <tr>\n <th>7</th>\n <td>John</td>\n <td>1939</td>\n <td>True</td>\n <td>Connie Booth</td>\n </tr>\n <tr>\n <th>8</th>\n <td>John</td>\n <td>1939</td>\n <td>True</td>\n <td>Barbara Trentham</td>\n </tr>\n <tr>\n <th>9</th>\n <td>John</td>\n <td>1939</td>\n <td>True</td>\n <td>Alyce Eichelberger</td>\n </tr>\n <tr>\n <th>10</th>\n <td>John</td>\n <td>1939</td>\n <td>True</td>\n <td>Jennifer Wade</td>\n </tr>\n </tbody>\n</table>\n</div>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Mají-li spojované tabulky sloupce stejných jmen, Pandas je spojí podle těchto sloupců. V <a href=\"http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.merge.html\">dokumentaci</a> se dá zjistit, jak explicitně určit podle kterých klíčů spojovat, co udělat když v jedné z tabulek chybí odpovídající hodnoty apod.</p>\n<p>Fanoušky SQL ještě odkážu na <a href=\"http://pandas.pydata.org/pandas-docs/stable/comparison_with_sql.html\">porovnání mezi SQL a Pandas</a>.</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<h2>Přesýpání dat</h2>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Dostáváme se do bodu, kdy nám jednoduchá tabulka přestává stačit. Pojďme si vytvořit tabulku větší: fiktivních prodejů v e-shopu, ve formátu jaký bychom mohli dostat z SQL databáze nebo datového souboru.</p>\n<p>Použijeme k tomu mimo jiné <code>date_range</code>, která vytváří kalendářní intervaly. Zde, i v jiných případech, kdy je jasné, že se má nějaká hodnota interpretovat jako datum, nám Pandas dovolí místo objektů <code>datetime</code> zadávat data řetězcem:</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [66]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">itertools</span>\n<span class=\"kn\">import</span> <span class=\"nn\">random</span>\n<span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">seed</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n\n<span class=\"n\">months</span> <span class=\"o\">=</span> <span class=\"n\">pandas</span><span class=\"o\">.</span><span class=\"n\">date_range</span><span class=\"p\">(</span><span class=\"s1\">'2015-01'</span><span class=\"p\">,</span> <span class=\"s1\">'2016-12'</span><span class=\"p\">,</span> <span class=\"n\">freq</span><span class=\"o\">=</span><span class=\"s1\">'M'</span><span class=\"p\">)</span>\n<span class=\"n\">categories</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">'Electronics'</span><span class=\"p\">,</span> <span class=\"s1\">'Power Tools'</span><span class=\"p\">,</span> <span class=\"s1\">'Clothing'</span><span class=\"p\">]</span>\n<span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"n\">pandas</span><span class=\"o\">.</span><span class=\"n\">DataFrame</span><span class=\"p\">([{</span><span class=\"s1\">'month'</span><span class=\"p\">:</span> <span class=\"n\">a</span><span class=\"p\">,</span> <span class=\"s1\">'category'</span><span class=\"p\">:</span> <span class=\"n\">b</span><span class=\"p\">,</span> <span class=\"s1\">'sales'</span><span class=\"p\">:</span> <span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">randint</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1000</span><span class=\"p\">,</span> <span class=\"mi\">10000</span><span class=\"p\">)}</span>\n <span class=\"k\">for</span> <span class=\"n\">a</span><span class=\"p\">,</span> <span class=\"n\">b</span> <span class=\"ow\">in</span> <span class=\"n\">itertools</span><span class=\"o\">.</span><span class=\"n\">product</span><span class=\"p\">(</span><span class=\"n\">months</span><span class=\"p\">,</span> <span class=\"n\">categories</span><span class=\"p\">)</span>\n <span class=\"k\">if</span> <span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">randrange</span><span class=\"p\">(</span><span class=\"mi\">20</span><span class=\"p\">)</span> <span class=\"o\">></span> <span class=\"mi\">0</span><span class=\"p\">])</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Tabulka je celkem dlouhá (i když v analýze dat bývají ještě delší). Podívejme se na několik obecných informací:</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [67]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"c1\"># Prvních pár řádků (dá se použít i např. head(10), bylo by jich víc)</span>\n<span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">head</span><span class=\"p\">()</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[67]:</div>\n\n\n\n<div class=\"output_html rendered_html output_subarea output_execute_result\">\n<div>\n<style>.lesson-content .dataframe thead tr:only-child th {\n text-align: right\n }\n.lesson-content .dataframe thead th {\n text-align: left\n }\n.lesson-content .dataframe tbody tr th {\n vertical-align: top\n }</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>category</th>\n <th>month</th>\n <th>sales</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>Electronics</td>\n <td>2015-01-31</td>\n <td>5890</td>\n </tr>\n <tr>\n <th>1</th>\n <td>Power Tools</td>\n <td>2015-01-31</td>\n <td>3242</td>\n </tr>\n <tr>\n <th>2</th>\n <td>Clothing</td>\n <td>2015-01-31</td>\n <td>6961</td>\n </tr>\n <tr>\n <th>3</th>\n <td>Electronics</td>\n <td>2015-02-28</td>\n <td>3969</td>\n </tr>\n <tr>\n <th>4</th>\n <td>Power Tools</td>\n <td>2015-02-28</td>\n <td>4866</td>\n </tr>\n </tbody>\n</table>\n</div>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [68]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"c1\"># Celkový počet řádků</span>\n<span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">)</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[68]:</div>\n\n\n\n\n<div class=\"output_text output_subarea output_execute_result\">\n<pre>67</pre>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [69]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">data</span><span class=\"p\">[</span><span class=\"s1\">'sales'</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">describe</span><span class=\"p\">()</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[69]:</div>\n\n\n\n\n<div class=\"output_text output_subarea output_execute_result\">\n<pre>count 67.000000\nmean 4795.552239\nstd 3101.026552\nmin -735.000000\n25% 2089.000000\n50% 4448.000000\n75% 7874.000000\nmax 9817.000000\nName: sales, dtype: float64</pre>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Pomocí <code>set_index</code> nastavíme, které sloupce budeme brát jako hlavičky:</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [70]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">indexed</span> <span class=\"o\">=</span> <span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">set_index</span><span class=\"p\">([</span><span class=\"s1\">'category'</span><span class=\"p\">,</span> <span class=\"s1\">'month'</span><span class=\"p\">])</span>\n<span class=\"n\">indexed</span><span class=\"o\">.</span><span class=\"n\">head</span><span class=\"p\">()</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[70]:</div>\n\n\n\n<div class=\"output_html rendered_html output_subarea output_execute_result\">\n<div>\n<style>.lesson-content .dataframe thead tr:only-child th {\n text-align: right\n }\n.lesson-content .dataframe thead th {\n text-align: left\n }\n.lesson-content .dataframe tbody tr th {\n vertical-align: top\n }</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th></th>\n <th>sales</th>\n </tr>\n <tr>\n <th>category</th>\n <th>month</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>Electronics</th>\n <th>2015-01-31</th>\n <td>5890</td>\n </tr>\n <tr>\n <th>Power Tools</th>\n <th>2015-01-31</th>\n <td>3242</td>\n </tr>\n <tr>\n <th>Clothing</th>\n <th>2015-01-31</th>\n <td>6961</td>\n </tr>\n <tr>\n <th>Electronics</th>\n <th>2015-02-28</th>\n <td>3969</td>\n </tr>\n <tr>\n <th>Power Tools</th>\n <th>2015-02-28</th>\n <td>4866</td>\n </tr>\n </tbody>\n</table>\n</div>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Budeme-li chtít z těchto dat vytvořit tabulku, která má v řádcích kategorie a ve sloupcích měsíce, můžeme využít metodu <code>unstack</code>, která "přesune" vnitřní úroveň indexu řádků do sloupců a uspořádá podle toho i data.</p>\n<p>Můžeme samozřejmě použít kteroukoli úroveň klíče; viz <a href=\"http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.unstack.html\">dokumentace</a> k <code>unstack</code> a reverzní operaci <a href=\"http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.stack.html\"><code>stack</code></a>.</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [71]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">unstacked</span> <span class=\"o\">=</span> <span class=\"n\">indexed</span><span class=\"o\">.</span><span class=\"n\">unstack</span><span class=\"p\">(</span><span class=\"s1\">'month'</span><span class=\"p\">)</span>\n<span class=\"n\">unstacked</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[71]:</div>\n\n\n\n<div class=\"output_html rendered_html output_subarea output_execute_result\">\n<div>\n<style>.lesson-content .dataframe thead tr:only-child th {\n text-align: right\n }\n.lesson-content .dataframe thead th {\n text-align: left\n }\n.lesson-content .dataframe tbody tr th {\n vertical-align: top\n }</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr>\n <th></th>\n <th colspan=\"21\" halign=\"left\">sales</th>\n </tr>\n <tr>\n <th>month</th>\n <th>2015-01-31</th>\n <th>2015-02-28</th>\n <th>2015-03-31</th>\n <th>2015-04-30</th>\n <th>2015-05-31</th>\n <th>2015-06-30</th>\n <th>2015-07-31</th>\n <th>2015-08-31</th>\n <th>2015-09-30</th>\n <th>2015-10-31</th>\n <th>...</th>\n <th>2016-02-29</th>\n <th>2016-03-31</th>\n <th>2016-04-30</th>\n <th>2016-05-31</th>\n <th>2016-06-30</th>\n <th>2016-07-31</th>\n <th>2016-08-31</th>\n <th>2016-09-30</th>\n <th>2016-10-31</th>\n <th>2016-11-30</th>\n </tr>\n <tr>\n <th>category</th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>Clothing</th>\n <td>6961.0</td>\n <td>2578.0</td>\n <td>9131.0</td>\n <td>618.0</td>\n <td>4796.0</td>\n <td>8052.0</td>\n <td>7989.0</td>\n <td>NaN</td>\n <td>31.0</td>\n <td>7896.0</td>\n <td>...</td>\n <td>4194.0</td>\n <td>2059.0</td>\n <td>471.0</td>\n <td>5410.0</td>\n <td>8663.0</td>\n <td>9817.0</td>\n <td>6969.0</td>\n <td>-735.0</td>\n <td>4448.0</td>\n <td>-259.0</td>\n </tr>\n <tr>\n <th>Electronics</th>\n <td>5890.0</td>\n <td>3969.0</td>\n <td>1281.0</td>\n <td>7725.0</td>\n <td>4409.0</td>\n <td>4180.0</td>\n <td>6253.0</td>\n <td>NaN</td>\n <td>7086.0</td>\n <td>8298.0</td>\n <td>...</td>\n <td>6290.0</td>\n <td>2966.0</td>\n <td>9039.0</td>\n <td>1450.0</td>\n <td>3515.0</td>\n <td>8497.0</td>\n <td>349.0</td>\n <td>9324.0</td>\n <td>919.0</td>\n <td>18.0</td>\n </tr>\n <tr>\n <th>Power Tools</th>\n <td>3242.0</td>\n <td>4866.0</td>\n <td>1289.0</td>\n <td>1407.0</td>\n <td>8171.0</td>\n <td>9492.0</td>\n <td>3267.0</td>\n <td>5534.0</td>\n <td>2996.0</td>\n <td>2909.0</td>\n <td>...</td>\n <td>8769.0</td>\n <td>2012.0</td>\n <td>6807.0</td>\n <td>314.0</td>\n <td>2858.0</td>\n <td>6382.0</td>\n <td>9039.0</td>\n <td>2119.0</td>\n <td>5095.0</td>\n <td>1397.0</td>\n </tr>\n </tbody>\n</table>\n<p>3 rows × 23 columns</p>\n</div>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Teď je sloupcový klíč dvouúrovňový, ale úroveň <code>sales</code> je zbytečná. Můžeme se jí zbavit pomocí <a href=\"http://pandas.pydata.org/pandas-docs/version/0.18.0/generated/pandas.MultiIndex.droplevel.html\"><code>MultiIndex.droplevel</code></a>.</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [72]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">unstacked</span><span class=\"o\">.</span><span class=\"n\">columns</span> <span class=\"o\">=</span> <span class=\"n\">unstacked</span><span class=\"o\">.</span><span class=\"n\">columns</span><span class=\"o\">.</span><span class=\"n\">droplevel</span><span class=\"p\">()</span>\n<span class=\"n\">unstacked</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[72]:</div>\n\n\n\n<div class=\"output_html rendered_html output_subarea output_execute_result\">\n<div>\n<style>.lesson-content .dataframe thead tr:only-child th {\n text-align: right\n }\n.lesson-content .dataframe thead th {\n text-align: left\n }\n.lesson-content .dataframe tbody tr th {\n vertical-align: top\n }</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th>month</th>\n <th>2015-01-31 00:00:00</th>\n <th>2015-02-28 00:00:00</th>\n <th>2015-03-31 00:00:00</th>\n <th>2015-04-30 00:00:00</th>\n <th>2015-05-31 00:00:00</th>\n <th>2015-06-30 00:00:00</th>\n <th>2015-07-31 00:00:00</th>\n <th>2015-08-31 00:00:00</th>\n <th>2015-09-30 00:00:00</th>\n <th>2015-10-31 00:00:00</th>\n <th>...</th>\n <th>2016-02-29 00:00:00</th>\n <th>2016-03-31 00:00:00</th>\n <th>2016-04-30 00:00:00</th>\n <th>2016-05-31 00:00:00</th>\n <th>2016-06-30 00:00:00</th>\n <th>2016-07-31 00:00:00</th>\n <th>2016-08-31 00:00:00</th>\n <th>2016-09-30 00:00:00</th>\n <th>2016-10-31 00:00:00</th>\n <th>2016-11-30 00:00:00</th>\n </tr>\n <tr>\n <th>category</th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>Clothing</th>\n <td>6961.0</td>\n <td>2578.0</td>\n <td>9131.0</td>\n <td>618.0</td>\n <td>4796.0</td>\n <td>8052.0</td>\n <td>7989.0</td>\n <td>NaN</td>\n <td>31.0</td>\n <td>7896.0</td>\n <td>...</td>\n <td>4194.0</td>\n <td>2059.0</td>\n <td>471.0</td>\n <td>5410.0</td>\n <td>8663.0</td>\n <td>9817.0</td>\n <td>6969.0</td>\n <td>-735.0</td>\n <td>4448.0</td>\n <td>-259.0</td>\n </tr>\n <tr>\n <th>Electronics</th>\n <td>5890.0</td>\n <td>3969.0</td>\n <td>1281.0</td>\n <td>7725.0</td>\n <td>4409.0</td>\n <td>4180.0</td>\n <td>6253.0</td>\n <td>NaN</td>\n <td>7086.0</td>\n <td>8298.0</td>\n <td>...</td>\n <td>6290.0</td>\n <td>2966.0</td>\n <td>9039.0</td>\n <td>1450.0</td>\n <td>3515.0</td>\n <td>8497.0</td>\n <td>349.0</td>\n <td>9324.0</td>\n <td>919.0</td>\n <td>18.0</td>\n </tr>\n <tr>\n <th>Power Tools</th>\n <td>3242.0</td>\n <td>4866.0</td>\n <td>1289.0</td>\n <td>1407.0</td>\n <td>8171.0</td>\n <td>9492.0</td>\n <td>3267.0</td>\n <td>5534.0</td>\n <td>2996.0</td>\n <td>2909.0</td>\n <td>...</td>\n <td>8769.0</td>\n <td>2012.0</td>\n <td>6807.0</td>\n <td>314.0</td>\n <td>2858.0</td>\n <td>6382.0</td>\n <td>9039.0</td>\n <td>2119.0</td>\n <td>5095.0</td>\n <td>1397.0</td>\n </tr>\n </tbody>\n</table>\n<p>3 rows × 23 columns</p>\n</div>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>A teď můžeme data analyzovat. Kolik se celkem utratilo za elektroniku?</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [73]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">unstacked</span><span class=\"o\">.</span><span class=\"n\">loc</span><span class=\"p\">[</span><span class=\"s1\">'Electronics'</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">sum</span><span class=\"p\">()</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[73]:</div>\n\n\n\n\n<div class=\"output_text output_subarea output_execute_result\">\n<pre>103742.0</pre>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Jak to vypadalo se všemi elektrickými zařízeními v třech konkrétních měsících?</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [74]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">unstacked</span><span class=\"o\">.</span><span class=\"n\">loc</span><span class=\"p\">[[</span><span class=\"s1\">'Electronics'</span><span class=\"p\">,</span> <span class=\"s1\">'Power Tools'</span><span class=\"p\">],</span> <span class=\"s1\">'2016-03'</span><span class=\"p\">:</span><span class=\"s1\">'2016-05'</span><span class=\"p\">]</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[74]:</div>\n\n\n\n<div class=\"output_html rendered_html output_subarea output_execute_result\">\n<div>\n<style>.lesson-content .dataframe thead tr:only-child th {\n text-align: right\n }\n.lesson-content .dataframe thead th {\n text-align: left\n }\n.lesson-content .dataframe tbody tr th {\n vertical-align: top\n }</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th>month</th>\n <th>2016-03-31 00:00:00</th>\n <th>2016-04-30 00:00:00</th>\n <th>2016-05-31 00:00:00</th>\n </tr>\n <tr>\n <th>category</th>\n <th></th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>Electronics</th>\n <td>2966.0</td>\n <td>9039.0</td>\n <td>1450.0</td>\n </tr>\n <tr>\n <th>Power Tools</th>\n <td>2012.0</td>\n <td>6807.0</td>\n <td>314.0</td>\n </tr>\n </tbody>\n</table>\n</div>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>A jak se prodávalo oblečení?</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [75]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">unstacked</span><span class=\"o\">.</span><span class=\"n\">loc</span><span class=\"p\">[</span><span class=\"s1\">'Clothing'</span><span class=\"p\">]</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[75]:</div>\n\n\n\n\n<div class=\"output_text output_subarea output_execute_result\">\n<pre>month\n2015-01-31 6961.0\n2015-02-28 2578.0\n2015-03-31 9131.0\n2015-04-30 618.0\n2015-05-31 4796.0\n2015-06-30 8052.0\n2015-07-31 7989.0\n2015-08-31 NaN\n2015-09-30 31.0\n2015-10-31 7896.0\n2015-11-30 7016.0\n2015-12-31 7969.0\n2016-01-31 8627.0\n2016-02-29 4194.0\n2016-03-31 2059.0\n2016-04-30 471.0\n2016-05-31 5410.0\n2016-06-30 8663.0\n2016-07-31 9817.0\n2016-08-31 6969.0\n2016-09-30 -735.0\n2016-10-31 4448.0\n2016-11-30 -259.0\nName: Clothing, dtype: float64</pre>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Metody <code>stack</code> a <code>unstack</code> jsou sice asi nejužitečnější, ale stále jen jeden ze způsobů jak v Pandas tabulky přeskládávat. Náročnější studenti najdou další možnosti v <a href=\"http://pandas.pydata.org/pandas-docs/stable/reshaping.html\">dokumentaci</a>.</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<h2>Grafy</h2>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Je-li nainstalována knihovna <code>matplotlib</code>, Pandas ji umí využít k tomu, aby kreslil grafy. Nastavení je trochu jiné pro Jupyter Notebook a pro příkazovou řádku.</p>\n<p>Používáte-li Jupyter Notebook, zapněte integraci pro kreslení grafů pomocí:</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [76]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">matplotlib</span>\n\n<span class=\"c1\"># Zapnout zobrazování grafů (procento uvozuje „magickou” zkratku IPythonu):</span>\n<span class=\"o\">%</span><span class=\"k\">matplotlib</span> inline\n</pre></div>\n\n </div>\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>a pak můžete přímo použít metodu <code>plot()</code>, která bez dalších argumentů vynese data z tabulky proti indexu:</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [77]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">unstacked</span><span class=\"o\">.</span><span class=\"n\">loc</span><span class=\"p\">[</span><span class=\"s1\">'Clothing'</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">dropna</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">plot</span><span class=\"p\">()</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[77]:</div>\n\n\n\n\n<div class=\"output_text output_subarea output_execute_result\">\n<pre><matplotlib.axes._subplots.AxesSubplot at 0x7f4ab57c0470></pre>\n</div>\n\n</div>\n\n<div class=\"output_area\">\n\n <div class=\"prompt\"></div>\n\n\n\n\n<div class=\"output_png output_subarea \">\n<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAYcAAAEICAYAAAC0+DhzAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz%0AAAALEgAACxIB0t1+/AAAIABJREFUeJzsvXl8W+d15/09AEiAG0BwEUlQEilZsmWSsWNRluU4dtqk%0ATpRlaredtM5mx0mqTJOmnWbeNukyTd+maZu3nbbTLR3HdmKnaZw0zdY0tutJm1hxvGlxbIlaKFsk%0AJW7iBu4kSOB5/7j3UjDFBcu9WJ/v58MPgYsLnOcCFzj3ec7vnCNKKTQajUajiceV7QFoNBqNJvfQ%0AzkGj0Wg0V6Cdg0aj0WiuQDsHjUaj0VyBdg4ajUajuQLtHDQajUZzBdo5aDQajeYKtHPQaDQazRVo%0A56DRaDSaK/BkewCpUldXp1pbW7M9DI1Go8kbjh49OqqUqk9k37x1Dq2trRw5ciTbw9BoNJq8QUR6%0AE91XLytpNBqN5go2dQ4i8qCIXBKRE3HbakTkCRHpNv8Hze0iIn8tIudE5EUR2Rv3nHvM/btF5J64%0A7Z0i8pL5nL8WEbH7IDUajUaTHInMHL4IHFy17ZPA95VSu4Hvm/cB3grsNv8OAZ8Dw5kAnwJuAvYD%0An7IcirnPobjnrbal0Wg0mgyzqXNQSj0JjK/afAfwkHn7IeDOuO0PK4NngGoRaQLeAjyhlBpXSk0A%0ATwAHzcf8SqmnlVE7/OG419JoNBpNlkg15tCglBoEMP9vMbc3Axfi9rtobtto+8U1tq+JiBwSkSMi%0AcmRkZCTFoWs0Go1mM+wOSK8VL1ApbF8TpdR9Sql9Sql99fUJqbE0Go1GkwKpOodhc0kI8/8lc/tF%0AYFvcfluBgU22b11ju0aj0TjG5PwSz7wylu1h5DSpOofvAJbi6B7g23Hb7zZVSweASXPZ6XHgzSIS%0ANAPRbwYeNx+bFpEDpkrp7rjX0mg0GtuJLMf40EPPc9d9z9A9PJ3t4eQsmybBichXgJ8C6kTkIobq%0A6E+Br4nIB4E+4J3m7t8D3gacA+aAewGUUuMi8mngeXO/P1RKWUHuX8FQRJUBj5p/Go1G4wif+bcu%0Anu+ZAODRE0PsbqjK8ohyEzFEQvnHvn37lM6Q1mg0yfDPRy7wm19/kUO37eRo7wTzkSjf+/Vbsz2s%0AjCEiR5VS+xLZV2dIazSaouDFi2F+91snuGVXLb/1lmt4a0cjXYNT9I3NZXtoOYl2DhqNpuAZnVnk%0Av33pKPWVXv7mXXvxuF28pb0RgEdPDGZ5dLmJdg4ajaagWYrG+OiXjzE2G+H/vK+TmopSALbVlNPR%0A7Oexk0NZHmFuop2DRqMpaP7ke6d59vw4f/Lzr6GjOfCqxw62N3K8L8zg5HyWRpe7aOeg0WgKlm8e%0Av8iDT53n3lta+fm9W694/GBHEwCPn9Czh9Vo56DRaAqSE/2TfPJfXuKmHTX8ztuuXXOfXVsq2b2l%0AUi8trYF2DhqNpuAYn43w4S8dpaailL97z15K3Ov/1B3saOS58+OMzSxmcIS5j3YOGo2moFiOxvjY%0AV44xMrPIP7y3k7pK74b7H+xoJKbgia7hDI0wP9DOIUG+9vwF/uTRU9kehkaj2YT/7/EzPHVujM/c%0A2cH126o33b+tyc/2mnIe1XGHV6GdQ4J883g//3zk4uY7ajSarPGdnwxw35OvcPfNLbxz37bNnwCI%0ACAc7Gvnxy6NMzi85PML8QTuHBOkdm2V8NsLicjTbQ9FoNGvQNTDFb339J9zYGuT33t6W1HMPdjSy%0AFFX8x2m9tGShnUMCLCxFGZhcAODSlA5aaTS5Rnguwof/8QiBshL+7j17KfUk99P22q3VNPp9PPqS%0AXlqy0M4hAS6MX669Mjy1kMWRaDSa1URjio995TjDk4t87r2dbKnyJf0aLpfwlvYGfnh2hNnFZQdG%0AmX9o55AAvXGFuYa0c9Bocoo/e/wMh7tH+cM72tm7PZjy6xzsaGJxOcYPz+oWxKCdQ0L0jM2u3B6a%0A1M5Bo8kVvvviAP/ww5d5903buWv/9rRea/+OGmorSrVqyUQ7hwToHZvD7/Pg9bj0spJGkyOcHpri%0AN//5RfZur+ZT/yW5APRauF3C7W0N/MepYRaWtPBEO4cE6BmbZUddBQ1+H8M6IK1xiPHZCGeGdNvK%0ARFBK8av/dJxKn4fPvbcTr8dty+se7GhkNhLlqXOjtrxePqOdQwL0js3RUltBo9+nYw4aR/jPM5d4%0A81/+kJ/92x8xH9FXrZvRfWmGc5dm+I2fuZoGf/IB6PV43VV1VPk8emkJ7Rw2JbIc4+LEHC215TQE%0AfHpZSWMrC0tR/uA7J7n3C8+zFFUsLsc4PTSV7WHlPE+aQePbrq6z9XVLPS5+5toGnugaZikas/W1%0A8w3tHDahPzxPTGHOHLwMTS6Qr323NbnF2eFp7vy7p/jij3u45+YWvvGR1wFwYkA7h8043D3KzvoK%0AtgbLbX/tgx2NTM4v8ewr47a/dj7hyfYAch1LqdRaW054LsLicoyp+WUC5SVZHpkmX1FK8aVnevnM%0Av52i0uvhwffv4417GlBKUV1ewsn+yWwPMadZWIry7Pkx7roxPXXSerzh6nrKStw8emKQ1++2d2aS%0AT+iZwyb0jhrOoaW2YmVtU8cdNKkyNrPIhx46wu9/+yQHdtby6H+/lTfuaQCMGj8doQAn9cxhQ472%0ATrCwFONWh364fSVufnpPPY+fHCYaK95VAu0cNqFnbI6KUjd1laU0BrRz0KTOk2dHOPi/D3O4e5Tf%0Af0cbX3j/jVdk87aH/JwZmiayXNzr3RvxZPcIJW7hwM5ax2wc7GhidGaRY30TjtnIdbRz2ITesVla%0AaisQERrNmcOwToTTJMHicpRPf7eLux98juqyEr710Vv4wOt34HLJFfu2NweIRGN0X9KS1vU4fHaU%0AzpYgFV7nVsXfuGcLpW5XUddaSss5iMhviMhJETkhIl8REZ+I7BCRZ0WkW0S+KiKl5r5e8/458/HW%0AuNf5bXP7GRF5S3qHZC+9Y3O01hlBr/oqo2mIVixpEuXcpWnu/Lsf88CPzvO+Ay3868deT1vIv+7+%0AHeZjemlpbUamF+kanOLW3fWO2qn0erh1dx2PnxwqWgFKys5BRJqBXwP2KaU6ADdwF/BZ4C+VUruB%0ACeCD5lM+CEwopXYBf2nuh4i0mc9rBw4Cfy8i9mS0pEk0prgwYeQ4gLEWGSwv0ctKmk1RSvGPz/Ty%0Ajr/5EcNTC9x/9z4+fWcHvpKNT+3W2goqSt06KL0OVnLabQ47BzBUS/3heV4q0s8i3XmZBygTkSWg%0AHBgE3gi823z8IeAPgM8Bd5i3Ab4O/K2IiLn9EaXUInBeRM4B+4Gn0xxb2gyE51mKKlprL8vljCzp%0A/HAOy9EYn33sNHORKNXlJQTKSqguKyVg3Y7b5itxYXwcmnQZn43wiX95kSe6hrl1dx3/653XsyXB%0ARC2XS2gL+bWcdR2e7B4hWF5C+wazL7u4va0Bt0t49MQQ123dvKNcoZGyc1BK9YvInwN9wDzw78BR%0AIKyUsmreXgSazdvNwAXzucsiMgnUmtufiXvp+OdkFasaqzVzAGgM5E+W9JHeCT5/+DxVPg9zkeiG%0AyotSt+uy0ygz/gfKS7hpRw2/5JBksBB56twov/HVFwjPLfF7b7+WD9yydmxhI9pDAb525ALRmMKd%0A5HMLGaUUh7tHef3u+qTf01SoLi/l5p21PHZiiN96yzVFd/GUsnMQkSDGVf8OIAz8M/DWNXa1fpHW%0AemfVBtvXsnkIOASwfbvzP1iXcxwuO4eGKl/erAcf7h7B7RJ+/Mk3Uun1MBuJEp6LMDm/xOTcEpPz%0AS4Tnzf9zS0zOR1ZuD00tcKxvgu/+ZJA7b2i2rXZNplBKZfzL/G8vDvKxrxxjR10FX7j3RtpDgZRe%0Apz3kZy4S5fzoLLu2VNo8yvzlzPA0I9OLjklY1+JgRyO/960TnB2e4ZrGqozZzQXSWVb6GeC8UmoE%0AQES+AbwOqBYRjzl72AoMmPtfBLYBF0XEAwSA8bjtFvHPeRVKqfuA+wD27dvneJSod2wWX4mLLWYg%0AGqAh4GN0ZpGlaIwSd26LvQ53j7J3ezVVPiNhr9LrodLrYWuCJe8fPznEh790lBP9k3S21Dg4Unt5%0A+OkeHvzReb54735a6yo23d8Onuga5tcfOc7e7UEe+sD+tJQ0Hc2GUzk5MKmdQxyHzxrxhkw6hze3%0AN/A/v32CR08MFp1zSOfXrQ84ICLlZuzgTUAX8J/AfzX3uQf4tnn7O+Z9zMf/QxkygO8Ad5lqph3A%0AbuC5NMZlGz1jc2yvKX/VFLbR70MpQzWRy4zPRnipfzItVYfVOOVob35pvY/0TNAzNscv3fc0r4zM%0AOG7vh2dH+OiXj9EW8vPgvTemLbHctaWSUo8rb2aomeLJ7hF2b6mkKVCWMZtbqnzsawnyWBEW4kvZ%0AOSilnsUILB8DXjJf6z7gE8DHzcByLfCA+ZQHgFpz+8eBT5qvcxL4GoZjeQz4qFIqJ8pSWjkO8TQG%0AjFlErscdnjo3ilLpXWXVV3lpqS3PO+cwEJ5nR10Fy1HFXfc9w8sOOoinXx7j0MNHuGpLJQ9/YD9+%0AX/plVUrcLvY0VnGiSFUya7GwFOW58+OOS1jX4mBHE6eHpukZnd185wIirXURpdSnlFJ7lFIdSqn3%0AKaUWlVKvKKX2K6V2KaXeaaqQUEotmPd3mY+/Evc6n1FKXaWUukYp9Wi6B2UHsZgychxqX13Yy8po%0AvZTjzuFw9wh+nydtlUXn9iBHe8N5pfUeCM9zw/ZqvnLoADFlOIhzDiSVHe0d54MPPc/2mnL+8YP7%0AqS4vte2120MBTvRP5tX77iTP94yzuBzjVpursCbCW9qN8ibFVsY7txfNs8jw9AKLy7E1Zg5mCY0c%0AzpK+rOqoS1vtsrclyOjMIhfG520anbMsR2MMTS3QXF3G1Q1VfOWXD6AU3HXfs3QP2+cgXrwY5v0P%0APs+WKi9f/tBN1FZ6N39SEnQ0+5laWObiRH68705zuHuUUreLm3ZkPva1NVjOdVsDPHZSOwcN0DNq%0AyFhbVzmHmvJSStzCUA53hHt5ZIbByQVbpuD7Wo24w5He/ChfPDy9SExBqNpYl97dUMUjhw7gErjr%0Avmds6bR2anCK9z3wHIHyEv7plw8knMOQDJbS6eSAXloCoy7VvtYg5aXZKSR9sKORn1wIMxAuHmet%0AncM69I5Z1VhfvazkcglbqnI7Ee5JU9Xx+l3pT8F3b6miyuvJm7iD9eW1nAMYAd5HDh3A4xbe9fln%0A0mqmc+7SNO+9/1nKStx85ZcPvMqOnexprMLtEk7066D0pakFTg9NZyXeYHGwvREwFHzFgnYO69Az%0ANkeJW9b88jf4vTntHA53j7CzroJtNek3QnG7hNdur84759Bc/eqr+Z31lTxy6GZK3S7edd8zdKWg%0ABOoZneXdn38WEeGffvkmW97f9fCVuNm9pVLPHIAfncu8hHU1O+sruaahqqjiDto5rEPv2CzbasrX%0AXLPP5SzpxeUoz7wybusXqbMlyJnhaaYXlmx7TacYCBufy1pyxx11FXz1wwcoK3Hz7vufSUoNdHFi%0Ajvfc/yxL0Rhf/tBN7Kx3Pv9Al9EwONw9Sm1FKW1NzpfM2IiDHY083zOe8zJ2u9DOYR16xuauiDdY%0ANPh9OVu2+1hvmPmlKK+3cQre2RJEKTjeF7btNZ1iIDxPoKxk3VyDltoKHjl0MxWlHt5z/7O8dHFz%0ABzE0ucC7P/8s0wtLfOmDN2UsGaojFGBkejHnlXFOEotdFldkomTGRhzsaEQpI+GxGNDOYQ2UUmaO%0Aw9rLBo1+H7ORaE5eSR/uHsHjEg7stE/V8dpt1bgkP5LhBsLzm8YBtteW88ihA1R6Pbzn/mf4yYX1%0And7I9CLvvv8ZxmcjPPSB/SvZy5ngcqZ08c4eTg9NMzqzmNV4g8Wexipaa8t59MRgtoeSEbRzWIPR%0AmQhzkeiGMweA4RxULBklM4IrJTPsoMpXwjWN/rzoitUfnr8i3rAW22rK+eqHDxAoL+G9DzzLC2s4%0AiInZCO974FkGwws8+P4buWF7gnVHbOLaJmOGUszJcIe7R4DsxhssRISDHU08/fIYk3O5d2FoN9o5%0ArMF6SiWLy84ht6b7YzOLnBiYdOSL1NlSzfG+cM731E1k5mCxNVjOI4duJlheyvvuf/ZVzm9yfom7%0AH3yOV0Znuf+efezPgr6+ylfCjroKThRxUPpw9yjXNFStfOeyzcGORpZjiv97qvCXlrRzWIOeNUp1%0Ax5OriXBPvTxmlMy42v4peGdLkJnFZc7amEhmN9MLS0wtLCclL22uLuOrHz5AbWUpdz/wHEd7x5lZ%0AXObeLzzH6aEp/s97O7nFBklwqrSH/EW7rDQfifJcj73iinS5fmuAUMBXFKol7RzWoHdsFrdLaF7n%0AR6bBn5v1lQ6fHSFQVsJrHFgX79xuXDkfyeG4w6DprJPNPWgKlPHIoZupr/Jy9wPP8Z7PP8NPLk7y%0AN+/ay0/v2eLEUBOmPRTg4sQ84blIVseRDZ7rGSeyHHPkYidVRIS3dDTyZPcIM4vLmz8hj8lb5+Dk%0A8kbP2BzN1WWUetZ+e8pLPVT5PDmlIlkpmbEr/ZIZa7Gtpoz6Ki/Hctg59K+T45AIjQEfjxw6QEPA%0Ax4v9k/zFL17PwY5Gu4eYNB3NxdtT+vDZEUo9Lva35la5+IPtjUSWY/zgzKVsD8VR8tY5OOm1N1Iq%0AWTT6cyvX4dylGYamFhybgouIWYQvd53DWtnRydDg9/HNX7mF737s9dzx2pxoRljUZTQOd4+yv7WG%0AstLcajS1r7WGQFkJT50by/ZQHCVvncP8kjNVvZVSnB+dXVepZGEkwuWOWunJbrNkhoPrs50tQfrG%0A57g0nTtOMZ6B8Dxus7xJqgTKS1Lu4OYENRWlhAK+oiujMTy1wJnh6ZyKN1i4XUJLbXnB11nKW+ew%0AEHHGOYTnlpheWN505pBriXCHu0fYWV/B1qBzJR32thhSzmO9uZkMNxBeoNHvK7i+y+3NgaJTLB3u%0Atkpm5E68IZ6mgE87h1zFqZnDWn2j16LB72VkZjEnpJ1GyYwxbnP4i9TR7KfU4+JojlZoNXIcMtcl%0ALFN0hAKcH51ltsADoPEc7h6hrtLLnhxtzRmqLmMgPF/Q/Tby1jksx5Qjyxu9poy1tW7zmEM0phib%0Ayf7S0tGeCRaWYo5Pwb0eN9c1B3I27mDkOOSGHt5O2kN+lDJKhRcDsZjiR92j3JoDJTPWIxQoYzYS%0AZWqhcB123joHIKXKmpvRMzaLCJsuz1hJObkQlH6ye5QSt3BgZ63jtjpbgpzon2LBoZlbqkRjiqHJ%0ABcdKaGcTq4xGsWRKdw1OMTYbycl4g4V1nhXy0lJeOwcn5H29Y3OEAmX4SjZWSORSItzh7hH2bg+m%0A3dg+Efa2BIlEYzmnnhmdWWQ5pmgqQOfQ4PdSV1laNHJWK95gRz8Sp7BmqIOT2jnkHKVuF10OTLN7%0AEpCxQu6U0BidWeTkwBS3ZShRaK9ZXyjXlpbSyXHIdUSEtlCgaMp3H+4eYU9jlSMd9uzCmjn0h7N/%0AcegUeescfCVuR5aV+sbm1i2bEU9dpRe3S7JefO+pDDdCqa/y0lpbzpGe3HIO6eY45DodIT/dw9Ms%0ALufWcp7dzEWWOdIzkbGLnVSpr/RS4hYG9bJS7lFW6qZnbNbWZLiphSXGZiMJzRzcLqG+0pv1mMOT%0AZ0cJZlibv7clyLG+iZxSahS8c2gOsBxTnB2ayfZQHOXZ8+NEos6LK9LF5RIa/IUtZ81b5+ArcaEU%0AnLZxaanPUiol4BwAGgLZ7SVtlMwY4RaHSmasR2dLkNGZCH3jcxmzuRkD4QWqvB78NpYqzyXaQ0YZ%0AjULPdzh8dhSvx8WNOVYyYy0MOateVso5ysyAsZ1xh56VUt2bLysBNPq9WQ1Inx2e4dL0ouP5Davp%0AbMm9uEN/EqW685HtNeVU+TwFr1g63D3C/h01mwpCcoFQwMeADkjnHiVuF8HyEk7aWFagd6VUd4Iz%0AB392Zw5WIxQnS2asxe4tVVR5PTnlHAo1x8FCRAq+fPfg5Dzdl2YyfrGTKqHqMoYmF3IiEdYJ0nIO%0AIlItIl8XkdMickpEbhaRGhF5QkS6zf9Bc18Rkb8WkXMi8qKI7I17nXvM/btF5J5E7beHAvbOHEZn%0A2VLlpbw0MUlog9/H1MIy8w6V8tiMJ7tH2bWlMuNXzG6XcENLbhXhS6bJT77SHgpwanCK5Wgs20Nx%0ABEvCmuvBaIum6jKWY4rRHEiEdYJ0Zw7/G3hMKbUHuB44BXwS+L5SajfwffM+wFuB3ebfIeBzACJS%0AA3wKuAnYD3zKciib0Rbyc2ZomiWbviy9Y3Obls2IpzGLiXALS1GefWUsa4G7zu1BzgxPM5UDfbTn%0AIstMzC0VvHPoaPazuBzj5ZHZbA/FEQ53j7KlysvVDZXZHkpCWLLp/gINSqfsHETED9wGPACglIoo%0ApcLAHcBD5m4PAXeat+8AHlYGzwDVItIEvAV4Qik1rpSaAJ4ADiYyhvaQn0g0xssj9ig4Es1xsMhm%0AItyRngkWl2NZm4J3tgRRCl7oy34RPisoWIh1leLpKODy3UbJjBFu3V2PSG6WzFiNdTEyWKBB6XRm%0ADjuBEeALInJcRO4XkQqgQSk1CGD+t1ppNQMX4p5/0dy23vZNsRQcdsQd5iLLXJpepLUu8ZmD1REu%0AGyWsD3ePUOIWbtqZHVXH9dsCuCQ3gtKFLmO12Flfia/EVZDlu08OTDExt8RtV+e2hDWepkBhl9BI%0Axzl4gL3A55RSNwCzXF5CWou1LgfUBtuvfAGRQyJyRESOjIyMsKPO+LLYEXdINhgNcfWVsjBzeLJ7%0AlH0tNQnHR+ymylfCNY1+jvXlknMo3IA0GLGea5v8BSlnfdIUV2SzX3ey+H0eKr0evay0BheBi0qp%0AZ837X8dwFsPmchHm/0tx+2+Le/5WYGCD7VeglLpPKbVPKbWvvr4et0vY0+i3ZZrdm2Cp7niqfCVU%0AlLozHnO4NL3AqcEpbs3yVda+liDH+8JZV2sMhOdxyWVnXch0hAKcGpgiVmAKmcPdI7SH/NRVerM9%0AlIQREZoCvoKtr5Syc1BKDQEXROQac9ObgC7gO4ClOLoH+LZ5+zvA3aZq6QAwaS47PQ68WUSCZiD6%0Azea2hGgL+ekamEo7W7fHnDlsT2LmANlJhLNKZmRb8tfZEmRmcZkzQ9NZHUd/eIEGv48Sd94qsxOm%0APeRnenE5pxIQ02V2cZmjvRM529hnIwo5ES7db9PHgC+LyIvAa4E/Bv4UuF1EuoHbzfsA3wNeAc4B%0Anwc+AqCUGgc+DTxv/v2huS0h2kN+phaWuTiRnvfuHZultqI06QzbhipfxusrHT47Sk1FKW1N/oza%0AXc1KMlyWl5aKQcZqsVK+u4CWlp49P8ZSVHFbjpfMWItQdeHOHNJasFZKvQDsW+OhN62xrwI+us7r%0APAg8mMoYrB/IrsEpttWk3iKzd2wu6VkDGIql585nrjOaUoonu0e5ZVf2G6FsDZZRX+XlWO8E7zvQ%0AkrVxDE7Or/xoFjq7GyopcQsnB6Z4x3WhbA/HFp48O4qvxEVna0IK9pwiFChjdCbCwlI0L7K6kyHv%0A5+F7Gv24JP3eDsnmOFg0+H1cml7I2Brw6aFpRmcWc6IwmYjQuT27yXCxmGJgcqHgZawWXo+b3Vuq%0ACqqMxuHuEQ7srMXryb8fV2vGmgt9Xewm751DWambnfWVaZXvXliKMjA5n5RSyaLR72Upqhifi6Rs%0APxmskhm54BwA9rUG6Rufy4qcF2BsNkJkOVY0y0pgJMOdtCHOlgv0h+d5eWQ2L+MNAE2mQq4Q5ax5%0A7xzAiDt0pbEGe3FiDqWSUypZZLrpz+HuUXZvqVzRWGebvWbc4ViWZg/FkuMQT0dzgPHZSNbLxdvB%0Aj8yLnXyMN8DlxMtClLMWhHNoa/IzMLnAxGxqV+89o8nnOFg0BDLnHBaWojx3fjynrrLaQ35KPa6s%0ALS0VS45DPCvluwsgGe7J7lEa/T52bcmPkhmrsaokDOplpdzEanSTajJcTwo5DhYr9ZUmnVcsPd8z%0AzuJyLOv5DfF4PW6uaw5kzTlcbg9aPDOHa5v8iJD3cQelFD8+N8rrd9flTcmM1Xg9buoqvXpZKVdp%0AM6+kUo079I7N4fd5qC5PvlFMfZUXkcwU3zvcPUqp28VNO3KrEUpna5AT/VMsLGW+Ou1AeIHyUjeB%0AssJs8rMW5aUerqqvzPvy3Rcn5pmYW+KG7dXZHkpahKp9DOiZQ25SU1FKU8CXcqZ0z9gsrXUVKV29%0AlLhd1FZ4uZQB5/Dk2RH2tQazVjJjPTq3B4lEY1m5krVyHPL1yjNVjN4O+T1zOGXO9LOdr5MuoUCZ%0AnjnkMm1N/pSXlXrH5hLu/rYWjQHne0lfmlrg9NB0TsUbLPZmsTPcwGTxJMDF0xEKMDi5wFge9xLo%0AGpzCJYYcPZ8JVZcxGJ4vCPVYPAXjHNpDfl4emU16aSOyHOPixFzCfaPXotHvc1zn/COzZEauSFjj%0Aqav00lpbnh3nEJ5fqatfTLQ3mxWJ83hpqWtgita6CspK8y+/IZ5QtY/ZSJSp+eVsD8VWCsY5tIX8%0ARGMq6To//eF5YirxvtFrkYl2oYe7R6nNgZIZ67G3JcixvomMXj0tLEUZnYkQyhFZbyZpb8r/Mhqn%0AhqZy9nxOhlCBylkLxjm0rzRCSe5KylIqpSJjtWjw+5iYW3IsIBuLKQ53G6qObJfMWI99LTWMzkQy%0AWhDOkg8W47JSoLyEbTVltvZQzyST80tcGJ9fEZPkM00rclbtHHKSrcEyqnweugaTu5LqHU3fOVhy%0A1pFpZ9Z/L5fMyL14g4VVhO9IT+aWlooxAS6ejlAgb4PSp8344LUFMHOwZNSFFpQuGOcgIrQ1+ZOe%0AOfSOz1Fe6qY+jTryViKcU0HpXCuZsRa7t1RS5fVktEJrMeY4xNMe8tMzNpcTfbyTxVIqtReAc6ir%0A9FLiloKTsxaMcwAj7nB6cDqp5jOWUikdKWSjwx3hDnePck1DVU43s3G5hBtaghkto2H17m0I5E+D%0AGDtpNyvYYAapAAAgAElEQVTRplNXLFt0DU5RV1lKfVX+f3Yul9AY8OmZQy7THgowvxTlvLlUlAg9%0AY7NpKZXgci9pJ4LSC0tRnusZz+lZg0Xn9iBnhqczdiU7EJ6nvsqbl9U87aAjxThbLtA1OGVmeudm%0ADC1ZQoGylYuVQqGgnEN8b4dEiMYUF8bTy3EACJSV4PW4HHEOL1wIE1mOcfNVtba/tt3saw2iFBzv%0AC2fEXrHmOFjUV3nZUuXlZJ6V0ViKxjg7PFMQSiWLUHWZVivlMru2VFLqdiUcpBsIz7MUVWnPHESM%0AaeWQAx3hrB/aG7bnfiOU67dV45LMJcP1F2mOQzwdzYG8k7O+MjJLZDlWEMFoi1C1IWfPdj91Oyko%0A51DqcbG7IfHeDr1jVjXW9GYOYOY6OBBzON43wY66CmoqSm1/bbup9HrY0+jPSNxBKWWUzijCHId4%0AOkJ+zl2aYT6S+bpWqWIpCgtBxmrRFChjOaYcUyxmg4JyDmD1dkisEcpKNda69GYOYDgHu9VKSimO%0A9YW5YVv+FCbrbAlyvG/C8SsoI6+kuJr8rEVbKEBMwemh/Ik7nBqcptTjYmdd+hdluUIh9nUoOOfQ%0A1uRnbDbCpQQ8eO/YLF6Pi4aq9JcmGv1ehqcWbM0Qvjgxz+jMYl5VrexsCTIbiSadqZ4sxZ7jYNFh%0AltE4kUdB6a6BKa5pqMLjLpyfH6sjXCElwhXOp2NiyfsSiTv0jM3RUltuS9Zxg9/H4nKMyXn7lDrH%0AL+RPvMGic6UI37ijdoo9x8GiubqM6vKStDohZhKlFF2DhVE2I55QhhLhugam+NBDz2ekPH7BOYc9%0AjVVAYtrv3rFZW+INcLkjlJ1LS8d6J/CVuFaOKR/YGixjS5XX8aB0MXaAWwsRoT3kz5uucJemFxmf%0AjRRUvAHA7yuh0uthwGE562Mnh/i/py7xUgYUagXnHKp8JbTWlm+q/Y7FlJEAV5N+vAEu95K2MxHu%0A+IUw122tzqvpt4jQ2RJ0PFN6IDyP1+PKi0C903SEApwZmmYpGsv2UDbFumgrJKWSRaja+UQ4q+xI%0AJhIf8+dXJwnaQpv3dhieXmBxOUaLTUExK0v6kk1y1oWlKF0Dk+zNoyUli86WIBfG5x1tgDQQXqC5%0ACJv8rEV7c4BINEb38Ey2h7Ip1vdyT1P+zIYTJVRd5ngv6TPDRiwvEzW1CtI5tIcC9G5Sc6Zn1JCx%0AppvjYLHFzJK2a1np5MAkS1GVV8FoC6v5zzEHZw/94eJOgIun3VyiyYee0l2DU2yvKcfvK7y2rk0O%0Ad4SbXVxekd+n2tgsGdJ2DiLiFpHjIvJd8/4OEXlWRLpF5KsiUmpu95r3z5mPt8a9xm+b28+IyFvS%0AHZMV7Do9uL5ipm/clLHaFHPwetzUVJTa5hwuJ7/ln3PoCAUo9bgcrdBqtAct7niDxY7aCuoqS/n3%0ArqFsD2VTTg1McW0BzhoAmqt9jM1GHAsWnzVnDTvrKzg7NOP4MqIdM4dfB07F3f8s8JdKqd3ABPBB%0Ac/sHgQml1C7gL839EJE24C6gHTgI/L2IpFUsx7qS2mjq1TM2R4lbVmqx28GWKq9tiXDH+8JmcDf/%0AfgBLPS6u3xpwLO6wuBzl0vSinjmYuFzCu/dv5/unL9E7lnhdsUwzF1nm/NgsbWajokKjyUzIdGpp%0A6bQpD/+FvVuJRGOcu+TsMmJazkFEtgJvB+437wvwRuDr5i4PAXeat+8w72M+/iZz/zuAR5RSi0qp%0A88A5YH8646qv8lJXWbph0KZ3bJZtwXJbg72NAR/D0/acGMf6JvJKwrqavS1BTvRPOnIVNTxpxHWK%0APTs6nvccaMEtwkM/7s32UNbl9NA0ShVWZnQ8TstZzwxNU17q5s1tDYDzQel0fxn/CvgtwJrf1AJh%0ApZTVTPUi0GzebgYuAJiPT5r7r2xf4zmvQkQOicgRETkyMjKy7qBEhLZQYEPFUs/oXFoNftbC6CWd%0AfkB6cHKewcmFvMqMXk3n9iBLUeXIOvjApE6AW02D38fbr2vin49cYGYxN3sZX1YqFeaykrXM6ZRz%0AOD00xTWNVeysr8RX4nK8Gm/KzkFE3gFcUkodjd+8xq5qk8c2es6rNyp1n1Jqn1JqX339xl3R2pr8%0AdF+aJrJ85bqcUsrWHAeLBr+PsdnFtNcCXzDjDVZgNx+5nAxn/9KSznFYm/e/rpXpxWW+cexitoey%0AJqcGp/D7PAWbuGjlOjmR66CU4vTQNHsaq3C7hD2N/qS7XiZLOjOHW4CfFZEe4BGM5aS/AqpFxGPu%0AsxUYMG9fBLYBmI8HgPH47Ws8J2XaQ36WooruS1cGpUdnIsxGorYplSwaAz6UIqHSHRtxrG+CUo8r%0Ar7NIayu97Kir4IijzqEwf2RS5YbtQa7fVs0Xf9xDLAerg3YNTtEWKpweDqvxetzUV3kdKaFxaXqR%0A8NwSexqN34RkasilSsrOQSn120qprUqpVoyA8n8opd4D/CfwX83d7gG+bd7+jnkf8/H/UMaRfQe4%0Ay1Qz7QB2A8+lOi4La11zrXU5K2hnV46DhV1Nf473hekI+Sn15LfSeO92ozOc3Sdwf3iB2opSfCXF%0A2eRnI+59XSuvjMzyZPf6y67ZIBpTnB6cLsjkt3hCAZ8jxfestqrXmNUS2kJ+phaWuTjhnHTWiV+f%0ATwAfF5FzGDGFB8ztDwC15vaPA58EUEqdBL4GdAGPAR9VSqUdxWytraC81L3mulzP2NzKPnZiZUmn%0Ao1iKLMd4qT8/k99W09kSZGw2sqLNtosBneOwLm97TRP1VV6++OOebA/lVfSOzTK/FM3r2XAihKqd%0AyXWwCllapXTazS6ATuY72OIclFI/UEq9w7z9ilJqv1Jql1LqnUqpRXP7gnl/l/n4K3HP/4xS6iql%0A1DVKqUftGJOxLle15pvXOzaL2yW2r32u9JJOY+ZwanCKxeVYXiuVLJyKO+gch/Up9bh4700t/ODM%0ACK+M5E7GtPU9LFSlkkVTwMiStnu2fHpomka/j+pyo1zMNQ1VuMTZFrH5vW6xCe2hAKcGpq5Yf+0Z%0AmyNU7bN92aamopQSt6TlHI6buQH5mPy2mt1bKqnyeWzNd1hp8qNnDuvy7pu2U+IWHn46d2StXQNT%0AeFzCri2V2R6Ko4SqfcxForZWZwbDOVwTV4CzrNTNzvrEG5ulQkE7h7aQn+nFK9flesdmbV9SAkNC%0Au6XKl1Z9peMXwjT6fQXx4+dyCXu3BzlqY6b01Pwys5FowSpe7KC+yst/uS7EPx+5sGEJmUxyanCK%0AXVsq8XoKO050OdfBPsXSUjTGy5dmrqhH1R7yr8QinKCgncNamdJKKc6Pztqe42DRGPClVZn1eF+4%0AIGYNFp0tQc5emrbtSqpfK5US4t5bdjAbifL1I7kha7WUSoWOE4lw50dniURjV5Tub2vy0x+eZ2I2%0AYputeAraOVzdYGiC4+MO4bklpheWHZk5gBF3SFWtNDqzSN/4XME5B6XgBbNxUbpoGWtivGZrgM6W%0AIA89nX1Z69jMIsNTiwUfjIbLuTd2yllPrwSjX/3+WUFpp2YPBe0cfCVudtVXvipo0ztuKGfsToCz%0AsHpJpxKQsortFYJSyeL6bdW4xL6g9OXsaB2Q3oz3v66V3rE5fnD2UlbHccosgFkMzqGuwkuJW+i3%0AcVnp9KARr7mq/tXxGivT3KmgdEE7BzB7O8Q7hzGrGqszy0oNfi9zkWhKJQyO903gcQkdzYVTmKzS%0A6+HaJj/HbHIO/eF5St0u6iq8trxeIXOwo5FGv48vPNWT1XFYmbyFnuMARpzN7tLdZ4am2VlfcYWA%0AprbSS6Pf55icteCdQ3vIz9DUAmMzRpC4Z3QOEdhmUwe41Vgp9KksLR3rm6At5C+45K7OliDH+yZY%0AtqHE8EB4gaZqny19vwudEreL993cwuHuUbqH1y9f7zRdA1M0BXwEi6RrX1PAZ/uy0uolJYv2VRe/%0AdlLwzmElU9r0rr1jszT5fY79AF9uF5qcYmk5GuPFi4WR/LaazpYgs5HoSherdBgIz9taZr3QuevG%0AbZR6XDz0dE/WxnBqcLoolpQsmqvLbFMrTS0s0R+ef5WMNZ62kJ9zIzOOVD8ufOfQZCmWDOfQ40DB%0AvXhSTYQ7OzzDXCRaUMFoC8vh2bG0pHMckqO20ssd14f4l6P9tmvvE2FhKcq5kZmiUCpZNFUbcceo%0ADUKAs2Ywer1Ktu0hP9GYWmkEZCcF7xyqy0tpri5bmXr1js3RWufMkhLEldBI0jlYLTVv2FZ4Mwej%0AaZE37aD0cjTG8NSCznFIkvff0sr8UpSvPX9h851tpnt4hmhMFUW8wSJUXUY0prhkQ2+XU6ZzuGad%0AZSWrcZITQemCdw5gTL1ODkwytbDE2GzE0ZlDWakbv8+TtHM43hemrrKUbTWF98MnIuxrDaadKT08%0AvUhMaRlrsrSHAuzfUcNDT/fYcjWbDJbMspiWlexMhDszNEWVz0NonaXUrcEyqrweR+IOReEc2kN+%0AXhmdXekp7ZRSySKVRLjjFyZ47bZgwZYz3rs9yIXxeS6lUVpE5zikzr2va+XixDzfPzWcUbtdg1NU%0AlLrZ7pAAJBexOhTaoVg6PWj0cFjvd8HlEq4N+R1RLBWFc2hr8qMUPH7SaMC+vca5mQMYS0vJzBzC%0AcxFeGZktyHiDhR1F+KwvW7POcUia29saaK4uy3i11q6BKfY0+YtKXWZXRzilFGeGp9cNRlu0NRll%0ANOyeFRaFc2g38wYefWkQwLHSGRZWIlyiHL9QeMlvq2kPBSj1uNJyDlbpjCbdOzppPKas9ccvj62U%0Af3YapRSnBqeKakkJoMpXQpXXw2AaZXQABiYXmF5YXlfGatEW8jMXia7kcNlFUTiHUMBHoKyEgckF%0A6qu8VHg9mz8pDRr9PkamFxP25Mf7wrgErttaOMlvqyn1uLh+ayCtuMNAeJ7q8hLHP79C5a4bt+Er%0AcfHFH5/PiL2LE/NMLy4XlVLJIlRdlnbTn9PmUtHqmkqruVxDzt6lpaJwDiKy8gY6HW8AaAj4iCmj%0AVlIiHO+b4JpGf8H/6HW21HCifzJlTfZAeGFlPVeTPNXlpfzcDc1883i/Y8Xa4rF+rIpJqWTRVJ1+%0AIpxVU+nqTZzD7i1VlLjF9rhDUTgHuKyWcFKpZLGS65DAtDIWU7zQF2ZvAccbLDpbgixFFS/1p9YY%0AXec4pM89r2tlYSnGV484L2s9NTiFS4zGNMVGyIZEuNND0zRXl+H3lWy4X6nHxe4tVbYrlorGObQ3%0AZ3DmYPaSTiTu8PLIDNOLywXR+W0zLAeYatyhPzyvg9FpsqfRz+uuquVLT/faUs5kI7oGp9hZX0lZ%0AaWGVg0mEUMDH+GwkrczlM0NT6ya/rcaQ62vnkBI3bAvidslKmVsnsWYOicg2jxVQ57fNqK30sqOu%0AIiXnMLVglFrXM4f0ef/rWukPz/NEl7Oy1q6BqaJcUoL0+zosLkd5eWR2U6WSRVuTn9GZRVsS7yyK%0Axjm01lXw1CfeyE9dU++4rdpKL25XYu1Cj/eFCZSVsLPO+eWuXKCzJcix3omkS5oPmlN07RzS503X%0ANrA1WMYXHJS1Ts4bNYGKTalkkW4i3MuXZonG1LqZ0atxIihdNM4BjOS0TCSZuV3ClipvQsX3rM5v%0AhZr8tprOliBjsxF6x+aSep5OgLMPt0u45+ZWnjs//qouiXaykhldhEoliEuESzEofWbYDOYnOHO4%0A1iowqp1D7rMlgUS4qYUlzl6aLsh6SuthJcMdSXJp6XJ7UB1zsINfvHEbZSVuHnJo9tC1olQqvmA0%0AQEPAi0jqy0qnB6cpdbtoTXBFwe8rYXtNua2KJe0cHKLR793UObx4YRKlYG9L4ccbLHbVV1Ll8yQd%0AdxgIz5szMu0c7CBQVsIvdDbzrRcGVnqd2MmpwSnqKr1F+3l5PW7qKr0ry6HJcnpoml1bKilxJ/4T%0A3dZkb28H7RwcojGBLOnjfROIGK00iwWXS9i7PZh0+e7ByQUa/T7cRVSGwWnuubmVyHKMRxyo1to1%0AmLjSplAJVZelvKx0emhq0+S31bSF/PSMzabUhXItUnYOIrJNRP5TRE6JyEkR+XVze42IPCEi3eb/%0AoLldROSvReSciLwoInvjXusec/9uEbkn/cPKPg0BH9MLy8xF1v+gjvVNsKu+clMdc6GxryXI2UvT%0ASfUXMGSsOt5gJ7sbqrh1dx1ferqXJRtlrUvRGN3DxdXDYS1CAV9Ky0oTsxGGpxYTVipZtIeMGnKn%0AbVpaSmfmsAz8D6XUtcAB4KMi0gZ8Evi+Umo38H3zPsBbgd3m3yHgc2A4E+BTwE3AfuBTlkPJZxqq%0ANk6EU0px/EK4oOsprUdnSxCl4AWzplQiGAlwxblE4ST33tLK0NTCSlFKO3h5ZIZINFa0SiULKxEu%0AWWWelRm9J8n3b3XXy3RJ2TkopQaVUsfM29PAKaAZuAN4yNztIeBO8/YdwMPK4BmgWkSagLcATyil%0AxpVSE8ATwMFUx5UrXO4lvfZ6bs/YHOG5paLIb1jN9duqcQkc7RlPaP9oTDE0uaCVSg7wU1dvoaW2%0AnC881WPba1rr3to5lDG/FCU8l1wHvjNDidVUWk2j30dNRaltcQdbYg4i0grcADwLNCilBsFwIMAW%0Ac7dmIH5x86K5bb3tec1mHeGsNfdiyIxeTYXXw7VN/oSL8I1ML7IcU9o5OIDLJXzglh0c7Z3gB2cu%0A2fKaXQNTeD0udhRJ7s56WA16ko07nBmeJlhewpYqb1LPExHamuzLlE7bOYhIJfAvwH9XSm00qrUi%0AiWqD7WvZOiQiR0TkyMjISPKDzSDWzGG9oPTxCxNUeT3s3lKZyWHlDJ0tQV7oCydUwqF/pY+Ddg5O%0AcNf+bbTUlvPH3ztlS0mNU2Yw1ZOE0qYQSTUR7tSg0cMhldyntpCfM8PTtsSQ0vr0RKQEwzF8WSn1%0ADXPzsLlchPnfuhy5CGyLe/pWYGCD7VeglLpPKbVPKbWvvt75TOd0qPR6qCh1rxtzON4XNpZXilR9%0A09kSZDYS5UwCjdF1ApyzeD1uPnlwD2eHZ/jakYtpvZZSqqjLZsTTZMbIkqnOGospzg5Pb9rDYT3a%0AQ34iyzFeHplJ6fnxpKNWEuAB4JRS6i/iHvoOYCmO7gG+Hbf9blO1dACYNJedHgfeLCJBMxD9ZnNb%0A3tMQ8K1Z62QusszpoemijDdYJNMZbkAnwDnOwY5GbmwN8hdPnGF6Ibk18niGphaYmFsqeqUSQF2F%0Al1K3K6m+Dhcm5piLRJOON1hYcR474g7pzBxuAd4HvFFEXjD/3gb8KXC7iHQDt5v3Ab4HvAKcAz4P%0AfARAKTUOfBp43vz7Q3Nb3tPoX7uX9IsXJ4nGVFEqlSyaq8to8HsTdg5VPg9VRSb5zSQiwu+9vY3R%0AmQj/8MOXU36dlbIZeuaAyyU0BnxJJcJZSqVkZawWO+oq8HpctjiHlLvLKKV+xNrxAoA3rbG/Aj66%0Azms9CDyY6lhylUa/j2fPX+nnjvcZEs7XFlHy22pEhM6WYELOoT+8oOMNGeD6bdXc+doQ9x8+z7tv%0AaknpPbd+lJKVYRYqoerkch3ODE0jAlen2APD43axx6agdHFHjBzGqq8UW9Uu9FjfBDvqKghWlGZp%0AZLnB3u1BLk7Mb1pmRDf5yRy/eXAPAH/22OmUnt81OEVLbTmVBd7VMFGMXIfEncPpoSm215Sn1RWy%0ArclP1+BU0vkVq9HOwUEa/V6WY4rxucstGZVSK5VYi519rTUAm5bSGJjUCXCZorm6jA/duoNvvTCQ%0AVJKixanBab2kFEcoUMbw9GLCKrDTQ9Mpxxss2kP+lZLp6aCdg4OsyFnj4g4XJ+YZnVksyvyG1bQ1%0A+fF6XBtWaJ1dXCY8t0ST7h2dMX7lp3ZRV1nKZ/6tK6mrz5nFZXrGZrVSKY5QdRnRmOLS9ObFDReW%0AovSMzibcw2E92mwq362dg4OslQi30vmtiOMNFqUeF9dvrd4w7mDJAHXMIXNUej18/PZreL5ngsdO%0AJF5W48zQFErpYHQ8ychZu4dniKnEezisx57GKkTSL6OhnYODrJUId7wvTFmJO+2pY6GwtyXIyYHJ%0AdXvt9usOcFnhF/dt5eqGSv70sdMsLifWB7lr0FDaaBnrZayLmv4EFEunzLIZqSqVLMpLPeysq0g7%0AKK2dg4PUVRoNP4bjlpWOXwhz3dZA0WePWnS2BFmKKl7qX7sj2aDOccgKHreL3317G71jc3zp6d6E%0AntM1MEWgrISmgP6sLKz3YjCB9f8zQ9P4Sly01KZfdqQtFNDLSrlMidtFXaV3pfjewlKUroFJHW+I%0AY7NkuIHwPC65vESnyRxvuLqe266u56+/383EbGTT/bsGp2hr8hdNy9tEqPKVUOXzJKRYOjM0zdUN%0AVbb0LGkP+ekPzxOe2/xzWw/tHBwmvunPyYFJlqKKvVqptEJNRSk76yo40rO2c+gPL9Dg9yXVEUtj%0AH7/7tmuZWVzmf3+/e8P9ojHFmaEpvaS0Bs3VZQktK50emuKaFPMbVrOSKZ1G3EF/4xymIa6X9Ery%0Am3YOr2JvS5BjfRNrKmN0jkN2uaaxil+6cTv/+Ewvr2xQr+f86CwLSzGtVFqDpoBv04D0yPQiozMR%0A25IH7VAsaefgMA1+78rM4VjfBFuDZUXbV3c9OluCjM9G6Bmbu+IxI8dBO4ds8vHbr8brcfEnj66f%0AGNely2asSyKJcGesBj82CVXqKr00+L3aOeQyjX4f4bklFpaiHO8rzs5vm7FvnbhDLKYYDC/oYHSW%0Aqa/y8pGf3sUTXcM8/fLYmvucGpyixC3sKtIS9BsRqi5jYm6J+cj6qq/TNimV4rEypVNFOweHaTDV%0ACi9enGRwckFnRq/BVfWV+H2eK5zD6OwikWhM5zjkAB98/Q5CAR+f+V7XFeVgwFi+2LWlilKP/klZ%0AjXVxs1HTn9ND09RVeqmrTK7Bz0a0hwJ0X5pZVya+GfqTdJhGU2Xz6IlBoDg7v22GyyXsbQlytPfV%0ARQqtJikhnR2ddXwlbn7r4B5O9E/xzeP9VzxuKZU0V2Jl929UnfWMDWUzVtMW8hONKbqHU+vtoJ2D%0Aw1gSzMdODFHqcekv0Dp0bg9ydniGyfnLvQR0k5/c4mevD3Hd1gB/9viZVy2RjEwvMjK9qJVK69C8%0A0hFu7ZlDdKXBj83OYUWxtHYO0WZo5+Aw1sxhcHKB1zQH9LR7Hax8h+NxfaUHdHvQnMLlMno+DE0t%0A8PnDr6xst3o4XNuks/7XosHvQ4R1C+H1jM2yuByzNd4AsL3GqI6baqa0/qVyGH+ZB1+J8Tbrekrr%0Ac/22atwueVWF1v7wPBWlbvxluvxzrrB/Rw0H2xv5hx++zCVThacb/GxMqcdFfaV3XTmrpVSyWwbs%0AcgnXNlWlrFjSzsFhRGRl9rC3Rccb1qPC6+HapiqOrpo5NFWX6YzbHOOTb93DUjTG//r3s4ARb2iu%0ALqO6vLj7k2yEIWddO+ZwenAKl+CI0qutyc+pwak1RQSboZ1DBthiOgetVNqYzu1BjveFV2rfD4QX%0AdLwhB2mtq+Dum1v52tELdA1M0TUwpZeUNiFU7VtXrXR6aJrWugp8JW7b7baHAsxGovSOX5lDtBna%0AOWSAnXUVbK8p1z0JNmFvS5C5SHSlj+5AeJ5mneOQk/zaG3cTKCvhD/71JK+MzuolpU0IBYxEuLWq%0AAJwemubaNHs4rEc6mdLaOWSA337btXz1wweyPYycxwpKH+ubYGEpythsRMtYc5RAeQm/9sbdPHd+%0AnGhMaaXSJjRVl7GwFCM8t/Sq7bOLy/SNz9kejLbY3VCJxyWcHEhesaSdQwYwyhjrH7nNaK4uo9Hv%0A42jvBIOTuo9DrvPeAy3sqDPKS+uaShtjzYBXK5bODttbNmM1Xo+bXVsqU8qU1s5BkzOICJ0tQY72%0ATugchzyg1OPis79wHXfduI1twfJsDyensS4OV+c6nF6pqeScc20L+VOSs2rnoMkp9rYEuTgxv5Lv%0AoHMccpv9O2r401+4DpcNPQgKGesiZ3Dy1YqlM0PTVJS62Rp07jxvDwUYmV7k0vTmZcPj0c5Bk1NY%0AcYd//ckgItAQsK/WjEaTLWorSin1uK6YOZwanOLqxipHnaslFjhltnFNFO0cNDlFW5Mfr8fFmeFp%0A6iu9eD32y/s0mkzjcglNAR8DcTMHpRRnHCibsRpLLJBsUDpnnIOIHBSRMyJyTkQ+me3xaLJDqcfF%0A9WYmuY43aAoJS85qMTy1SHhuydF4AxiCmK3BsqTlrDnhHETEDfwd8FagDXiXiLRld1SabGEtLel4%0Ag6aQaKr2MRjnHJzo4bAebU3+/HQOwH7gnFLqFaVUBHgEuCPLY9JkiU6zrLlu8qMpJJqryxiaWlip%0AAGB397eNaA8FOD82m9RzcsU5NAMX4u5fNLdpipDOliDlpW6ucXi6rdFkkqZAGTEFw9OLgCFjbfT7%0AMlKTqi3kZ43k7A3JlXKXa4XqrzgUETkEHALYvn2702PSZIlgRSlPfeKNBMpKsj0UjcY2rJnwYHie%0A5uoyTg9NsydDNanaU8hgz5WZw0VgW9z9rcDA6p2UUvcppfYppfbV19dnbHCazBOsKNXaeU1BYcXQ%0A+sPzLEVjnLs0nZF4A0BTwEd1eXIXW7niHJ4HdovIDhEpBe4CvpPlMWk0Go1tNMUlwp0fnWUpqjIS%0AbwCj+kCyxRFzYllJKbUsIr8KPA64gQeVUiezPCyNRqOxjUqvB7/Pw0B4PiNlM1aT7NJSTjgHAKXU%0A94DvZXscGo1G4xRW05/Tg1N4XMJV9fY3+FmPZCvn5oxz0Gg0mkLHcA5GX4er6isz2lP+zW2NSe2f%0AKzEHjUajKXiMEhrGslKmgtEWFd7k5gLaOWg0Gk2GCFWXEZ5boj88n3HnkCzaOWg0Gk2GiC8Jk+t9%0At7Vz0Gg0mgzRFLhcEibXKwBo56DRaDQZwqo0XOXzEArkdu0w7Rw0Go0mQzQGfIgYxfZEcrsCgHYO%0AGm+XofkAAAwdSURBVI1GkyFK3C72NPo5sLM220PZFJ3noNFoNBnkX3/1Flw5PmsA7Rw0Go0mo3jc%0A+bFgkx+j1Gg0Gk1G0c5Bo9FoNFegnYNGo9ForkA7B41Go9FcgXYOGo1Go7kC7Rw0Go1GcwWilMr2%0AGFJCREaA3hSeWgeM2jycXLddjMecTdvFZjebtovxmNOx3aKUqk9kx7x1DqkiIkeUUvuKyXYxHnM2%0AbReb3WzaLsZjzpRtvayk0Wg0mivQzkGj0Wg0V1CMzuG+IrRdjMecTdvFZjebtovxmDNiu+hiDhqN%0ARqPZnGKcOWg0Go1mEwrSOUiud9EoMPT7nTn0e51Zivn9LkjnQFwp8kx+uCJyjYhk5T0VkXeLyPXm%0A7Uyf0IV6HuUi+tzOLEV7bhfUgYvIQRF5HPhzEfk5AJWBoIqI3C4izwIfIsPvqYj8jIgcBv4KuAEy%0Ac8ym7beLyHeBT4vILZmwadq9U0T+RkRqMmVzle1PZ8GuPrfR53YmyftmP+aVRAnwx8DNwGeBrcA7%0AReSEUqrbQbse4H8C7wI+oZT6RvzjTp3Ipm0f8BCwBfgj4A6g3HzcrZSKOmE7bgydwKeAPwD8wD0i%0Aslsp9UURcSmlYg7YFODngM8AVcAPROSbTthaw64LuBf4JNAiIv+ulDqcAbv63NbndlbI+5mDMogA%0AjwFvUEp9B/gxsAScd9juEhADvm59eUTkVhEpccpunO154MtKqZ9SSj2OcczvMx939Mtj8jPAYaXU%0A94BvA0PAx0QkoJSKOTH9N3+QXgFeD/w68F6MH0tHMd/vKHAO4wr2I4Djswd9butz2247yZC3zkFE%0Afk1EPi8iHwJQSv1fpdSyiLwN+AZwNfDHIvJL5v62fKBxdg+Zm/4BaBKRL4jIS8BvAQ8AH7DT7irb%0AvwyglPq2ud2N8WNxUkS22WVvI9vAfwLvEJGg+WVeAqYwjt+26b+I3CMit8dtOqGUGlNK/Ytp8+dF%0ApNQOW2vYftU5BvxQKTWtlPo8UCEiHzT3s/V7pM9tfW7j8LmdEEqpvPsD3g88AxwEfgj8DrDLfGw/%0AcLV5+23A40CrQ3Z/DwgCdwJfBvYAgjEN/jdgu8PHvDPu8dcAzwNVGXi/fxdjyv83wHeBw8AXgLcA%0AnwMqbLAZBL4ODAIvAm5zu4vL+Tm3AN8H9q56rjhwzL8NXBX3+FuBk0BQn9v63M6nczvRv3ydObwJ%0A+KxS6jHgfwClwHsAlFLPKaXOmvt1ASPAskN2vcCHlVLfAg4ppU4r4xN8EQhjeH+7WOuY32s9qJR6%0ACZgH7rLR5nq2fcDdSqmPYSyx/KFS6l5gAfAppWbTNaiUmgD+HbgWOAr8ftxjyvz/FPAC8FYR2WNd%0A8VqPp8lax/yeuDE8CpwCDolIlYi80waba9nV57Y+t+0+txMir5xD3PT9OPAOAKXUEQzP37SGquD9%0AGIGsMYfsPgXsEJFbVp009wBlwEQ6djex/QwQso7ZnOL/O+CzcZlho+PeLSKvV0r1KaWeMPd7O/Cy%0ADXat8T+slAoDf48xxW5RxpqvO25sf4VxVf9DjCu+tJY7Njjmp4l7v00+AfwJ0A00pmpzE7v63Nbn%0Ati3ndrLktHMQkUbzvwtAXY7cPwW4ROQ28/4JjClayNz/bhE5AewAfkUZ64ZO2R2Is/sLIvITYKdp%0AdyG5I079mM0rii3AbKpXFykcd5O5/20i8kNgN8Y6dbp2raunBfP/88CjGEoOlFJR84vUAPwt8B/A%0Aa5VSfxT//ARtt4uIz7qfxDm2C+OL/S2Mqf/fJHnMqdpN99xOxq7d53ZKx2zTuZ3scdt1bq+2m7Fz%0AO11y0jmIyA0i8n1MRYj1QcZ51G6M9d5fEkPadhHjym2H+fiLGFPhe5RSwxm0exb4b0qpu5Oxm6bt%0A1riX+X+UUg8mYzdN29Zx9wAfUUr9nFIq4QYkG9gVuTLI+7fALvPLVi8iOzCanXxMKfWzSqnBJI/5%0AOhH5EYZUsjZue6Lv9yTwq0qpn1dKDWTAbrrndrp20zm3032vIfVzO93j7iG1c3s9u46f23aRU87B%0AfOP+EngYeEgp9ctxj8Xri6cxAkWlGElBJRhBnlEApdQLSqkfZ8HuS0qppzN8zCvLCsqQPWbStnXc%0AfUqpkzbaVebVU5mIVFo2gG8CL5ljCZpXWX3JHHMcv4ch0/w5pVS/adud6PutlBpRqeUZpGo3pXPb%0ARrtJn9s22E753LbBdkrndgJ2M3Fu20JOOQdzylQFHFdKPQwgIlfF/1CJkZ36TxhXbr+P8UEeNu8/%0AlE92i9V2gnb/XwyVzE7z/rswAoR/DrxGKXUsFdsi4hKRq4AZpdRfmdtuF5FqDDUOIvJHdh9zsdkt%0AVtsJ2v00DpzbtqMyJIta7w84gCnPM+/7gTMYH9ZTGLruh4G9GPruf8KU9qnL8q+kJW7Zslustm2w%0AewDYYdMxV2EsJ7wDI2bwuGn7tzGWMpw65oK2W6y2bbCb8rnt5F/2DEM1hl56GmMKVhH32K9hyLhu%0Aw5DUfRZDFVIf/0Hmk91itW2DXbdDx/w7wDHgZ837t2Fkw97s8DEXnN1itW2D3ZTP7Uz8ZXNZqQLD%0Ao37MvG2pBVBK/TXw00qpJ5VSixjedx8wB1esh+eL3WK1na7ddMolrGsbI8GpFbAKnB3BKJOwEGfb%0A9mMuULvFajtdu5koBZIyma6yeLeIvEFE/MoI0twHfA3jDbtJRELWvspIFLHoBC4AUfOxpD7MbNkt%0AVts5fszN5mu/CPwm8FERqcNIunoNlwPOdh9zQdktVtvZPOZM43ibUBERDGnYP2EU8noZw8v+ujKl%0AYWIku/wi8LxS6h/NbV6MSpR/jqF5/h/qcnZoztotVtt5dMxHlFJfinvuxzECg7uB31BKdWm72nYu%0A2M06Tq5ZcblmyNXAP5q3PRh1S76xat/fwNAEB4Ayc9vrgDvzxW6x2s7TY66K216i7WrbuWQ3F/6c%0AeVHjzftjjADjG4D/gqFntx4XjKvEN8Rtq8RIF38eGAZC+WK3WG3n8TE/l6Vjzju7xWo7m8ecK3+2%0AxxxE5A0YxaSCGPXvP41RpOunRWQ/rOjc/xCjmYbF2zG0vi9gaH0TzjrNpt1itZ3nx/yTVGwXm91i%0AtZ3NY84p7PY2wK3A++Lu/z3wKxiFwo6a21wYa3hfwyw5jFEK+LZ8s1ustvUxF77dYrWdzWPOpT/7%0AX9CoFOnl8lrde4A/MW+/gFEvBAzJ4lfy3W6x2tbHXPh2i9V2No85l/5sX1ZSSs0ppRbVZQ3v7Rh1%0A58HowXutGI27v4KRJGKpAfLSbrHa1sdc+HaL1XY2jzmncMrrAG6MqdejXO5ktQsjq/D1QHMh2S1W%0A2/qYC99usdrO5jHnwp+TSXAxoASjuuF1pqf9n0BMKfUjZVYqLCC7xWpbH3Ph2y1W29k85uzjpOfB%0AKCgVA34EfDBTHi9bdovVtj7mwrdbrLazeczZ/nM0Q1pEtgLvA/5CGbVzMkK27BarbX3MhW+3WG1n%0A85izjePlMzQajUaTf+RUsx+NRqPR5AbaOWg0Go3mCrRz0Gg0Gs0VaOeg0Wg0mivQzkGj0Wg0V6Cd%0Ag0aTIUSkWkQ+Enf/p8zEKo0m59DOQaPJHNUYJZ01mpxHOweNZg1EpFVETovI/SJyQkS+LCI/IyJP%0AiUi3iOwXkRoR+ZaIvCgiz4jIdeZz/0BEHhSRH4jIKyLya+bL/ilwlYi8ICJ/Zm6rFJGvm7a+XJAF%0A3DR5iSfbA9BocphdwDuBQxid696NUXDtZ4HfAS4Ax5VSd4rIG4GHgdeaz90D/DRQBZwRkc8BnwT+%0A//buEKeBIAzD8DsnQCCweBCgOQxX4SYIzlBZBAkGRShoDEGQ1kBSx36I2SabDNuQTaCI93GbzOys%0A+2b+Tf45TnICtawEnAJHwCtwC5xRWzVIO+XJQRr3nGSRpAOegHlqS4EFcEgNiiuAJNfAfillr587%0AS237vATegIORNe6SvPRr3PfvlXbOcJDGDXvpdIPnjnrq/q4EtOlHM5z7yfgp/afjpD9lOEjT3VBv%0ACduUiJZJ3reM/6CWmaR/z12KNN0FcFlKeQDWwPm2wUlW/Q/tR+oFMrPf/0RpGruySpIalpUkSQ3D%0AQZLUMBwkSQ3DQZLUMBwkSQ3DQZLUMBwkSQ3DQZLU+AJEtyR17cKllgAAAABJRU5ErkJggg==%0A\">\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Jste-li v příkazové řádce, napřed použij <code>plot()</code> a potom se na graf buď podívete, nebo ho uložte:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"c1\"># Setup</span>\n<span class=\"kn\">import</span> <span class=\"nn\">matplotlib.pyplot</span>\n\n<span class=\"c1\"># Plot</span>\n<span class=\"n\">unstacked</span><span class=\"o\">.</span><span class=\"n\">loc</span><span class=\"p\">[</span><span class=\"s1\">'Clothing'</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">plot</span><span class=\"p\">()</span>\n<span class=\"n\">matplotlib</span><span class=\"o\">.</span><span class=\"n\">pyplot</span><span class=\"o\">.</span><span class=\"n\">show</span><span class=\"p\">()</span>\n<span class=\"n\">matplotlib</span><span class=\"o\">.</span><span class=\"n\">pyplot</span><span class=\"o\">.</span><span class=\"n\">savefig</span><span class=\"p\">(</span><span class=\"s1\">'graph.png'</span><span class=\"p\">)</span>\n</pre></div><p>Funkce <code>show</code> a <code>savefig</code> pracují s „aktuálním” grafem – typicky posledním, který se vykreslil. Pozor na to, že funkce <code>savefig</code> aktuální graf zahodí; před dalším <code>show</code> nebo <code>savefig</code> je potřeba ho vykreslit znovu.</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>V kombinaci s dalšími funkcemi <code>Series</code> a <code>DataFrame</code> umožňují grafy získat o datech rychlý přehled:</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [78]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"c1\"># Jak se postupně vyvíjely zisky z oblečení?</span>\n<span class=\"c1\"># `.T` udělá transpozici tabulky (vymění řádky a sloupce)</span>\n<span class=\"c1\"># `cumsum()` spočítá průběžný součet po sloupcích</span>\n<span class=\"n\">unstacked</span><span class=\"o\">.</span><span class=\"n\">T</span><span class=\"o\">.</span><span class=\"n\">fillna</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">cumsum</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">plot</span><span class=\"p\">()</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[78]:</div>\n\n\n\n\n<div class=\"output_text output_subarea output_execute_result\">\n<pre><matplotlib.axes._subplots.AxesSubplot at 0x7f4ab5733160></pre>\n</div>\n\n</div>\n\n<div class=\"output_area\">\n\n <div class=\"prompt\"></div>\n\n\n\n\n<div class=\"output_png output_subarea \">\n<img src=\"data:image/png;base64,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%0A\">\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [79]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"c1\"># Jak si proti sobě stály jednotlivé kategorie v březnu, dubnu a květnu 2016?</span>\n<span class=\"n\">unstacked</span><span class=\"o\">.</span><span class=\"n\">loc</span><span class=\"p\">[:,</span> <span class=\"s1\">'2016-03'</span><span class=\"p\">:</span><span class=\"s1\">'2016-05'</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">plot</span><span class=\"o\">.</span><span class=\"n\">bar</span><span class=\"p\">(</span><span class=\"n\">legend</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[79]:</div>\n\n\n\n\n<div class=\"output_text output_subarea output_execute_result\">\n<pre><matplotlib.axes._subplots.AxesSubplot at 0x7f4ab567ae10></pre>\n</div>\n\n</div>\n\n<div class=\"output_area\">\n\n <div class=\"prompt\"></div>\n\n\n\n\n<div class=\"output_png output_subarea \">\n<img src=\"data:image/png;base64,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%0A1WkeGrroAAAAAElFTkSuQmCC%0A\">\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Další informace jsou, jak už to bývá, <a href=\"http://pandas.pydata.org/pandas-docs/version/0.19.0/visualization.html\">v dokumentaci</a>.</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<h2>Groupby</h2>\n<p>Často používaná operace pro zjednodušení tabulky je <code>groupby</code>, která sloučí dohromady řádky se stejnou hodnotou v některém sloupci a sloučená data nějak agreguje.</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [80]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">head</span><span class=\"p\">()</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[80]:</div>\n\n\n\n<div class=\"output_html rendered_html output_subarea output_execute_result\">\n<div>\n<style>.lesson-content .dataframe thead tr:only-child th {\n text-align: right\n }\n.lesson-content .dataframe thead th {\n text-align: left\n }\n.lesson-content .dataframe tbody tr th {\n vertical-align: top\n }</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>category</th>\n <th>month</th>\n <th>sales</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>Electronics</td>\n <td>2015-01-31</td>\n <td>5890</td>\n </tr>\n <tr>\n <th>1</th>\n <td>Power Tools</td>\n <td>2015-01-31</td>\n <td>3242</td>\n </tr>\n <tr>\n <th>2</th>\n <td>Clothing</td>\n <td>2015-01-31</td>\n <td>6961</td>\n </tr>\n <tr>\n <th>3</th>\n <td>Electronics</td>\n <td>2015-02-28</td>\n <td>3969</td>\n </tr>\n <tr>\n <th>4</th>\n <td>Power Tools</td>\n <td>2015-02-28</td>\n <td>4866</td>\n </tr>\n </tbody>\n</table>\n</div>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Samotný výsledek <code>groupby()</code> je jen objekt:</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [81]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">groupby</span><span class=\"p\">(</span><span class=\"s1\">'category'</span><span class=\"p\">)</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[81]:</div>\n\n\n\n\n<div class=\"output_text output_subarea output_execute_result\">\n<pre><pandas.core.groupby.DataFrameGroupBy object at 0x7f4ab8363f28></pre>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>... na který musíme zavolat příslušnou agregující funkci. Tady je například součet částek podle kategorie:</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [82]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">groupby</span><span class=\"p\">(</span><span class=\"s1\">'category'</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">sum</span><span class=\"p\">()</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[82]:</div>\n\n\n\n<div class=\"output_html rendered_html output_subarea output_execute_result\">\n<div>\n<style>.lesson-content .dataframe thead tr:only-child th {\n text-align: right\n }\n.lesson-content .dataframe thead th {\n text-align: left\n }\n.lesson-content .dataframe tbody tr th {\n vertical-align: top\n }</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>sales</th>\n </tr>\n <tr>\n <th>category</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>Clothing</th>\n <td>112701</td>\n </tr>\n <tr>\n <th>Electronics</th>\n <td>103742</td>\n </tr>\n <tr>\n <th>Power Tools</th>\n <td>104859</td>\n </tr>\n </tbody>\n</table>\n</div>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Nebo počet záznamů:</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [83]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">groupby</span><span class=\"p\">(</span><span class=\"s1\">'category'</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[83]:</div>\n\n\n\n<div class=\"output_html rendered_html output_subarea output_execute_result\">\n<div>\n<style>.lesson-content .dataframe thead tr:only-child th {\n text-align: right\n }\n.lesson-content .dataframe thead th {\n text-align: left\n }\n.lesson-content .dataframe tbody tr th {\n vertical-align: top\n }</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>month</th>\n <th>sales</th>\n </tr>\n <tr>\n <th>category</th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>Clothing</th>\n <td>22</td>\n <td>22</td>\n </tr>\n <tr>\n <th>Electronics</th>\n <td>22</td>\n <td>22</td>\n </tr>\n <tr>\n <th>Power Tools</th>\n <td>23</td>\n <td>23</td>\n </tr>\n </tbody>\n</table>\n</div>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Groupby umí agregovat podle více sloupců najednou (i když u našeho příkladu nedává velký smysl):</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [84]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">groupby</span><span class=\"p\">([</span><span class=\"s1\">'category'</span><span class=\"p\">,</span> <span class=\"s1\">'month'</span><span class=\"p\">])</span><span class=\"o\">.</span><span class=\"n\">sum</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">head</span><span class=\"p\">()</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[84]:</div>\n\n\n\n<div class=\"output_html rendered_html output_subarea output_execute_result\">\n<div>\n<style>.lesson-content .dataframe thead tr:only-child th {\n text-align: right\n }\n.lesson-content .dataframe thead th {\n text-align: left\n }\n.lesson-content .dataframe tbody tr th {\n vertical-align: top\n }</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th></th>\n <th>sales</th>\n </tr>\n <tr>\n <th>category</th>\n <th>month</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th rowspan=\"5\" valign=\"top\">Clothing</th>\n <th>2015-01-31</th>\n <td>6961</td>\n </tr>\n <tr>\n <th>2015-02-28</th>\n <td>2578</td>\n </tr>\n <tr>\n <th>2015-03-31</th>\n <td>9131</td>\n </tr>\n <tr>\n <th>2015-04-30</th>\n <td>618</td>\n </tr>\n <tr>\n <th>2015-05-31</th>\n <td>4796</td>\n </tr>\n </tbody>\n</table>\n</div>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Chceme-li aplikovat více funkcí najednou, předáme jejich seznam metodě <code>agg</code>. Časté funkce lze předat jen jménem, jinak předáme funkci či metodu přímo:</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [85]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">groupby</span><span class=\"p\">(</span><span class=\"s1\">'category'</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">agg</span><span class=\"p\">([</span><span class=\"s1\">'mean'</span><span class=\"p\">,</span> <span class=\"s1\">'median'</span><span class=\"p\">,</span> <span class=\"nb\">sum</span><span class=\"p\">,</span> <span class=\"n\">pandas</span><span class=\"o\">.</span><span class=\"n\">Series</span><span class=\"o\">.</span><span class=\"n\">kurtosis</span><span class=\"p\">])</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[85]:</div>\n\n\n\n<div class=\"output_html rendered_html output_subarea output_execute_result\">\n<div>\n<style>.lesson-content .dataframe thead tr:only-child th {\n text-align: right\n }\n.lesson-content .dataframe thead th {\n text-align: left\n }\n.lesson-content .dataframe tbody tr th {\n vertical-align: top\n }</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr>\n <th></th>\n <th colspan=\"4\" halign=\"left\">sales</th>\n </tr>\n <tr>\n <th></th>\n <th>mean</th>\n <th>median</th>\n <th>sum</th>\n <th>kurt</th>\n </tr>\n <tr>\n <th>category</th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>Clothing</th>\n <td>5122.772727</td>\n <td>6185.5</td>\n <td>112701</td>\n <td>-1.298035</td>\n </tr>\n <tr>\n <th>Electronics</th>\n <td>4715.545455</td>\n <td>4294.5</td>\n <td>103742</td>\n <td>-1.353210</td>\n </tr>\n <tr>\n <th>Power Tools</th>\n <td>4559.086957</td>\n <td>3769.0</td>\n <td>104859</td>\n <td>-1.044767</td>\n </tr>\n </tbody>\n</table>\n</div>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Případně použijeme zkratku pro základní analýzu:</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [86]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">g</span> <span class=\"o\">=</span> <span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">groupby</span><span class=\"p\">(</span><span class=\"s1\">'month'</span><span class=\"p\">)</span>\n<span class=\"n\">g</span><span class=\"o\">.</span><span class=\"n\">describe</span><span class=\"p\">()</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[86]:</div>\n\n\n\n<div class=\"output_html rendered_html output_subarea output_execute_result\">\n<div>\n<style>.lesson-content .dataframe thead tr:only-child th {\n text-align: right\n }\n.lesson-content .dataframe thead th {\n text-align: left\n }\n.lesson-content .dataframe tbody tr th {\n vertical-align: top\n }</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr>\n <th></th>\n <th colspan=\"8\" halign=\"left\">sales</th>\n </tr>\n <tr>\n <th></th>\n <th>count</th>\n <th>mean</th>\n <th>std</th>\n <th>min</th>\n <th>25%</th>\n <th>50%</th>\n <th>75%</th>\n <th>max</th>\n </tr>\n <tr>\n <th>month</th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>2015-01-31</th>\n <td>3.0</td>\n <td>5364.333333</td>\n <td>1914.414880</td>\n <td>3242.0</td>\n <td>4566.0</td>\n <td>5890.0</td>\n <td>6425.5</td>\n <td>6961.0</td>\n </tr>\n <tr>\n <th>2015-02-28</th>\n <td>3.0</td>\n <td>3804.333333</td>\n <td>1152.853995</td>\n <td>2578.0</td>\n <td>3273.5</td>\n <td>3969.0</td>\n <td>4417.5</td>\n <td>4866.0</td>\n </tr>\n <tr>\n <th>2015-03-31</th>\n <td>3.0</td>\n <td>3900.333333</td>\n <td>4529.891978</td>\n <td>1281.0</td>\n <td>1285.0</td>\n <td>1289.0</td>\n <td>5210.0</td>\n <td>9131.0</td>\n </tr>\n <tr>\n <th>2015-04-30</th>\n <td>3.0</td>\n <td>3250.000000</td>\n <td>3895.490855</td>\n <td>618.0</td>\n <td>1012.5</td>\n <td>1407.0</td>\n <td>4566.0</td>\n <td>7725.0</td>\n </tr>\n <tr>\n <th>2015-05-31</th>\n <td>3.0</td>\n <td>5792.000000</td>\n <td>2069.341200</td>\n <td>4409.0</td>\n <td>4602.5</td>\n <td>4796.0</td>\n <td>6483.5</td>\n <td>8171.0</td>\n </tr>\n <tr>\n <th>2015-06-30</th>\n <td>3.0</td>\n <td>7241.333333</td>\n <td>2747.220656</td>\n <td>4180.0</td>\n <td>6116.0</td>\n <td>8052.0</td>\n <td>8772.0</td>\n <td>9492.0</td>\n </tr>\n <tr>\n <th>2015-07-31</th>\n <td>3.0</td>\n <td>5836.333333</td>\n <td>2388.415653</td>\n <td>3267.0</td>\n <td>4760.0</td>\n <td>6253.0</td>\n <td>7121.0</td>\n <td>7989.0</td>\n </tr>\n <tr>\n <th>2015-08-31</th>\n <td>1.0</td>\n <td>5534.000000</td>\n <td>NaN</td>\n <td>5534.0</td>\n <td>5534.0</td>\n <td>5534.0</td>\n <td>5534.0</td>\n <td>5534.0</td>\n </tr>\n <tr>\n <th>2015-09-30</th>\n <td>3.0</td>\n <td>3371.000000</td>\n <td>3542.417960</td>\n <td>31.0</td>\n <td>1513.5</td>\n <td>2996.0</td>\n <td>5041.0</td>\n <td>7086.0</td>\n </tr>\n <tr>\n <th>2015-10-31</th>\n <td>3.0</td>\n <td>6367.666667</td>\n <td>3002.029702</td>\n <td>2909.0</td>\n <td>5402.5</td>\n <td>7896.0</td>\n <td>8097.0</td>\n <td>8298.0</td>\n </tr>\n <tr>\n <th>2015-11-30</th>\n <td>3.0</td>\n <td>3917.666667</td>\n <td>3273.148688</td>\n <td>494.0</td>\n <td>2368.5</td>\n <td>4243.0</td>\n <td>5629.5</td>\n <td>7016.0</td>\n </tr>\n <tr>\n <th>2015-12-31</th>\n <td>3.0</td>\n <td>5225.333333</td>\n <td>2377.587082</td>\n <td>3769.0</td>\n <td>3853.5</td>\n <td>3938.0</td>\n <td>5953.5</td>\n <td>7969.0</td>\n </tr>\n <tr>\n <th>2016-01-31</th>\n <td>3.0</td>\n <td>8453.666667</td>\n <td>536.431108</td>\n <td>7852.0</td>\n <td>8239.5</td>\n <td>8627.0</td>\n <td>8754.5</td>\n <td>8882.0</td>\n </tr>\n <tr>\n <th>2016-02-29</th>\n <td>3.0</td>\n <td>6417.666667</td>\n <td>2290.170372</td>\n <td>4194.0</td>\n <td>5242.0</td>\n <td>6290.0</td>\n <td>7529.5</td>\n <td>8769.0</td>\n </tr>\n <tr>\n <th>2016-03-31</th>\n <td>3.0</td>\n <td>2345.666667</td>\n <td>537.738164</td>\n <td>2012.0</td>\n <td>2035.5</td>\n <td>2059.0</td>\n <td>2512.5</td>\n <td>2966.0</td>\n </tr>\n <tr>\n <th>2016-04-30</th>\n <td>3.0</td>\n <td>5439.000000</td>\n <td>4444.797408</td>\n <td>471.0</td>\n <td>3639.0</td>\n <td>6807.0</td>\n <td>7923.0</td>\n <td>9039.0</td>\n </tr>\n <tr>\n <th>2016-05-31</th>\n <td>3.0</td>\n <td>2391.333333</td>\n <td>2675.235566</td>\n <td>314.0</td>\n <td>882.0</td>\n <td>1450.0</td>\n <td>3430.0</td>\n <td>5410.0</td>\n </tr>\n <tr>\n <th>2016-06-30</th>\n <td>3.0</td>\n <td>5012.000000</td>\n <td>3178.877632</td>\n <td>2858.0</td>\n <td>3186.5</td>\n <td>3515.0</td>\n <td>6089.0</td>\n <td>8663.0</td>\n </tr>\n <tr>\n <th>2016-07-31</th>\n <td>3.0</td>\n <td>8232.000000</td>\n <td>1732.765131</td>\n <td>6382.0</td>\n <td>7439.5</td>\n <td>8497.0</td>\n <td>9157.0</td>\n <td>9817.0</td>\n </tr>\n <tr>\n <th>2016-08-31</th>\n <td>3.0</td>\n <td>5452.333333</td>\n <td>4539.188621</td>\n <td>349.0</td>\n <td>3659.0</td>\n <td>6969.0</td>\n <td>8004.0</td>\n <td>9039.0</td>\n </tr>\n <tr>\n <th>2016-09-30</th>\n <td>3.0</td>\n <td>3569.333333</td>\n <td>5183.962802</td>\n <td>-735.0</td>\n <td>692.0</td>\n <td>2119.0</td>\n <td>5721.5</td>\n <td>9324.0</td>\n </tr>\n <tr>\n <th>2016-10-31</th>\n <td>3.0</td>\n <td>3487.333333</td>\n <td>2247.644174</td>\n <td>919.0</td>\n <td>2683.5</td>\n <td>4448.0</td>\n <td>4771.5</td>\n <td>5095.0</td>\n </tr>\n <tr>\n <th>2016-11-30</th>\n <td>3.0</td>\n <td>385.333333</td>\n <td>887.008643</td>\n <td>-259.0</td>\n <td>-120.5</td>\n <td>18.0</td>\n <td>707.5</td>\n <td>1397.0</td>\n </tr>\n </tbody>\n</table>\n</div>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div><div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>A perlička nakonec – agregovat se dá i podle sloupců, které nejsou v tabulce. Následující kód rozloží data na slabé, průměrné a silné měsíce podle toho, kolik jsme v daném měsíci vydělali celých tisícikorun, a zjistí celkový zisk ze slabých, průměrných a silných měsíců:</p>\n</div>\n</div>\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [87]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">bin_size</span> <span class=\"o\">=</span> <span class=\"mi\">10000</span>\n<span class=\"n\">by_month</span> <span class=\"o\">=</span> <span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">groupby</span><span class=\"p\">(</span><span class=\"s1\">'month'</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">sum</span><span class=\"p\">()</span>\n<span class=\"n\">by_thousands</span> <span class=\"o\">=</span> <span class=\"n\">by_month</span><span class=\"o\">.</span><span class=\"n\">groupby</span><span class=\"p\">(</span><span class=\"n\">by_month</span><span class=\"p\">[</span><span class=\"s1\">'sales'</span><span class=\"p\">]</span> <span class=\"o\">//</span> <span class=\"n\">bin_size</span> <span class=\"o\">*</span> <span class=\"n\">bin_size</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">agg</span><span class=\"p\">([</span><span class=\"s1\">'count'</span><span class=\"p\">,</span> <span class=\"s1\">'sum'</span><span class=\"p\">])</span>\n<span class=\"n\">by_thousands</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[87]:</div>\n\n\n\n<div class=\"output_html rendered_html output_subarea output_execute_result\">\n<div>\n<style>.lesson-content .dataframe thead tr:only-child th {\n text-align: right\n }\n.lesson-content .dataframe thead th {\n text-align: left\n }\n.lesson-content .dataframe tbody tr th {\n vertical-align: top\n }</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr>\n <th></th>\n <th colspan=\"2\" halign=\"left\">sales</th>\n </tr>\n <tr>\n <th></th>\n <th>count</th>\n <th>sum</th>\n </tr>\n <tr>\n <th>sales</th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>5</td>\n <td>30651</td>\n </tr>\n <tr>\n <th>10000</th>\n <td>15</td>\n <td>218870</td>\n </tr>\n <tr>\n <th>20000</th>\n <td>3</td>\n <td>71781</td>\n </tr>\n </tbody>\n</table>\n</div>\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In [88]:</div>\n<div class=\"inner_cell\">\n <div class=\"input_area\">\n<div class=\" highlight hl-ipython3\"><pre><span></span><span class=\"n\">by_thousands</span><span class=\"p\">[(</span><span class=\"s1\">'sales'</span><span class=\"p\">,</span> <span class=\"s1\">'sum'</span><span class=\"p\">)]</span><span class=\"o\">.</span><span class=\"n\">plot</span><span class=\"p\">()</span>\n</pre></div>\n\n </div>\n</div>\n</div>\n\n<div class=\"output_wrapper\">\n<div class=\"output\">\n\n\n<div class=\"output_area\">\n\n <div class=\"prompt output_prompt\">Out[88]:</div>\n\n\n\n\n<div class=\"output_text output_subarea output_execute_result\">\n<pre><matplotlib.axes._subplots.AxesSubplot at 0x7f4ab5588240></pre>\n</div>\n\n</div>\n\n<div class=\"output_area\">\n\n <div class=\"prompt\"></div>\n\n\n\n\n<div class=\"output_png output_subarea \">\n<img src=\"data:image/png;base64,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%0AYwLm/wFs+GhAV4F94AAAAABJRU5ErkJggg==%0A\">\n</div>\n\n</div>\n\n</div>\n</div>\n\n</div>\n \n\n\n\n\n "
}
}
}