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
.
loc
Indexer 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], :]
iloc
Druhý 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/plzen-jaro-2019:proj1:3", "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/plzen-jaro-2019/intro/pandas/static/actors.csv\">actors.csv</a> a\n<a href=\"/2019/plzen-jaro-2019/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/plzen-jaro-2019/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/plzen-jaro-2019/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,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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 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,iVBORw0KGgoAAAANSUhEUgAAAY0AAAEVCAYAAAAckrn/AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz%0AAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XdcltX/x/HXYSPgANwL914ogpp7ZFaapjlTU9PMcv3K%0A8bVv2TJLs/JbZmIOtBwNc5R7lJqDIS6cIAIOFNkg8z6/P+5b00RF9vg8Hw8eN/e5z3Wuc6Hy9hrn%0AHKW1RgghhMgMs/zugBBCiMJDQkMIIUSmSWgIIYTINAkNIYQQmSahIYQQItMkNIQQQmSahIYQQohM%0Ak9AQQgiRaRIaQgghMs0ivzuQ05ydnbWLi0t+d0MIIQoVX1/fCK112cfVK3Kh4eLigo+PT353Qwgh%0AChWl1OXM1JPLU0IIITJNQkMIIUSmSWgIIYTItCJ3TyMjqamphIWFkZSUlN9dKVZsbGyoUqUKlpaW%0A+d0VIUQOKRahERYWhoODAy4uLiil8rs7xYLWmlu3bhEWFkaNGjXyuztCiBxSLC5PJSUl4eTkJIGR%0Ah5RSODk5ydmdEEVMsTjTACQw8oH8zIXIO7fikzFTCmtLM6zMzbAwz51zgmITGkIIURQdD41m3vZz%0AHLgYcV+5uZnC2sLM9GV+N0ysLU3v//VZZklo5JN9+/ZhZWVF27Zt87srQohC6OKNOOZvP8+209dx%0AtLNiSre6lLK1IDnNQEqageQ0A8lp6cbX1H++v/ez+OS0u59lloRGPtm3bx/29va5Ghpaa7TWmJkV%0Ai1tXQhQLoZGJfLnrAhuOhVHCyoIp3eoyun0N7K2z9+tcTctcPfltksO8vLxo2rQpzZo14+WXX2bz%0A5s24u7vTokULunXrRnh4OMHBwSxevJgvvviC5s2bs3//fm7evMmLL76Im5sbbm5uHDx4EICbN2/S%0AvXt3XF1dGTduHNWrVyciwngaumDBAho3bkzjxo358ssvAQgODqZBgwa8/vrruLq68uGHHzJlypS7%0A/fP09GTq1Kl5/4MRQmTLzbhkZm86TZfP97H5xFVGP1WDv6Z1ZlK3OtkOjCdy53+jReWrZcuW+t8C%0AAgIeKMsNp06d0nXr1tU3b97UWmt969YtHRkZqQ0Gg9Zaa09PTz116lSttdbvvfeenjdv3t1tBw8e%0ArPfv36+11vry5cu6fv36WmutJ0yYoOfMmaO11nrr1q0a0Ddv3tQ+Pj66cePGOj4+XsfFxemGDRtq%0APz8/fenSJa2U0ocOHdJaax0fH69r1qypU1JStNZat2nTRp84cSIPfhpGefWzF6Koik5M0Z9tO6Pr%0Av7NV15z5u57xy3F9NToxx/cD+OhM/I6Vy1M5aM+ePfTv3x9nZ2cAHB0dOXnyJAMHDuTatWukpKQ8%0AdMzCrl27CAgIuPs+NjaWuLg4Dhw4wIYNGwDo2bMnZcqUAeDAgQP07dsXOzs7APr168f+/fvp3bs3%0A1atXx8PDAwA7Ozu6dOnCli1baNCgAampqTRp0iTXfgZCiJxxOyWdFX8Hs/jPQGJup/J8s0pM6VaH%0AmmXt87VfEho5SGv9wGOmb775JlOnTqV3797s27eP2bNnZ7itwWDg0KFD2NraPtDmw/b1MHeC5I4x%0AY8YwZ84c6tevzyuvvJKJIxFCZMWJsGjOXY/D2d4aJ3srnO2tcbSzwsbSPNNtpKQZWOcTyv92X+BG%0AXDKd65Xlrafr0ahSqVzseeZJaOSgrl270rdvX6ZMmYKTkxORkZHExMRQuXJlAFauXHm3roODA7Gx%0AsXff9+jRg6+//pq3334bAH9/f5o3b85TTz3F+vXrmT59Ojt27CAqKgqADh06MHLkSGbMmIHWmg0b%0ANrBq1aoM++Xu7k5oaCh+fn6cOHEitw5fiGJLa83yg8F89HsAhgz+P+dgbXE3RJzsrXCyt8bZzgpn%0AB2uc7O4EjBUnr8Twxc4LhEQm0trFkW+GuuLm4pj3B/QIEho5qFGjRsyaNYuOHTtibm5OixYtmD17%0ANgMGDKBy5cp4eHhw6dIlAJ5//nn69+/Pxo0b+d///sfChQuZMGECTZs2JS0tjQ4dOrB48WLee+89%0ABg8ezLp16+jYsSMVK1bEwcEBV1dXRo4cSevWrQHj2USLFi0IDg7OsG8vvfQS/v7+dy9vCSFyRkqa%0Agf/+dop1PqF0b1ieGc/UJ/Z2KhHxKdyKT+ZWQgo344yvt+KTuRSRgE9wFJGJKWR0waBhxZIsf8WN%0ATnXLFsgBsupRlzkKo1atWul/L8J05swZGjRokE89yp7k5GTMzc2xsLDg0KFDjB8/Hn9//ydu57nn%0AnmPKlCl07do1F3r5cIX5Zy/E40TEJzN+tS/ewVG80bk2U7vXxcwsc7/o0w2ayIQUbiUkcys+hYj4%0AZBxsLOhUt1ym28hJSilfrXWrx9WTM40CLiQkhJdeegmDwYCVlRWenp5PtH10dDStW7emWbNmeR4Y%0AQhRlZ67FMmalDxHxySwc3ILezSo90fbmZoqyDtaUdbDOpR7mDgmNAq5OnTocO3Ysy9uXLl2a8+fP%0A52CPhBDbT19nyjp/HGws+Om1NjStUjq/u5RnJDSEECKTtNZ8vecin+88T7OqpVnyckvKl7TJ727l%0AKQkNIYTIhNsp6Uz75QSbj1/lheaVmPti0yd6lLaokNAQQojHuB6TxKtePpy6GsP0nvV5rWPNAvlk%0A05NISU/hcuxlAmMCCYoOyvR2EhpCCPEIx0KiGLvKl8TkNDxfbkW3huXzu0tPJDk9meCYYIJigrgY%0AfZGg6CACYwIJiQ0hXRtntzVTMjV6gXP9+nUmT56Mt7c31tbWuLi48OWXX9KvXz9OnTr10O38/f25%0AevUqvXr1AmD27NnY29vz1ltvPVC3bdu2/P3337l2DEIUNxuOhTH9l5OUL2nN6tHtqFfBIb+79I/k%0AeIi9CrFXIPYqSXHXCE6JIjA1msBk42tQagwhqXEYMA6tMEdR1cKBWpal6OZQn9pWpallUZLqFg7Y%0AkrmBvxIaeUBrTd++fRkxYgRr164FjGEQHh7+2G39/f3x8fG5GxqPIoEhRM5IN2jmbT/H4j8D8ajp%0AyKKhLXG0s8qbnWsNSdGmQPgnFIyv1/4pT44BINZM8XXp0vxU0p400yUzc62pnppGndRUnk5JpXZq%0AKjVTUnFJTSW7R1HsQuP9zacJuBr7+IpPoGGlkrz3fKOHfr53714sLS157bXX7pY1b978vtHbSUlJ%0AjB8/Hh8fHywsLFiwYAHt2rXj3Xff5fbt2xw4cICZM2cCEBAQQKdOnQgJCWHy5MlMnDgRAHt7e+Lj%0A4+/OceXs7MypU6do2bIlq1evRinFH3/8wdSpU3F2dsbV1ZWgoCC2bNmSoz8PIQqzuKRUJq/1Z/fZ%0AGwx1r8bs3o2wzKWlU+/j5wUHvzIGQmrivz5UYF8eSlYCp1pQowPaoSKb0iJYcG0P0amJ9K35PB4V%0A3aldqibVS1bH0twUD3fvvah73qv7P1MK3s/cPZpiFxr54c4v7kf55ptvADh58iRnz56lR48enD9/%0Ang8++AAfHx++/vprwHh56uzZs+zdu5e4uDjq1avH+PHjsbS0vK+9Y8eOcfr0aSpVqkS7du04ePAg%0ArVq1Yty4cfz111/UqFGDwYMH584BC1FIxSSmMnDJIS7ciOfDPo14uY1L3uz45M+waSJUbgl1exrD%0AoWQlKFnZ+GpfHsz/+Td+LvIcc47Mwe+GH03LNmWx+zs0cMqbmReKXWg86owgPx04cIA333wTgPr1%0A61O9evWHDsp79tlnsba2xtramnLlyhEeHk6VKlXuq9O6deu7ZXfOauzt7alZs+bd6dkHDx7MkiVL%0AcvGohCg8UtIMjFvtQ9DNBJaPdKND3bJ5s+PAvbDhNajeFob9CpYPH/cRlxLHIv9FrDm7hpJWJfmg%0A7Qf0qd3niW5kZ9dj96SUWqaUuqGUOnVPmaNSaqdS6oLptYypXCmlFiqlLiqlTiilXO/ZZoSp/gWl%0A1Ih7ylsqpU6atlmoTM+xPWwfhVGjRo3w9fV9ZJ0nmQPM2vqfaQfMzc1JS0vLVJ2iNs+YEDlFa83M%0AX09yOCiSz/o3zbvAuHoM1g0D57ow6MeHBobWmi1BW+j9W29+OPMDL9Z5kc19N9O3Tt88DQzI3HKv%0AK4Ce/yqbAezWWtcBdpveAzwD1DF9jQW+BWMAAO8B7kBr4L17QuBbU9072/V8zD4KnS5dupCcnHzf%0AvFHe3t5cvnz57vsOHTrwww8/AHD+/HlCQkKoV68eDg4OxMXF5Ug/6tevT1BQ0N17KevWrcuRdoUo%0A7P635yK/+IUxpVtdXmhROW92eisQVvcHW0cY9gvYZjwVycWoi4zaPoqZ+2dSoUQF1jy7hv+2+S+l%0ArPNnfY3HhobW+i8g8l/FfYA7i0OsBF64p9zLtHrgYaC0Uqoi8DSwU2sdqbWOAnYCPU2fldRaHzIt%0AN+j1r7Yy2keho5Riw4YN7Ny5k1q1atGoUSNmz55NpUr/THD2+uuvk56eTpMmTRg4cCArVqzA2tqa%0Azp07ExAQQPPmzbP9S97W1pZFixbRs2dPnnrqKcqXL0+pUgVjYRch8stvx66wYOd5+rlWZmLX2nmz%0A07hwWNUX0PDyBihZ8YEqCakJzPeez4DNA7gQfYF327zL6l6raeScv5fYs3pPo7zW+hqA1vqaUqqc%0AqbwyEHpPvTBT2aPKwzIof9Q+HqCUGovxbIVq1apl8ZByV6VKlVi/fv0D5XfGaNjY2LBixYoHPnd0%0AdMTb2/uh7d47xiM+Ph6ATp060alTp7vld26iA3Tu3JmzZ8+itWbChAm0avXYmZCFKLKOXopk2s8n%0A8KjpyNx+TfNmlHdSDKx+ERIiYMRmcL4/qLTWbA/ezjzvedy4fYMX67zIJNdJlLEpGFfoc/pGeEY/%0AcZ2F8ieitV4CLAHjehpPun1x4unpycqVK0lJSaFFixaMGzcuv7skRL64FJHA2FU+VHG0ZfGwllhZ%0A5MG9gdQkWDsUbp6BIeugyv1PVQbFBDHnyByOXDtCA8cGLOi8gGZlm+V+v55AVkMjXClV0XQGUBG4%0AYSoPA6reU68KcNVU3ulf5ftM5VUyqP+ofYhsmDJlClOmTMnvbgiRryITUnhl+VHMlGL5SDdKl8iD%0AgXuGdNgwFoL3Q98lULsbWmsCowPxDvfG+7o3e0P3Ymthyyz3WQyoOwBzs4I3IWJWQ2MTMAKYa3rd%0AeE/5G0qptRhveseYfulvB+bcc/O7BzBTax2plIpTSnkAR4DhwP8esw8hhMiypNR0xnr5cDUmiTWv%0AelDdyS73d6o1bJ2GDthIUMe38LbWeO/7P3zCfYhMMt4yrmBXgRfrvMj4ZuNxsnXK/T5l0WNDQym1%0ABuNZgrNSKgzjU1BzgfVKqdFACDDAVP0PoBdwEUgEXgEwhcOHwJ2L8x9ore/cXB+P8QktW2Cr6YtH%0A7EMIIbJEa820n0/gczmKr4e0oGX13L1PoLXmUswlvPd/zNGQvfjUqkNkyHoIgfIlytOuUjvcKrjh%0AVsGNyvaVC8XMuY8NDa31w4YNP7B2qOkJqAkPaWcZsCyDch+gcQbltzLahxBCZNUXO8+z6fhVpvWs%0Ax3NNn2x51szQWnMp9hLe17zvXnK6cyZRzqEMbat3o3VFd1pVaEUV+yqFIiT+rdiNCBdCFE8/+YSy%0AcM9FBraqyviOtXK8/cTURF7f/Tq+4caBvOVKlKOtXTXcwi7iVq4lVQb/jLLIo0kPc1HeDiUsxszN%0AzWnevPndr7lz5wLGx2N9fHyeuD1/f3/++OOPHO1jr169iI6OztE2hSgI/r4YwcxfT/JUbWc+6ts4%0Ax/+Hn5KewsS9E/G/4c9brd7i976/s6vV+3xybDv9Stan6sA1RSIwQM408oytrS3+/v451t6jpkxP%0AS0vDwuLJ/2hzOoSEKAgu3ojjtdW+1HC2Y9Ew1xyfsTbNkMa0v6Zx5NoRPn7qY3rX6g3XT8HaIVCm%0AOgz9Cazy4GZ7Hil+obF1Blw/mbNtVmgCz8zNdjM7duzgvffeIzk5mVq1arF8+XLs7e3x9vZm0qRJ%0AJCQkYG1tzc6dOx+YMv3MmTNcvXqV4OBgnJ2dWbZs2QNTrXfu3JkVK1awadMmEhMTCQwMpG/fvnz2%0A2WcAuLi44OPjg7OzM15eXsyfPx+lFE2bNmXVqlX89NNPvP/++5ibm1OqVCn++uuvbB+zELkpIj6Z%0AV1Z4Y2VhzrKRbpS0sXz8Rk/AoA3M/ns2u0N2M6P1DGNgRF02Dt6zsjNOQFjCMUf3md+KX2jkk9u3%0Ab9O8efO772fOnMnAgQPvvo+IiOCjjz5i165d2NnZ8emnn7JgwQJmzJjBwIEDWbduHW5ubsTGxlKi%0ARIkMp0z39fXlwIED2Nra8vnnnwMPTrUOxrOUY8eOYW1tTb169XjzzTepWvWf4TWnT5/m448/5uDB%0Agzg7OxMZabyR98EHH7B9+3YqV64sl7FEgZeUms6rXj7cjEtm3dg2VHUskaPta62Z5z2PjYEbeb3Z%0A6wxtMNQ4ynt1P0i7Da9sg9JVH99QIVP8QiMHzgiy4nGXpw4fPkxAQADt2rUDICUlhTZt2nDu3Dkq%0AVqyIm5sbACVLlnxoG71798bW1hZ49FTrXbt2vTvnVMOGDbl8+fJ9obFnzx769++Ps7MzYJzKBKBd%0Au3aMHDmSl156iX79+mXp5yBEXjAYNFPX++MfGs23Q1vSrGrGkwFmKGgfRFyAlARIvQ2ppteUxPu+%0AX2yIYLVFIsOS4LUd8+H3D4yLJ1nYGOeTKt8w144vPxW/0CigtNZ0796dNWvW3Fd+4sSJTN+0s7P7%0A57rpo6ZBf9zU6lrrDPe5ePFijhw5wu+//07z5s3x9/fHyangDkISxddn28/xx8nrvPNsA3o2rpD5%0ADf/+GnbMur/MwgYsSxgvN1nagmUJVluls8gikT7mjrztXA9V2c5Yx7IE1OkOVVvn7AEVIBIaBYSH%0AhwcTJkzg4sWL1K5dm8TERMLCwqhfvz5Xr17F29sbNzc34uLisLW1feyU6XemWu/Spct9U637+fk9%0Ati9du3alb9++TJkyBScnJyIjI3F0dCQwMBB3d3fc3d3ZvHkzoaGhEhqiwFm6P4jFfwYyzKMao5+q%0AkfkND31jDIwGvaHXfFNIlACz+2+cb7y4kU8PvkO3at2Y3XEeZmbF69eoPHKbR+7c07jzNWPG/cuD%0AlC1blhUrVjB48GCaNm2Kh4cHZ8+excrKinXr1vHmm2/SrFkzunfvTlJS0mOnTH/YVOuZ0ahRI2bN%0AmkXHjh1p1qwZU6dOBeDtt9+mSZMmNG7cmA4dOtCsWcGaSE2IlX8H89HvZ3i2SUVmP98o84/WHloE%0A2/9jDIz+y8ChPFjbPxAYuy/v5t2/38WjogefdvgUi2IWGACqqK3m1qpVK/3vcQ9nzpyhQYO8WT9X%0A3E9+9iKv/HgkhP9sOEmPhuX5ZugTPFp7eDFsmw71n4MBK+5bi/teh64eYsLuCTRwaoBnd09KWObs%0AjfX8ppTy1Vo/dq0EOdMQQhR6P/mE8p8NJ+lSvxz/G9Ii84FxZMk/gdF/+UMD4/jN40zaOwmXUi4s%0A6rqoyAXGk5DQEEIUar8du8K0X07Qvo4zi4a6Ym2RyenEj3rC1reh3rPGwHjIiO3zUed5fdfrONs6%0As6T7knxbZrWgkNAQQhRav5+4xtT1/njUcGLJy62wsXyCwPjjLajXy3hJ6iGBERIbwrid47Axt8Gz%0AhyfOts451/lCqvjdxRFCFAnbT19n4tpjtKruyPcjW2FrlcnA8P7eGBh1n4EBKx8aGOEJ4YzdOZY0%0AQxoreq6gsn3lDOsVNxIaQohCZ8/ZcN740Y+mVUqx7BU3Slhl8leZzzL4fSrUeRpeenhgRCdFM27n%0AOKKSovj+6e+pVTrnZ8UtrCQ0hBCFyp/nb/LaKj8aVCzJildaY2+dyV9jvitgyxRjYAxcBRYZP4Ke%0AkJrA+F3jCY0LZXH3xTR2fmC5n2JN7mnkkTtTozdu3JgBAwaQmJiYp/v/+OOP744RuXea9oULFz5x%0AW++88w5ffvllLvRSiEf7+2IEY718qF3OHq9RrSllm8kJCH1XwuZJUKfHIwMjKimKCbsncCbyDJ93%0A+hy3Cm452PuiQUIjj9yZe+rUqVNYWVmxePHiXN9nenr63e9nzZqFv78//v7+d/vi7+/PxIkTc70f%0AQuSEo5ciGb3SBxcnO1aPcad0iUyuT+G3CjZPhNrd4KWHB4b/DX8GbB7AiZsn+KT9J3Sq2innOl+E%0AFLvLU58e/ZSzkWdztM36jvWZ3np6puu3b9+eEydOALBgwQKWLTOugjtmzBgmT57MZ599ho2NDRMn%0ATmTKlCkcP36cPXv2sHv3bpYvX87q1asfOo26i4sLo0aNYseOHbzxxhsMGjTosf25dOkSo0aN4tat%0AW5QvX57ly5dTpUqVh5bf64svvsDT0xNLS0uaNGnC6tWrn+AnJ0Tm+F6O4pXlR6lU2obVY9xxtMtk%0AYBxbDZvehFpdYeAPYGnzQBWtNV4BXnzp+yUV7CqwutdqGjoVzckGc4KcaeSxtLQ0tm7dSpMmTfD1%0A9WX58uUcOXKEw4cP4+npybFjx+jQoQP79+8HwMfHh/j4eFJTUzlw4ADt27e/bxp1Pz8/WrVqxYIF%0AC+7uw8bGhgMHDmQqMMA45ciYMWM4ceIEAwYMYPLkyY8sv9dnn32Gv78/x48fvztNuxA56URYNCOX%0AHaWsgzU/vupBWYfMTYfDsR9g4xtQqzMM+jHDwIhJjmHi3onM95lPp6qdWP/8egmMxyh2ZxpPckaQ%0Ak+5dT6N9+/aMHj2ab7/9lr59+96dnbZfv37s37+f8ePH4+vrS1xcHNbW1ri6uuLj48P+/ftZuHDh%0AQ6dRv+PedToy48iRI2zZsgWA4cOH89///veR5fdq1KgRw4YNo0+fPrzwwgtP+FMR4tFOXYlh2NIj%0AlLaz5MdXPShf8sFf/Bny/xE2ToCanR4aGKciTvHWn28RnhjOdLfpDG0wNMeXgS2Kil1o5JeM1tN4%0A2LxflpaWuLi4sHz5ctq2bUvTpk3Zu3cvgYGBNGjQgMDAwAynUb/j3inSc9v27dv5888/2bhxIx99%0A9BGnTp3C3DyTz8sL8Qhnr8fy8vdHcLCx5McxHlQqbfvoDQzpcHGXceDexZ3GwBi8xjid+T201vx4%0A9kfm+8ynnG05vHp60aRsk1w7jqJGLk/low4dOvDbb7+RmJhIQkICGzZsoH379nc/mz9/Ph06dKB9%0A+/YsXryY5s2bo5TCw8ODgwcPcvHiRQASExPvLrCUFR4eHqxfvx6A1atX06FDh0eW35Genk5YWBhd%0AunRh3rx53Lx5M8+fChNF0/HQaIYtPYKVhRk/vur+6FX3Em7BgS9gYXP48SXjcs6dZsLgtQ8ERlxK%0AHP/35/8x9+hcnqr0FOufXy+B8YTkTCMfubq6MnLkSFq3Ni7YMmbMGFq0aAEYL2F9/PHHtGnTBjs7%0AO2xsbO4Gyr3TqCcnJwPw0UcfUbdu3Sz14+uvv2b06NF88sknd294P6r8jrS0NIYMGUJcXBwGg4Hp%0A06fj4OCQpT4IAZCYksYXO8/z/YFLlHOw4YdX3anulMGZs9ZwxRe8l8KpXyE9GVzaQ/cPjJMPZjDx%0AYMCtAN768y2uxl/l/1r+HyMajZDLUVkgU6OLXCU/e5FZ+y/c5D8bThIaeZsh7tWY3rP+g+MwUhLh%0A1C/GsLjmD1b20GwwuI2Gchn/PdNa89P5n/j06KeUtinN/I7zaVGuRR4cUeGS2anR5UxDCJGvohJS%0A+PD3AH71u0JNZzvWjfXAvea/VoS8FWicAuTYakiKhrINjKvrNRsE1g8/u01ITeD9Q++z9dJW2lVu%0AxydPfUIZmzK5fERFm4SGECJfaK3ZdPwqH2wOIOZ2Km90rs0bXWr/M1OtIR0u7DDe2A7cDWYW0OB5%0AcBsD1dvBYy4tnY86z//t+z9C4kKY5DqJUY1HYabkNm52ZSs0lFJTgDGABk4CrwAVgbWAI+AHvKy1%0ATlFKWQNeQEvgFjBQax1samcmMBpIByZqrbebynsCXwHmwFKt9dys9lVrLdcv81hRu/Qpcs6V6Nv8%0A97dT7Dl7g2ZVSrF6dGsa2CfC5X1w44zx69JfEBMCDhWh03/AdTiUrPjYttMN6WwM3MicI3MoaVWS%0ApT2WynQgOSjLoaGUqgxMBBpqrW8rpdYDg4BewBda67VKqcUYw+Bb02uU1rq2UmoQ8CkwUCnV0LRd%0AI6ASsEspdeeO7jdAdyAM8FZKbdJaBzxpX21sbLh16xZOTk4SHHlEa82tW7ewscnkc/WiWEg3aNb9%0AdZxte/ZQm1C21o6jvlkYyuuM8bLTHXbloFJzePoj45oXD1lR7w6DNuB/w5/twdvZcXkHEbcjcK/o%0Aztz2c2UNjByW3ctTFoCtUioVKAFcA7oAQ0yfrwRmYwyNPqbvAX4GvlbG3+B9gLVa62TgklLqItDa%0AVO+i1joIQCm11lT3iUOjSpUqhIWFcfPmzSc+QJF1NjY2D0w7IoqR9FS4dgJuBMCNMySEnST56imG%0AGCIZcucq0c1SxhvYjfpCuYbG78s1ALvH/6LXWnMi4oQxKIJ3EJ4YjrW5Ne0rt6dnjZ50q9YNczMZ%0AM5TTshwaWusrSqn5QAhwG9gB+ALRWus0U7Uw4M7KJZWBUNO2aUqpGMDJVH74nqbv3Sb0X+XuGfVF%0AKTUWGAtQrVq1Bz63tLSkRo0aT3iEQogsS46H1f0g9AgAqWbWBKZV5pJZU2o2cqNxcw9UuQZQstJj%0A703cS2tNwK0AtgdvZ3vwdq4mXMXSzJJ2ldsxpeUUOlXthJ1l3g1uLY6yc3mqDMb/+dcAooGfgGcy%0AqHrnwnZGfzP0I8ozumOV4UVyrfUSYAkYH7l9ZMeFELkrLRnWDYMwby57fMA7p8pzMMKO3s2r8N/n%0AGuJkn8m5o0y01pyLOnc3KELjQrFQFrSp1IYJLSbQuWpnHKxkfFBeyc7lqW7AJa31TQCl1K9AW6C0%0AUsrCdLZRBbhqqh8GVAXClFIWQCkg8p7yO+7d5mHlQog8km7QxCenEZeUSnxyGvFJacQlpRF39/tU%0A0+dpJNzjwa5dAAAgAElEQVROYnDIe7gm7OcLuyl8ta82lUvb8v0rjelcr1ym9qe1Jjk9mZC4EHYE%0A72B78HaCY4MxV+Z4VPTg1Sav0qVaF0pZl8rlIxcZyU5ohAAeSqkSGC9PdQV8gL1Af4xPUI0ANprq%0AbzK9P2T6fI/WWiulNgE/KqUWYLwRXgc4ivEMpI5SqgZwBePN8jv3SoQQucBg0Fy4Ec/RS7c4fCkS%0A70uR3IhLfux2SoGDtRlzzJbgatjPModxHChTlzY1jtK4ii37Iw+w60Ayt9Nuk5yeTFJaEknpSSSl%0AJd33PjktmaT0pLvtmikz3Cq4MbzRcLpV6yZjLAqA7NzTOKKU+hnjY7VpwDGMl4h+B9YqpT4ylX1v%0A2uR7YJXpRnckxhBAa33a9ORVgKmdCVrrdACl1BvAdoyP3C7TWp/Oan+FEA9KN2gCrsZy5NItjl6K%0AxDs4kqjEVAAqlrKhTS0najrbY29jgYO1hfHVxgJ76zuvljjYWFDC0gy1YxYc3oPuOAPrCtUI9P4M%0AnagJCrTBxsIGG3Pjq7W5NbYWtthZ2OFk43S3/N91HG0caV+lvTz9VMAUi2lEhBBGKWkGTl6JuRsS%0AvsFRxCUbn1up7lSC1i6OuNd0wr2GI1XK2Gb+EfV9n8K+OSS3HsuHJa3ZGLiRTlU78clTn2BvZZ+L%0ARyRyikwjIoRAa41fSBQHLtziaPAtfC9HkZRqAKB2OXt6N69E6xqOuNdwokKpLI6pObwY9s0hvGl/%0AphjCOBl4ivHNxvNas9dkBHYRJKEhRBGktebP8zf5avcFjoVEoxQ0qFCSQW7V8KjpSCsXR5yf8Cmm%0ADPmvgW3TOVa3M1NSA7l9+zZfdv6SrtW6Zr9tUSBJaAhRhGit2XfOGBb+odFULm3LRy805vmmlShV%0A4tGjqp/YmS2wcQI/1XBlTvplKtlUYmmPpdQuUztn9yMKFAkNIYoArTV7z93gq10XOB4WQ+XStszp%0A24T+LatgZZELl4iC9pH68yt8UrU2PxFBu4rt+LT9p/IYbDEgoSFEIaa1ZveZGyzcc4ETYTFUKWPL%0A3H5N6OeaS2EBEOZDxLqhTK1ciWPmtxnVeBQTW0yUKTuKCQkNIQohrTU7A8JZuOcCp67EUs2xBJ+9%0A2JS+rpWxNM/Fm8/hAZxaN4BJFRyJtbRkXruP6FmjZ+7tTxQ4EhpCFCIGg2ZHQDgLd18g4Fos1Z1K%0AMK9/U15okcthARAZxMb1/fjAyY6yduVY3XUR9Rzr5e4+RYEjoSFEIWAwaLafvs5Xuy9w9nocLk4l%0AmD+gGS80r4RFbocFkBodyuc/9eGHkpa4OzVmXrdFMjq7mJLQEKKAuxAex5trjnH2ehw1ne1Y8FIz%0AejfLm7AAiIwK4u1f+3LUBoZV7cH/dfoUCzP51VFcyZ+8EAXYxRvxDPY0Ti/+5cDmPN+sEuZmebOQ%0AmEEbOH7lEDN2vU6EeTof1xtBb4+382TfouCS0BCigLoUkcAQz8OAZu1YD2qXy93pv1MNqQTcCsAv%0A3A+/q4c5dsOPmPQkyqen4dV8Co1ajs3V/YvCQUJDiAIo5FYiQzwPk2bQrHk1dwIjMTWR4zeP43fD%0AD79wP07cPE5SunFG2+qpaXRJSsLVogyd271DqSYDc3z/onCS0BCigAmLSmSw52Fup6bz4xgP6lXI%0AmcCISoq6GxB+4X6ciTxDuk7HDEU9M1tejInCNTEBV0snnBsPgCYDoHzjJ1pZTxR9EhpCFCDXYm4z%0A2PMwcUmp/PiqBw0rlcxWe0lpSSw8tpCDVw4SFBMEgJWZFY0dqjHKugotrwTQLC4Se5syxnW6mwyA%0Aqu5gJhMNioxJaAhRQITHJjF4yWGiE1JZNcadxpWzNyVHSnoKU/ZN4eCVg7Sr3I7ny7bCNeoqjc/t%0AwypwD1jaQf1njUFRqzOY5/DcVKJIktAQogC4EZfEYM/D3IxLxmu0O82rls5We6mGVKb9NY0DVw7w%0ArnNbBpz1gYjzYGYJtbtBjw+h3jNgZZdDRyCKCwkNIfLZrfhkhnoe4Vp0EitHtaZl9ewNmks3pDNr%0A/yx2h+xmRmoJBnivhepPQZsJ0KA3lHDMoZ6L4khCQ4h8FJWQwtClRwiNSmT5yNa0rpG9X+gGbeC9%0Av99ja/BWJsckMjQxBgb9aLwMJUQOkNAQIp/EJKYy7PsjBEUksGyEG21qOWWrPa01cw59wMbAjYyP%0AimG0fV0YvgxKV8uhHgshoSFEvohNSmX4siNcCI9nyfCWPFXHOVvtaa2Zv38W6y5t5pXoWMY3HAFd%0A35Wb2yLHSWgIkcfiklIZsewoAddiWTysJZ3qlct2m19vfx2v8AMMTkhhSs8lqHpP50BPhXiQhIYQ%0AeSghOY1RK7w5ERbDN0Nc6dqgfPYaTEnEc8NAliQF86KhBDOG/IEqXTVnOitEBiQ0hMgjt1PSGb3S%0AG7+QaBYOakHPxhWy1+CNs6z6bSgLrVN4tkQ1/vvCr5hZWudMZ4V4CBn2KUQeSEpNZ4yXN0cvRbLg%0ApWY827Ri1hvTGo6tZv0PPfnMOoXuTs346MWNmEtgiDwgZxpC5LKE5DTGrvLh78BbzO/fjD7NK2e9%0AseR4+P3/2Bi0mQ/LOtGxggefdlsk61uIPCN/04TIRTGJqYxccZQTYTF8PqAZ/VyrZL2x66fgp5Fs%0AS7rCu+XK4lGhNZ93+xpLeUJK5CG5PCVELrkZl8wgz8OcvhLLN0Ncsx4YWoPPcljald06nhnlytG8%0AXAu+6rIQa3O5JCXyVrZCQylVWin1s1LqrFLqjFKqjVLKUSm1Uyl1wfRaxlRXKaUWKqUuKqVOKKVc%0A72lnhKn+BaXUiHvKWyqlTpq2WaiUzNEsCocr0bcZ+N0hgiMS+H5kq6zf9DYYYOt02DKZA1Wb8XaZ%0AEjRybsyibosoYVkiZzstRCZk90zjK2Cb1ro+0Aw4A8wAdmut6wC7Te8BngHqmL7GAt8CKKUcgfcA%0Ad6A18N6doDHVGXvPdj2z2V8hct2liAReWnyIm3HJrBrdmvZ1ymatofRU+O01OPodR11fYrJ5JLVL%0A1+bb7t9iZykTDYr8keXQUEqVBDoA3wNorVO01tFAH2ClqdpK4AXT930AL210GCitlKoIPA3s1FpH%0Aaq2jgJ1AT9NnJbXWh7TWGvC6py0hCqSz12MZsPgQt1PTWTPWg1YuWZxLKvU2rHsZTqzDv+1Y3og7%0ATlWHqnzX/TtKWmVvjQ0hsiM7Zxo1gZvAcqXUMaXUUqWUHVBea30NwPR6Z7hrZSD0nu3DTGWPKg/L%0AoPwBSqmxSikfpZTPzZs3s3FIQmTdsZAoBn53GAszxfpxHllfDyMpFlb3h/PbCOg8jdcjDlKuRDk8%0Ae3hSxiZ7M+AKkV3ZCQ0LwBX4VmvdAkjgn0tRGcnofoTOQvmDhVov0Vq30lq3Kls2i5cChMiGvwMj%0AGLb0CKVsLfnptTZZX9M7IQJWPgehhwl8Zg7jrm3D3soez+6eONtmb34qIXJCdkIjDAjTWh8xvf8Z%0AY4iEmy4tYXq9cU/9e+c3qAJcfUx5lQzKhShQdp8JZ+RybyqVtuWn19pQ1TGLN6hjwmBZT7h5jtAX%0AFvLq5Z+xMLNgaY+lVLTPxmBAIXJQlkNDa30dCFVK1TMVdQUCgE3AnSegRgAbTd9vAoabnqLyAGJM%0Al6+2Az2UUmVMN8B7ANtNn8UppTxMT00Nv6ctIQqEzcevMm6VL/XKO7BuXBvKl7TJWkMRF+D7pyE+%0AnOsDvmfMeS9SDal4dvekWkmZ2lwUHNkd3Pcm8INSygoIAl7BGETrlVKjgRBggKnuH0Av4CKQaKqL%0A1jpSKfUh4G2q94HWOtL0/XhgBWALbDV9CVEgrDkawn82nMTNxZHvR7TCwSaLg+yu+sPqFwGIGPwD%0Arx6bR2xKLEufXkrtMrVzsMdCZJ8yPphUdLRq1Ur7+PjkdzdEEbd0fxAf/X6GjnXLsnhYS2ytzLPW%0AUPBBWDMIbEoRM3AVo3w+IjQulMXdFuNa3vXx2wuRQ5RSvlrrVo+rJ9OICPEEtNZ8uesCX+2+QK8m%0AFfhyYAusLLJ4lff8dlg/HEpXI2HQD4w/MptLMZf4pus3EhiiwJLQECKTtNZ8uOUMyw5eon/LKszt%0A1wQL8ywGxomfjAP3yjfm9qAfmXBoFgG3Avii0xe0qdQmZzsuRA6S0BAiE5LT0vnPr6f4xS+MkW1d%0AePe5hpiZZXFWm6Oe8Mfb4PIUKQNWMOXQO/iF+zG3/Vw6V+ucsx0XIodJaAjxGLfik3lttS/ewVFM%0A7laHSV3rkKVp0LSGv+bD3o+gXi/S+nky/e//cvDKQd5v+z69avbK+c4LkcMkNIR4hLPXYxm9woeI%0A+GQWDm5B72aVstaQwQA7ZsHhRdBsMIbnF/LuodnsCtnFdLfp9KvTL2c7LkQukdAQ4iF2BYQzae0x%0A7KwtWD+uDc2qln7yRgwGuLAdDnwBoUfA/TV0jzl8fHQOm4M280bzNxjWcFjOd16IXCKhIcS/aK35%0A7q8gPt12lsaVSuE5vBUVSj3hoL30VDj5Mxz8Cm6egVLV4Pmv0C2Gs8DvC9afX8+oxqMY23Rs7hyE%0AELlEQkOIeySnpTPz15P86neFZ5tWZH7/Zk82BiMlAfy84O+vITYMyjWEvkugcT8wt2Tx8W9ZcXoF%0Ag+oNYrLr5KzdGxEiH0loCGFyMy6Zcat88AuJZkq3ukzsWjvzv9QTbsHR7+DoErgdBdXawnNfQJ3u%0AYGrD67QXi/wX0btWb2a6z5TAEIWShIYQQMDVWF718uFWQjLfDHHl2aaZnCAwOsR4VuHnBWm3oV4v%0AaDcZqrnfrRIWF4ZXgBdrzq6he/XuvN/2fcyUrLQsCicJDVHsbTt1nSnr/Clla8nPr7XN3DoY4aeN%0A9ytO/mw8k2g6ENpOhHL171bxv+GPV4AXu0N2Y4YZL9Z5kVnus7Awk392ovCSv72i2NJas2hfIPO2%0An6NZ1dJ4vtySco+apVZrCDkEB740PhFlaQfur0Gb16GUcRb/NEMae0L2sDJgJSdunsDByoGRjUYy%0ApP4QytuVz6MjEyL3SGiI4iU9DZKiSY6PYuFWX/zOh/DfWjYMb1EGy4ATxlXzkmMhKcb0GvvPa1I0%0AJNyEEk7QeRa4jYESxuVc41Pi2XBxAz+c+YEr8Veo6lCVma1n8kLtFyhhmcX1NYQogCQ0RPFx4yys%0A7gexV7AG3gawAq6Yvu6wtAObkmBd0vhqUxpKVzO+r9gUmg0BK2MQXIu/xg9nfuCXC78QnxqPazlX%0A3m71Np2qdsLcLIsz3wpRgEloiOIh/DSs7E2qVvzPfDThqTa89FQjWtat/k84WJu+zB//z+JUxCm8%0ATnux4/IOAHpU78HLDV+mSdkmuX0kQuQrCQ1R9F07AV59SMaSF+JnEFOiOktHu9GwUsknaibdkM6+%0A0H14BXjhd8MPe0t7hjUYxtAGQ2U5VlFsSGiIou2qP3j14bay5bnY6ViWrcVvo1tTziHzI7zTDen8%0AcekPlpxYQnBsMJXsKjHNbRp9a/fF3so+FzsvRMEjoSGKriu+sKovCcqOZ6Kn4Vy1LstHtqZUicwt%0Ay5puSGdb8DYWH19McGwwdcrUYV6HeXSr3k0emxXFlvzNF0VTqDes7kesmQPPRE2jZp0GfPdyS0pY%0APf6vfLohne3B21l8YjGXYi5Ru3RtPu/4Od2qd5NBeaLYk9AQRU/IYfTq/kSblaZX1DSaNWrEV4Ob%0AY23x6KeZ0g3p7Li8g8XHFxMUE0Tt0rWZ33E+3at3l7AQwkRCQxQtwQfQP7zELTMnno2eRoeWTfnk%0AMcuyGrSBHcHGsAiMCaRWqVrM6ziPHtV7SFgI8S8SGqLoCPoT/eNAws3K8XzMNHo/5cqsXg0euiyr%0AQRvYeXkni48v5mL0RWqWqsm8DvPoXr27jLEQ4iEkNETRELgHvWYwV1VF+sROY3h3N97skvEstQZt%0AYNflXXx7/FsuRl+kRqkafNbhM3pU7yFhIcRjSGiIwu/CTvTaoYSYVaJv3HQmPu/ByHY1HqiWlJbE%0AvtB9eJ705HzUeVxKujC3/Vx6uvSUsBAikyQ0ROF2bht6/csEqaq8lDCdWQPa8WLLKnc/TjWkcujq%0AIbZd2sae0D0kpCbgUtKFT9p/wjMuz0hYCPGEJDRE4XVmC/qnkZxX1Rl6ewafDG1Pj0YVSDek4xvu%0Ay9bgrey8vJOY5BgcrBx42uVperr0pHWF1hIWQmSRhIYonAI2on8eRQA1GZU6gy9HdsC+1BXmHl3B%0A9uDtRNyOwNbCls5VO/NMjWdoW6ktVuZW+d1rIQq9bIeGUsoc8AGuaK2fU0rVANYCjoAf8LLWOkUp%0AZQ14AS2BW8BArXWwqY2ZwGggHZiotd5uKu8JfAWYA0u11nOz219RBJz6Bf3LqxynFuMsX6Fz+3N8%0AeHwJVxOuYmVmRYcqHehZoycdqnTA1sI2v3srRJGSE2cak4AzwJ3Z3z4FvtBar1VKLcYYBt+aXqO0%0A1rWVUoNM9QYqpRoCg4BGQCVgl1Kqrqmtb4DuQBjgrZTapLUOyIE+i8LqyBKCds9iWSkXNtvbY7D8%0Alu2hFnhU8uCNFm/QuWpnmQ9KiFyUrdBQSlUBngU+BqYq4/ONXYAhpiorgdkYQ6OP6XuAn4GvTfX7%0AAGu11snAJaXURaC1qd5FrXWQaV9rTXUlNPKZwaD5bPs5NvlfeXzlh9AYF8LTaNOr8T33vdd365qp%0AW3Sw8+Sq/RXOVK4AOo2mztV5oe7rdKvWjTI2ZbJ/YEKIx8rumcaXwDTAwfTeCYjWWqeZ3ocBlU3f%0AVwZCAbTWaUqpGFP9ysDhe9q8d5vQf5W7Z9QJpdRYYCxAtWrVsnE44nHS0g3M+PUkP/uG0bleWZzt%0ArbPcllKgUMZXBdz53vRZqk7kWupRrqb8yY20c+xWUD3dkVb2/XjrqUE0Kl81pw5LCJFJWQ4NpdRz%0AwA2tta9SqtOd4gyq6sd89rDyjOZv0BmUobVeAiwBaNWqVYZ1RPalpBmYvO4Yf5y8zuRudZjUtU6G%0Ag+eyIzk9mf1h+/k96Hf+CvuLFEMK1dIVr8XF0ct9Ki4eE3N0f0KIJ5OdM412QG+lVC/ABuM9jS+B%0A0kopC9PZRhXgqql+GFAVCFNKWQClgMh7yu+4d5uHlYs8djslnddW+/Ln+Zu882wDxrSvmWNtpxvS%0A8Qn34feg39l1eRdxqXE42TjxUsV29Dq+mcZpoAb+AC7tcmyfQoisyXJoaK1nAjMBTGcab2mthyql%0AfgL6Y3yCagSw0bTJJtP7Q6bP92ittVJqE/CjUmoBxhvhdYCjGM9A6piexrqC8Wb5nXslIg/FJaUy%0AeqUP3sGRzOnbhCHu2b8EqLXmbORZfg/6na2XtnLj9g1KWJSgW/VuPFvjWVpfO4fFH2+BYy14ZS04%0A5lxICSGyLjfGaUwH1iqlPgKOAd+byr8HVpludEdiDAG01qeVUusx3uBOAyZordMBlFJvANsxPnK7%0ATGt9Ohf6Kx4hKiGFEcuPEnA1li8HNqdP88qP3+gxdgTv4Bv/bwiKCcLCzIKnKj/F2zXfpmOVjtia%0AWcHOd+HQ11CrCwxYATalsn8gQogcoe48oVJUtGrVSvv4+OR3N4qEG7FJDPv+CMG3Elk0xJVuDctn%0Aq72I2xHMOTKHnZd3UrdMXQbWG0iP6j0obVPaWCEpFn4ZAxe2Q+tx8PQcMJfxp0LkBaWUr9a61ePq%0Ayb9IkaGwqESGLT3Cjbhklo90o11t5yy3pbVmS9AW5h6dS1JaEpNcJzGy0cj7l0yNugxrBsHNc/Ds%0A5+A2JgeOQgiR0yQ0xAMCb8YzbOkREpLTWDXanZbVsz4G4nrCdT449AH7r+ynednmvN/ufWqW+tf9%0AiZAjsHYIpKfCsJ+Nl6WEEAWShIa4T8DVWIYvO4LWsGasB40qZe1+gtaany/8zOc+n2PQBma0nsGg%0AeoMenCjw+DrY9AaUrAxD1kPZuhk3KIQoECQ0xF1+IVGMXHYUO2sLVo12p3a5rE3HERoXyvt/v8+R%0A60doXaE1s9vOpqrDvwbiGQyw9yPY/zm4tIeXvKCEYw4chRAiN0loCAD+vhjBGC8fyjpYs3q0O1Ud%0ASzx6g7hwCD1yX1G6NrAm/DALr+zADDPerd6H/mXdUKHHMD5Id4+T6+HMZnAdDr0+BwuZgVaIwkBC%0AQ7D7TDjjf/DDxakEq0e7U66kzaM3OLcVfhsPt6PuFgVZWvCesxP+Nta0T7zNuxGRVAj83yMaUdDj%0AY2gz4c4cIkKIQkBCo5jbfPwqU9b506BiSVaOao2j3SP+x5+WArveg8OLoEJTGLSGNMsSrAjewreB%0Av2BjZsWcBiN4ruJTj59exLYMlMr+mA8hRN6S0CjG1h4NYeaGk7hVd+T7ka1wsLF8eOXIIPh5FFw9%0AZhxD0eNDzsUG8+7f7xJwK4Du1bvzH/f/4Gyb9UdzhRAFn4RGMfX9gUt8uCWADnXL8t2wlthaPWL5%0A01O/wKZJYGYGA1dzplxtfvGZxy/nf6GkdUk+7/g5PVx65F3nhRD5RkKjGPp6zwXm7zjP043Ks3Bw%0AC6wtHhIYqbdh2wzwXUFMlZb84dqfDRdXceboGazMrOhduzdTXKf8M6JbCFHkSWgUI1obF0/6dl8g%0AfVtUZl7/pliYZzQDPXDzHIafRuIdG8ivDduxKzmclJPfUt+xPjNbz+TZms9SylrmhBKiuJHQKCYM%0ABs0HWwJY8Xcwg1tX4+MXGmNmlsHNaq25fnQxG4/MY4OdLVcqlschPZp+dfrRr04/Gjg1yPvOCyEK%0ADAmNYiDdoJnxywl+8g1j9FM1eOfZBg883ZSansq+S1v59fA8/k6LwlDKDveyzXmz/iC6VuuKjcVj%0AHsMVQhQLEhpFXGq6gSnr/Nly4hoTu9ZhSrf7V9sLjA7k1wu/suXCb0SmxlIuLY0xTs15ofNcqpaq%0Ano89F0IURBIaRVhSajpv/OjHrjM3mPlMfcZ1rHX3s5T0FN7+8232hO7BAjM6JybSN9WCts9/h3mN%0ADvnYayFEQSahUUQlpqQx1suXAxcj+LBPI15u43L3M4M28M7Bd9gTuofXLcrzUqAvTjW7Qt/FYCfj%0ALIQQDyehUQTFJqUyark3fiFRzB/QjP4tq9z3+RdHP2Prpa1Mik9lzK1j0PV9aPOGcRyGEEI8goRG%0AEROVkMLwZUc5cy2W/w125dmmFf/5MCWB1TsnsyLiMINi4xhdsjG88ANUbpl/HRZCFCoSGkXIjbgk%0AXl56lEu3ElgyvCVd6puWZ02OB29Ptvsu4rNS1nRV9sx4fjHKpV2+9lcIUfhIaBQRV6JvM9TzMDfi%0Aklkx0o22tZ2Na24fXQKHvsFbJzCzYgWal6rF3OfWYC6P0AohskBCowgIjkhg6NIjxCalsmp0a1qW%0AN4c/58GhryEpmou1OzJJhVPFrjz/e2aFjLkQQmSZ3Pks5M6HxzHgu0MkpqSxbngDWl5aAl82Ma6K%0AV60N11/+hdesE7GxtGNxt8Uy9YcQIlvkTKOQSk038OORED7fcY5yFomsa3EMp3WjITkW6j0LHacR%0A61yT8VtHEJ8az4qeK6hkXym/uy2EKOQkNAqhvedu8PHvZ7hx4zrvl91Hn6RNmPnGQ4PnocM0qNiU%0AlPQUJu96jeDYYL7tZpxoUAghsktCoxA5Hx7HR7+fwed8KFNL7mGEwyYs42KhYR9jWFRoDBgH7806%0AMAvv69580v4TPCp65HPPhRBFhYRGIRCZkMIXO8/z89FAhlvt4TuHTdimRELdZ6DLLKjQ5L76n/t8%0AzrbgbUxtOZXnaj6XT70WQhRFEhoFWEqaAa9DwXy9+yw90/ZyyG4jpVPDoXJ76PoeVHV7YBuv0154%0ABXgxpP4QRjYamed9FkIUbVl+ekopVVUptVcpdUYpdVopNclU7qiU2qmUumB6LWMqV0qphUqpi0qp%0AE0op13vaGmGqf0EpNeKe8pZKqZOmbRaqf8/nXURprdlx+jpPL9jL8a3fs83iLeZaLKF0uaowfCOM%0A3JJhYGy7tI15PvPoXr0709ymPTD9uRBCZFd2zjTSgP/TWvsppRwAX6XUTmAksFtrPVcpNQOYAUwH%0AngHqmL7cgW8Bd6WUI/Ae0ArQpnY2aa2jTHXGAoeBP4CewNZs9LnAC7gay4ebT1Pi8k6W2vxCLatg%0AcGwIXeZDvWfgIUHgfd2b/xz4D67lXPmk/SeYmz1izW8hhMiiLIeG1voacM30fZxS6gxQGegDdDJV%0AWwnswxgafQAvrbUGDiulSiulKprq7tRaRwKYgqenUmofUFJrfchU7gW8QBENjRtxSSzYcZ4Q323M%0AtFpPU6sL6NI1ofP30KjfIycTPB91nkl7JlHNoRoLuyzE2tw6D3suhChOcuSehlLKBWgBHAHKmwIF%0ArfU1pVQ5U7XKQOg9m4WZyh5VHpZBeUb7H4vxjIRq1apl72Bymdaa+OQ0ohP/v707j66qyhI4/Nsh%0ACZAQEkIYwhgIKAq2iAFRBAERnFaJli5FSkVJYwGiNsu27dLucllDW4W6bBWRSQQaZ0QoUQEVFNTC%0AhMEAIpKQIGEKIROQBDLs/uNeIEAgL+Mbsr+1WHnvvHve3TfvPHbOvfecU0Ju4QlyC0tI2ZPHt19/%0AzhTeZVDoVsojOsDQV5C+90KTkAu+34FjB5j4xUSaBzdnxogZNnjPGFOvap00RKQFsBh4XFULLnAe%0AvbIXtAbl5xaqzgJmASQkJFS6TX0qKStn4+5cco45SSC38AT5RSXkus/zCk+QV+T+LCyhtPx0iG3I%0A4y8hc5nSZANlzVvDkP8hKOEhCKl6qo+c4hwmfjGRwpJC3rrxLWJbxFZZxxhjaqNWSUNEQnASxiJV%0A/cgtPigisW4vIxbIcsszgc4VqncC9rnlQ88qX+OWd6pke59yvLSMxPnJrN2ZfUZ5s5AgWoWFEtk8%0AhFZhoVzUrgWRzUNpFeY8jwwLoUP5ARLWPkVo0SEY8gxNrpoITVt4tN9DhYdIXJnIvqP7mH79dC6O%0AvopGyToAAA+vSURBVLg+Ds8YY85Q46Th3sk0F9iuqi9VeGkZ8ADwvPtzaYXyR0TkXZwL4fluYlkB%0A/PXkXVbASOA/VTVHRI6IyECc0173A6/WNN76UFauTH3/R9buzOaZWy5hUI8YWoWFEhUWQrOQKi5E%0A70+B/7sXykudu6E6JXi83wPHDjB+xXiyi7J5fcTr9G9/7p1UxhhTH2rT0xgE3AdsEZHNbtkfcJLF%0A+yIyHvgVuMt97VPgZiAVKAQeBHCTw5+AJHe7505eFAcmAm8BzXEugPvMRXBV5b+WbmV5yn6evvkS%0AEgd397xyxjp4Zww0jXASRhvPewmZRzJJXJlI/vF8Zt4wk75t+9YgemOMqRlxbmYKHAkJCZqcnFzv%0A+5m24memr05j0tB4nryxGvM6bf8EPnwIWnWF+5ZAZKeq67gy8jNIXJlIUWkRs26YRe+Y3jWI3Bhj%0AziUiG1S1ylMeNiK8Buas3cX01WmMGdCFfx9VjWsJGxfAPx6DDv1g7AcQFu1x1bS8NBJXJlKu5bw5%0A6k27hmGM8QpbT6Oa3k/ew5+Xb+eWy2L58+g+no26VoW1L8GyKdB9mDOquxoJY0fODh78/EEEYd6o%0AeZYwjDFeYz2Nalix7QBPLU5hcM8YXrr7cpoEeZAwysth5TPwz+nQ504YPQOCQz3e59bsrTy86mHC%0AQsKYM3IOXVt2rcURGGNM7VjS8NB3adlMeXsTl3eO4o3fXUnTYA+m6SgrgaWTIeU9GPAw3Pj8BUd2%0An21T1iYmfTGJyKaRzB01l44tKh3baIwxDcaShgdSMvP41/nJxMWEMW9cf8KbevBrO1EIHzwAO1fC%0A8Gdg8BPnnTeqMkkHkpj85WTahrVlzsg5tA9vX4sjMMaYumFJowqpWUcZNy+JVuGhLHjoKqLCPDi1%0AVJgD79wDmUlw68uQ8GC19vnd3u94dPWjdGrRidkjZ9MmrE0NozfGmLplSeMC9uYVcf/c9QQJLBx/%0AFe0jq57ag4J9sPAOyEmDu95yVtWrhjV71jB1zVTio+KZecNMopt5fsHcGGPqmyWN8zh89Dj3zV3P%0AkeJS3n14IN1iwquulL0TFt4ORXnwu8XQbUi19rlq9yqe/PpJekX34o0b3rDJB40xPseSRiWOFJcw%0Abl4Se3OLWDj+Knp38OA/770bYdGdgDijvDtUb6T28l3LeXrd01wWcxmvj3idiNCImgVvjDH1yJLG%0AWYpLypiwYAM/7S9g9v1XMqBbJaeHVOHIfqdncXgnZKfCpoXO2Iv7PobW8dXa55KdS/jjd3+kf/v+%0AvDr8VcJCwuroaIwxpm5Z0qigtKycKe9s4vtdh3n57r4M7xYO+zbD4dTTCeJwKhxOgxNHT1cMCYNO%0A/eH2mdDy/NOT5xXnkZqXyq78XaTmpZKWl0ZaXhqHiw8zqMMgXh72Ms2CPbhuYowxXmJJw6UHtrD8%0A43e5LnM7z8UWEPtVJizdX2ELgajO0LondLkaWveAmJ7Oz4gOZ4y/uFByOCk8JJz4yHgGdxpMr+he%0A3HnRnbbinjHG5zXupKHK0V++5thXL9Du4FpuA4qbRtAs7GKIGXpmYojuDiHNK1RVDhYeJD0/nYz9%0Aa0nPT68yOfSI6kF8VDzxkfG0D2/v2RQkxhjjQxpl0thz+Cg7vvmALttnctGJ7RRrS14LGkPT/g+Q%0AeONVZ/QaCksKSS9IJ2PPV2QUZJCRn0FGQQa7C3ZTVFp0aruTyWFIpyFOYoiKp0dUD9qFtbPkYIwJ%0AGI0iaZSXKyl78/lq617KtnzAb45+wIigTA5IW1bGPUHM4ETGdgxj2+EtLPr57VPJIb0gnazCrFPv%0AIwgdW3QkLjKOhHYJdIvsRlzLOOIi42jTvI0lB2NMwAvYpFFcUsZ3adms+imLdT/9yvCiFUwIXk5H%0AySYnogdZ17xG+4H30FrgvZ/f45Elr3PkxBEAIkIj6NayGwNjB55KCnEt4+jSsotddzDGNGoBlzRy%0AC08wYYGzZndIST6JoV/wacgKIkLyKe3QH66bTvRFo0CEdXvX8fekv5Oen87VsVcz/rLx9IjqQXSz%0AaOs1GGNMJQIuaWTmFrE/M53Z7b9kYO4ygkuPQfeRcO1UgrteDTgr4E1LnsY3md/QJaILrwx7haGd%0Ah1qiMMaYKgRc0rikeR7LyiYh2aXQ57cw6DFofxkABScKmPnjTN7e/jZNg5sy9cqpjL1kLKFNPF/f%0AwhhjGrOASxrBx/OQK6bANVMguhsAZeVlfJT6Ea9teo3c4lzu6HkHj1zxCDHNY7wcrTHG+JeASxq0%0AuxRufenU06QDSfzth7+xI3cH/dr2Y8aIGVza+lIvBmiMMf4r8JJGUAgAe4/u5cXkF1m1exWx4bFM%0Au24ao7qOsusWxhhTCwGXNMq1nFc2vsL8bfNpEtSEyX0nM673OJvTyRhj6kDAJY3UvFRmb5nNLd1v%0A4fF+j9syqcYYU4cCLmkEBwWz8KaF9G1bvfUsjDHGVC2o6k38S/fI7pYwjDGmngRc0jDGGFN/fD5p%0AiMiNIrJDRFJF5Clvx2OMMY2ZTycNEWkCTAduAi4FxoiIDbIwxhgv8emkAQwAUlV1l6qeAN4FbvNy%0ATMYY02j5etLoCOyp8DzTLTuDiEwQkWQRST506FCDBWeMMY2NryeNyoZv6zkFqrNUNUFVE9q0adMA%0AYRljTOPk60kjE+hc4XknYJ+XYjHGmEbP15NGEtBTRLqJSChwD7DMyzEZY0yjJarnnO3xKSJyM/Ay%0A0AR4U1X/UsX2RcC2Gu4uEsj3s7re3Lcdc8PV7QL8WsO6td23P9b15r79sS5AT1WNrHIrVQ2of8Ch%0AWtSd5W91/TVuO+Zq161xu/bjY7Y24oO/L18/PVUTebWo+w8/rOvNfdsxN1zd2rTr2u7bH+t6c9/+%0AWNfj+j5/eqq6RCRZVRO8HYcxdcnatfEVgdjTmOXtAIypB9aujU8IuJ6GMcaY+hOIPQ1jjDH1xJJG%0AAxKR20VERaSXt2OpCRE5WsXra0TEJ867i0gnEVkqIjtFJE1E/tcd63O+7R8XkbCGjDGQ+HPbtnZd%0APX6bNKr6oH3UGGAdziBFj7mz/RoPiYgAHwEfq2pP4CKgBXChMT6PA15PGn7arsHadr3zlXbtt0nD%0A34hIC2AQMB73iyUiQ0XkGxFZIiI/icgbIhLkvnZURJ4TkfXA1d6L/ExuzJ9UeP6aiIzzYkiVGQ4U%0Aq+o8AFUtA/4NeEhEwkXkBRHZIiIpIjJFRB4FOgCrRWS1F+P2S4HQtq1de86v1wh3G+tSoBUQAjyj%0AqktFJA74DOcvn2uAvcBtqlrkpVABRgOfq+ovIpIjIv3c8gE4a4XsBj4H7gA+BMKBrar6316J1r/1%0ABjZULFDVAhH5FUgEugFXqGqpiESrao6ITAWGqWq2F+I9g5+1a7C23VB8ol37e0+jGLhdVfsBw4AX%0A3S4cQE9guqr2xhkY9VsvxXjSGJz1QHB/jnEf/6DOeiFlwDvAtW55GbC4YUMMGEIlsyG75UOAN1S1%0AFEBVcxoyMA/5U7sGa9sNxSfatV/3NHB+WX8VkSFAOc5aG+3c19JVdbP7eAMQ1/DhOUSkNU7Xso+I%0AKM48Wgp8yrmN4OTzYvfL5mtKOfOPjWbeCuQCtnHWf6Yi0hJnxuRdVP7F8yV+0a4hoNq2tWsP+XtP%0AYyzQBrhSVfsCBzn9YR+vsF0Z3k2QdwILVLWrqsapamcgHecvrwHuLL5BwN04px582W7gUhFpKiKR%0AwPXeDqgSXwJhInI/nLrY+iLwFrAS+L2IBLuvRbt1jgARDR9qpfylXUPgtG1r1x7y96QRCWSpaomI%0ADAO6ejug8xgDLDmrbDFwL/A98DywFefLdvZ2PsFtjMdVdQ/wPpACLAI2eTWwSqgzYvV24C4R2Qn8%0AgnPK5w/AHJzZYlNE5EeczwCcEdef+ciFcH9p1+DnbdvadfX55Yhw94M+CFyMM8lWCLAZ5w6Om9zN%0APlHVPu72TwAtVPXZho/2/ERkKPCEqt7q7ViqIiKXA7NVdYC3YwlUgdKuwX/atrXr6vN217amegNp%0A7h0B57tlr8/JB6r6QoNEFaBE5PfAozj3fJv6Y+26AVm7rhm/62lU/KBVdaW34zGmLli7Nv7C75KG%0AMcYY7/H3C+HGGGMakM8nDRHpLCKrRWS7iGwTkcfc8mgRWSXOxF2rRKSVW95LRL4XkePuhcKK75Xh%0ADrPfLCLJ3jgeY06q47YdJSIfisjP7vv5xPQcJvD4/OkpEYkFYlV1o4hE4AxoGg2MA3JU9XkReQpo%0Apar/ISJtcW5RHA3kVrxYKCIZQIIvTBVhTB237fnAWlWdI86sp2GqWtslYo05h8/3NFR1v6pudB8f%0AAbbjjJC9DZjvbjYf54uEqmapahJQ4oVwjfFYXbVtd1TwEGCuu90JSximvvh80qjInbDtCmA90E5V%0A94Pz5QPaevAWCqwUkQ0iMqG+4jSmumrZtrsDh4B5IrJJROaISHg9hmsaMb9JGu7Mn4txbkksqOHb%0ADHIngbsJmOzO7WOMV9VB2w4G+gEzVPUK4BjwVB2GaMwpfpE0RCQE50u1SFU/cosPuueET54bzqrq%0AfVR1n/szC2dKAxsFaryqjtp2JpCpquvd5x/iJBFj6pzPJw13Sui5wHZVfanCS8uAB9zHD+CsP3Ch%0A9wl3Lzbidt1H4syJY4xX1FXbVtUDwB4Rudgtuh74qY7DNQbwj7unrgXWAltwpokGZ4Ku9TgTjHXB%0AmajrLnfRkfZAMtDS3f4ozkIwMZyeMC0YeFtVL7RMojH1qq7atrsQT1+cSetCcabJflBVcxvyeEzj%0A4PNJwxhjjO/w+dNTxhhjfIclDWOMMR6zpGGMMcZjljSMMcZ4zJKGMcYYj1nSMMbL3BlqJ1V4PlRE%0APvFmTMacjyUNY7wvCphU5VbG+ABLGsZUg4jEuWtWzBGRrSKySERGiMi37voXA9z1MD4WkRQR+aeI%0A/Itb91kReVNE1ojILhF51H3b54F4d52XaW5ZiwrrYyxyR48b43XB3g7AGD/UA7gLmAAkAfcC1wK/%0AwRnRvQfYpKqjRWQ4sADo69btBQwDIoAdIjIDZ3LBPqraF5zTUzgz3vYG9gHfAoOAdQ1xcMZciPU0%0AjKm+dFXdoqrlwDbgS3WmVtgCxOEkkIUAqvoV0FpEIt26y1X1uLsQWBbQ7jz7+EFVM919bHbf1xiv%0As6RhTPUdr/C4vMLzcpzee2Wnkk7O11Oxbhnn7+17up0xDcqShjF17xtgLJw61ZRdxToZR3BOVxnj%0A8+yvF2Pq3rM4q+ilAIWcnua8Uqp62L2QvhX4DFhe/yEaUzM2y60xxhiP2ekpY4wxHrOkYYwxxmOW%0ANIwxxnjMkoYxxhiPWdIwxhjjMUsaxhhjPGZJwxhjjMf+H0VCpa8qrD5ZAAAAAElFTkSuQmCC%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,iVBORw0KGgoAAAANSUhEUgAAAYAAAAE7CAYAAADUylYJAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz%0AAAALEgAACxIB0t1+/AAAF05JREFUeJzt3Xu4XXV95/H3R8JVuUrKaACDmqooXiPgpY4FB8E6ovOI%0AUqumDpW5oHhpx2pnplBbZuo8Lajt6JSKTuSxIqKOeBktBRFtBQ0XiYAMGa4R1DggIl4w+J0/1grs%0AxJOcfcJhr33ye7+eZz9nrd/6rZXvzkn2Z6+1fmutVBWSpPY8ZOgCJEnDMAAkqVEGgCQ1ygCQpEYZ%0AAJLUKANAkhplAEhSowwASWqUASBJjVo0dAFbsvfee9fSpUuHLkOSFpRLL730B1W1eLZ+Ux0AS5cu%0AZdWqVUOXIUkLSpKbxunnISBJapQBIEmNMgAkqVEGgCQ1ygCQpEYZAJLUKANAkhplAEhSo6b6QjBp%0AECfvPo/bunP+tiXNM/cAJKlRBoAkNcoAkKRGGQCS1CgDQJIaZQBIUqMMAElqlAEgSY0yACSpUQaA%0AJDXKAJCkRhkAktQoA0CSGmUASFKjDABJapQBIEmNMgAkqVEGgCQ1ygCQpEYZAJLUqLECIMlbklyV%0A5FtJPppkpyQHJLkkyXVJPpZkh77vjv38mn750pHtvKNvvzbJCx+ctyRJGsesAZBkCXAisLyqngRs%0ABxwLvAs4raqWAXcAx/WrHAfcUVWPBU7r+5HkwH69JwJHAu9Lst38vh1J0rjGPQS0CNg5ySJgF+A2%0A4DDgnH75SuCl/fTR/Tz98sOTpG8/q6p+XlU3AGuAgx/4W5AkbY1ZA6CqvgP8BXAz3Qf/ncClwA+r%0Aan3fbS2wpJ9eAtzSr7u+7//w0fYZ1rlPkuOTrEqyat26dVvzniRJYxjnENCedN/eDwAeCTwUOGqG%0ArrVhlc0s21z7xg1Vp1fV8qpavnjx4tnKkyRtpXEOAb0AuKGq1lXVL4BPAs8G9ugPCQHsC9zaT68F%0A9gPol+8O3D7aPsM6kqQJGycAbgYOTbJLfyz/cOBq4EvAy/s+K4BP99Pn9vP0yy+oqurbj+1HCR0A%0ALAO+Pj9vQ5I0V4tm61BVlyQ5B7gMWA9cDpwOfA44K8mf9W1n9KucAZyZZA3dN/9j++1cleRsuvBY%0AD5xQVffO8/uRJI1p1gAAqKqTgJM2ab6eGUbxVNXPgGM2s51TgFPmWKMk6UHglcCS1CgDQJIaZQBI%0AUqMMAElqlAEgSY0yACSpUQaAJDXKAJCkRhkAktQoA0CSGmUASFKjDABJapQBIEmNMgAkqVEGgCQ1%0AygCQpEYZAJLUKANAkhplAEhSowwASWqUASBJjVo0dAGSNK9O3n0et3Xn/G1rCrkHIEmNMgAkqVEG%0AgCQ1ygCQpEYZAJLUKANAkhplAEhSowwASWqUASBJjTIAJKlRBoAkNcoAkKRGGQCS1CgDQJIaZQBI%0AUqPGCoAkeyQ5J8m3k1yT5FlJ9kpyXpLr+p979n2T5L1J1iS5MsnTR7azou9/XZIVD9abkiTNbtw9%0AgPcAX6iqxwNPAa4B3g6cX1XLgPP7eYCjgGX963jg/QBJ9gJOAg4BDgZO2hAakqTJmzUAkuwGPA84%0AA6Cq7qmqHwJHAyv7biuBl/bTRwMfrs7FwB5JHgG8EDivqm6vqjuA84Aj5/XdSJLGNs4ewKOBdcCH%0Aklye5ANJHgrsU1W3AfQ/f63vvwS4ZWT9tX3b5to3kuT4JKuSrFq3bt2c35AkaTzjBMAi4OnA+6vq%0AacDd3H+4ZyaZoa220L5xQ9XpVbW8qpYvXrx4jPIkSVtjnABYC6ytqkv6+XPoAuF7/aEd+p/fH+m/%0A38j6+wK3bqFdkjSAWQOgqr4L3JLkcX3T4cDVwLnAhpE8K4BP99PnAq/tRwMdCtzZHyL6InBEkj37%0Ak79H9G2SpAEsGrPfG4GPJNkBuB54HV14nJ3kOOBm4Ji+7+eBFwFrgJ/0famq25P8KfCNvt87q+r2%0AeXkXkqQ5GysAquoKYPkMiw6foW8BJ2xmOx8EPjiXAiVJDw6vBJakRhkAktQoA0CSGmUASFKjDABJ%0AapQBIEmNMgAkqVHjXgimgRy08qB529bqFavnbVuSFj73ACSpUQaAJDXKAJCkRhkAktQoA0CSGmUA%0ASFKjDABJapQBIEmNMgAkqVEGgCQ1ygCQpEYZAJLUKANAkhplAEhSowwASWqUASBJjTIAJKlRBoAk%0ANcoAkKRGGQCS1CgDQJIaZQBIUqMMAElqlAEgSY0yACSpUQaAJDXKAJCkRhkAktSosQMgyXZJLk/y%0A2X7+gCSXJLkuyceS7NC379jPr+mXLx3Zxjv69muTvHC+34wkaXxz2QN4E3DNyPy7gNOqahlwB3Bc%0A334ccEdVPRY4re9HkgOBY4EnAkcC70uy3QMrX5K0tcYKgCT7Ar8FfKCfD3AYcE7fZSXw0n766H6e%0Afvnhff+jgbOq6udVdQOwBjh4Pt6EJGnuxt0DeDfwNuCX/fzDgR9W1fp+fi2wpJ9eAtwC0C+/s+9/%0AX/sM60iSJmzWAEjyYuD7VXXpaPMMXWuWZVtaZ/TPOz7JqiSr1q1bN1t5kqStNM4ewHOAlyS5ETiL%0A7tDPu4E9kizq++wL3NpPrwX2A+iX7w7cPto+wzr3qarTq2p5VS1fvHjxnN+QJGk8swZAVb2jqvat%0AqqV0J3EvqKrfAb4EvLzvtgL4dD99bj9Pv/yCqqq+/dh+lNABwDLg6/P2TiRJc7Jo9i6b9YfAWUn+%0ADLgcOKNvPwM4M8kaum/+xwJU1VVJzgauBtYDJ1TVvQ/gz5ckPQBzCoCquhC4sJ++nhlG8VTVz4Bj%0ANrP+KcApcy1SkjT/vBJYkhplAEhSowwASWqUASBJjTIAJKlRBoAkNcoAkKRGGQCS1CgDQJIaZQBI%0AUqMMAElqlAEgSY0yACSpUQaAJDXKAJCkRhkAktQoA0CSGmUASFKjHsgzgaWpsvTtn5uX7dy407xs%0ARpp67gFIUqMMAElqlAEgSY0yACSpUQaAJDXKAJCkRhkAktQoA0CSGmUASFKjDABJapQBIEmNMgAk%0AqVEGgCQ1ygCQpEYZAJLUKANAkhplAEhSowwASWrUrAGQZL8kX0pyTZKrkrypb98ryXlJrut/7tm3%0AJ8l7k6xJcmWSp49sa0Xf/7okKx68tyVJms04ewDrgd+vqicAhwInJDkQeDtwflUtA87v5wGOApb1%0Ar+OB90MXGMBJwCHAwcBJG0JDkjR5sz4UvqpuA27rp+9Kcg2wBDgaeH7fbSVwIfCHffuHq6qAi5Ps%0AkeQRfd/zqup2gCTnAUcCH53H9/OAzNdDxQFu/PPfmrdtSdKDYdYAGJVkKfA04BJgnz4cqKrbkvxa%0A320JcMvIamv7ts21b/pnHE+358D+++8/l/IkLVDz+uVrp3nb1DZv7JPASR4GfAJ4c1X9aEtdZ2ir%0ALbRv3FB1elUtr6rlixcvHrc8SdIcjRUASban+/D/SFV9sm/+Xn9oh/7n9/v2tcB+I6vvC9y6hXZJ%0A0gDGGQUU4Azgmqo6dWTRucCGkTwrgE+PtL+2Hw10KHBnf6joi8ARSfbsT/4e0bdJkgYwzjmA5wCv%0AAVYnuaJv+yPgz4GzkxwH3Awc0y/7PPAiYA3wE+B1AFV1e5I/Bb7R93vnhhPCkqTJG2cU0FeZ+fg9%0AwOEz9C/ghM1s64PAB+dSoCTpweGVwJLUKANAkhplAEhSowwASWqUASBJjTIAJKlRBoAkNWpON4OT%0ANDcHrTxo3ra1esXqeduWBO4BSFKzDABJapQBIEmNMgAkqVEGgCQ1ygCQpEYZAJLUKANAkhplAEhS%0AowwASWqUASBJjTIAJKlRBoAkNcoAkKRGGQCS1CgDQJIaZQBIUqMMAElqlAEgSY0yACSpUQaAJDVq%0A0dAFbLNO3n1+tnPA/vOzHUnahHsAktQoA0CSGmUASFKjPAcgSZtx0MqD5mU7q1esnpftzDf3ACSp%0AUQaAJDXKAJCkRk08AJIcmeTaJGuSvH3Sf74kqTPRAEiyHfDfgaOAA4HfTnLgJGuQJHUmvQdwMLCm%0Aqq6vqnuAs4CjJ1yDJInJDwNdAtwyMr8WOGS0Q5LjgeP72R8nuXZCtc2rjNdtb+AHW+7yrQdcywb5%0A3TGratwc/pb8/U2h+fu/B/P1+xvgd/eocTpNOgBm+luojWaqTgdOn0w5w0qyqqqWD12Hto6/v4XL%0A311n0oeA1gL7jczvC9w64RokSUw+AL4BLEtyQJIdgGOBcydcgySJCR8Cqqr1Sd4AfBHYDvhgVV01%0AyRqmTBOHurZh/v4WLn93QKpq9l6SpG2OVwJLUqMMAElqlAEgSY0yACQ1JZ2HDl3HNDAApK2UZM8k%0ATx66Ds0uyYeT7JZkF+Aq4IYkbx26rqE5CmjCknyGTa5+Bu4EVgF/U1U/m3xVGleSC4GX0A2hvgJY%0AB3y5qpr/MJlmSS6vqqcleRXdPcneBqyqqqYD3D2Aybse+DHwt/3rR8D3gF/v5zXddq+qHwH/CvhQ%0AVT0DeMHANWl2OyRZRHfzyf/V34zylwPXNDifCTx5T6uq543MfybJRVX1vCQtXxS3UCxK8gjgFcB/%0AHLoYje0DwM10d3f7cpL96b6INc09gMlb3P/jA6Cf3rufvWeYkjQH76S7kn1NVX0jyaOB6wauSbOo%0AqtOq6pFVdUR1x71vAQ4buq6heQ5gwpK8CPgfwP+luzvqAcC/By4EXl9V7x6uOmnbkuTELS2vqvdO%0AqpZp5CGgCauqzydZBjyeLgC+PXLi1w//KZdkJfCmqvphP78n8JdV9a+HrUybsXjoAqaZewADSPJs%0AYCkjAVxVHx6sII1tw2iS2dqkhcA9gAlLcibwGLohhPf2zQUYAAvDQ5LsWVV3ACTZC/8fTb0kjwTe%0AAzy3b7oIeEtVNf08Ev/hTt5y4MBy12uh+kvgn5Kc088fA5wyYD0az4eAc4BX9/Ov6dteOFhFU8BD%0AQBOW5OPAiVV129C1aOskOZBuBEmA86vq6oFL0iySXFFVT52trTXuAUze3sDVSb4O/HxDY1W9ZLiS%0ANJsku1XVj/pDPt8F/m5k2V5Vdftw1WkMtyc5FvhYP/8KoPnfmXsAE5bkn8/UXlVfnnQtGl+Sz1bV%0Ai5PcwMa38ghQVfXogUrTGJIsBd4HHNI3fQ14Y1XdMFRN08AAkKRGeQhoQpJ8taqem+QuZv4GudtA%0ApWmOkiwBHsXGw3gvGq4izcZRQDNzD0CagyTvAl4JXM3IMF7P4Uy3JF+kGwW0Ybj1a4BjqspRQJqs%0AJNsB+7DxN8ibh6tI40pyLfDkqvr5rJ01NRwFNDMPAU1YkjcCJ9HdAnrD7WgLaPq+5AvI9cD2jIzg%0A0oLgKKAZuAcwYUnWAIdU1f8buhbNXZJPAE8BzmfjYbxbvOmYhrXJKKACLsZRQO4BDOAWuieAaWE6%0At39pAUjyhqr666q6EXjR0PVMG/cAJmTk+aNPBB4HfI6Nv0GeOkRdmrskO9A9wQ3g2qr6xZD1aPOS%0AXFZVTx+6jmnlHsDk7Nr/vLl/7dC/4FefEawpleT5wErgRrohvPslWeEwUC1E7gFMWJJjqurjs7Vp%0AOiW5FHhVVV3bz/868NH+2cCaMknWAz+ZaRFef+MjIQfwjjHbNJ223/DhD1BV/4duVJCm0+qq2m2G%0A166tf/iDh4AmJslRdCehliQZfQzdbsD6YarSVliV5AzgzH7+d4BLB6xH2moGwOTcCqwCXsLGHxh3%0AAW8ZpCJtjX8HnACcSHcY4SK64YWaTh5a3QLPAUxYku3pPjgcRbLA9Fdwr6yqV8/aWVoA3AOYvGfT%0A3Y/kRhxFsqBU1b1JFifZoaruGboe6YEyACbvVOCITUeRAI4iWRhuBP4xybnA3RsavY5jeiV5CPDy%0Aqjp76FqmjaOAJs9RJAvbrcBn6f7v7Nq/HjZoRdqiqvol8Iah65hG7gFMnqNIFrarZ7qOY6hiNLbz%0AkvwB3c3gRvfcmr4hnCeBJyzJjnSjSJ7LyCgSby+8MMx0awFvNzD9+kd5bqr5R3kaANIYRq7jeAX3%0A31IYuus4DqyqgwcpTHoAPAQ0IUlWs4V7/lSVzwOYbl7HsYAl2QV4K7B/VR2fZBnwuKr67MClDco9%0AgAnp/8HtQ3c76FGPAm6tqjWTr0pzlWQ34O6quref3w7Ysapmut+MpkSSj9EF92ur6klJdga+1voT%0AwRwFNDmnAT+qqptGX3Q3qjpt4No0vr8Hdh6Z3xn4h4Fq0fgeU1X/DfgFQFX9lO4cXNMMgMlZWlVX%0AbtpYVauApZMvR1tpp6r68YaZfnqXAevReO7pv/UXQJLH4GM9DYAJ2mkLy3bewjJNl7uT3DfiJ8kz%0AgJ8OWI/GczLwBbor7z9C90jPtw1a0RTwHMCEJPkocEFV/e0m7cfRXRn8ymEq01wkeSZwFt1JYYBH%0AAK+sKq/lmHJJHg4cSnfo5+Kq+sHAJQ3OAJiQJPsAnwLu4f5RJMvpngr2sqr67lC1aW76G/o9ju6D%0A5NvezG/6JTmT7pqbr1TVt4euZ1oYABOW5DeBJ/WzV1XVBUPWo7kZGU74qKp6vcMJF4Ykh9FdfPkb%0AwKOBK4CLquo9gxY2MANAmgOHEy5c/ZDdZwK/Cfxb4KdV9fhhqxqWF4JJc/OYqnplkt+GbjhhkuaH%0AE067JOcDDwW+BnwFeGZVfX/YqobnKCBpbhxOuDBdSXf+7UnAk4ENe29N8xCQNAdJ/gXwn4AD6S4K%0Aew7wu1V14ZB1aTxJHga8DvgD4J9V1Y4DlzQoA0CaI4cTLjxJ3kB3AvgZwE3cPyKo6UEYBoA0htGL%0Av2ZSVZdNqhbNXZL/QPehf2lVrR+6nmlhAEhjSPKlLSyuqjpsYsVoqyR5Ct1eAHTf/r85ZD3TwACQ%0AtM1LciJwPPDJvullwOlV9VfDVTU8RwFJY0jytpHpYzZZ9l8mX5Hm6PeAQ6rqj6vqj+nO4bx+4JoG%0AZwBI4zl2ZPodmyw7cpKFaKsEuHdk/l68HbQXgkljymamZ5rX9PkQcEmST/XzLwXOGLCeqWAASOOp%0AzUzPNK8pU1WnJrmQ7n5AAV5XVZcPW9XwPAksjSHJvcDddB8eO9M9yY1+fqeq2n6o2rR5SXaiu+/P%0AY4HVwBkOA72fASBpm9XfvO8XdPf/OQq4sarePGxV08MAkLTNSrK6qg7qpxcBX6+qLV7U1xJHAUna%0Alt33sB4P/fwq9wAkbbNGzt3AxudvQncF925D1TYNDABJapSHgCSpUQaAJDXKAJCkRhkA0ogkz0/y%0A7KHrkCbBAJA29nzgQQ2AdPy/p8H5j1BNSPLaJFcm+WaSM5P8yySXJLk8yT8k2SfJUrrbBrwlyRVJ%0AfiPJ4iSfSPKN/vWcfnuLk5yX5LIkf5PkpiR798vemuRb/evNfdvSJNckeR9wGfCfk5w2Ut/rk5w6%0A6b8Xtc1hoNrmJXki3YNAnlNVP0iyF90N3H5YVZXk94AnVNXvJzkZ+HFV/UW/7t8B76uqrybZH/hi%0AVT0hyV8D36mq/5rkSOB/A4uBRwH/k/ufGXwJ8GrgDuB64NlVdXGShwJXAo+vql8k+Sfg31TV6gn9%0AtUjeDVRNOAw4Z8PD26vq9iQHAR9L8ghgB+CGzaz7AuDA5L47Pu+WZFe6u0q+rN/eF5Lc0S9/LvCp%0AqrobIMkn6R5DeC5wU1Vd3K9zd5ILgBcnuQbY3g9/TZoBoBaEX71l818Bp1bVuUmeD5y8mXUfAjyr%0Aqn660QZHEmGGP2tz7t5k/gPAHwHfprtfvTRRngNQC84HXpHk4QD9IaDdge/0y1eM9L0L2HVk/u+B%0AN2yYSfLUfvKrwCv6tiOAPfv2i4CXJtmlP8zzMro7Uf6KqroE2A94FfDRrX1z0tYyALTNq6qrgFOA%0ALyf5JnAq3Tf+jyf5CvCDke6fAV624SQwcCKwvD+BfDXdSWKAPwGOSHIZ3W2GbwPuqqrL6M4BfJ3u%0A+P8HZnnwyNnAP1bVHVvoIz0oPAksbYUkOwL3VtX6JM8C3l9VT51tvRm281ngtKo6f96LlGbhOQBp%0A6+wPnN2P578HeP1cVk6yB91ewjf98NdQ3AOQpEZ5DkCSGmUASFKjDABJapQBIEmNMgAkqVH/H5Hp%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 " } } }