{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Библиотека pandas. Продолжение."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Группировка и агрегирование: методы `.groupby()` и `.agg()`"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Часто случается, что данные необходимо сгруппировать по какому-то признаку ‒ по значениям определенной переменной. На входе имеется таблица (датафрейм), а на выходе хочется получить несколько таблиц: отдельная таблица для каждого значения. Давайте рассмотрим такой пример. У нас есть база данных с результатами выборов, и нам нужно сгруппировать данные по регионам. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Для начала импортируем библиотеку pandas и загрузим файл с данными."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Для разнообразия загрузим файл по ссылке с Github (база большая, загрузится не моментально):"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "df = pd.read_csv(\"https://raw.githubusercontent.com/allatambov/R-programming-3/master/lectures/lect7-12-01/47130-8314.csv\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "В таблице сохранены результаты выборов президента России 2012 года. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>link</th>\n",
       "      <th>uik</th>\n",
       "      <th>kom1</th>\n",
       "      <th>kom2</th>\n",
       "      <th>kom3</th>\n",
       "      <th>kom4</th>\n",
       "      <th>kom5</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>...</th>\n",
       "      <th>18</th>\n",
       "      <th>19</th>\n",
       "      <th>20</th>\n",
       "      <th>21</th>\n",
       "      <th>22</th>\n",
       "      <th>23</th>\n",
       "      <th>а</th>\n",
       "      <th>б</th>\n",
       "      <th>в</th>\n",
       "      <th>г</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>http://www.adygei.vybory.izbirkom.ru/region/ad...</td>\n",
       "      <td>1</td>\n",
       "      <td>Республика Адыгея (Адыгея)</td>\n",
       "      <td>Адыгейская</td>\n",
       "      <td>УИК №1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2383.0</td>\n",
       "      <td>2147.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>24.0</td>\n",
       "      <td>382.0</td>\n",
       "      <td>28.0</td>\n",
       "      <td>71.0</td>\n",
       "      <td>1066.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>http://www.adygei.vybory.izbirkom.ru/region/ad...</td>\n",
       "      <td>2</td>\n",
       "      <td>Республика Адыгея (Адыгея)</td>\n",
       "      <td>Адыгейская</td>\n",
       "      <td>УИК №2</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2865.0</td>\n",
       "      <td>2586.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>51.0</td>\n",
       "      <td>453.0</td>\n",
       "      <td>49.0</td>\n",
       "      <td>104.0</td>\n",
       "      <td>1174.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>http://www.adygei.vybory.izbirkom.ru/region/ad...</td>\n",
       "      <td>3</td>\n",
       "      <td>Республика Адыгея (Адыгея)</td>\n",
       "      <td>Адыгейская</td>\n",
       "      <td>УИК №3</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2821.0</td>\n",
       "      <td>2558.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>36.0</td>\n",
       "      <td>481.0</td>\n",
       "      <td>24.0</td>\n",
       "      <td>107.0</td>\n",
       "      <td>1025.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>http://www.adygei.vybory.izbirkom.ru/region/ad...</td>\n",
       "      <td>4</td>\n",
       "      <td>Республика Адыгея (Адыгея)</td>\n",
       "      <td>Адыгейская</td>\n",
       "      <td>УИК №4</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2069.0</td>\n",
       "      <td>1868.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>414.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>48.0</td>\n",
       "      <td>784.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>http://www.adygei.vybory.izbirkom.ru/region/ad...</td>\n",
       "      <td>5</td>\n",
       "      <td>Республика Адыгея (Адыгея)</td>\n",
       "      <td>Адыгейская</td>\n",
       "      <td>УИК №5</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>777.0</td>\n",
       "      <td>705.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>19.0</td>\n",
       "      <td>138.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>286.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 34 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                link  uik  \\\n",
       "0  http://www.adygei.vybory.izbirkom.ru/region/ad...    1   \n",
       "1  http://www.adygei.vybory.izbirkom.ru/region/ad...    2   \n",
       "2  http://www.adygei.vybory.izbirkom.ru/region/ad...    3   \n",
       "3  http://www.adygei.vybory.izbirkom.ru/region/ad...    4   \n",
       "4  http://www.adygei.vybory.izbirkom.ru/region/ad...    5   \n",
       "\n",
       "                         kom1        kom2    kom3  kom4  kom5       1       2  \\\n",
       "0  Республика Адыгея (Адыгея)  Адыгейская  УИК №1   NaN   NaN  2383.0  2147.0   \n",
       "1  Республика Адыгея (Адыгея)  Адыгейская  УИК №2   NaN   NaN  2865.0  2586.0   \n",
       "2  Республика Адыгея (Адыгея)  Адыгейская  УИК №3   NaN   NaN  2821.0  2558.0   \n",
       "3  Республика Адыгея (Адыгея)  Адыгейская  УИК №4   NaN   NaN  2069.0  1868.0   \n",
       "4  Республика Адыгея (Адыгея)  Адыгейская  УИК №5   NaN   NaN   777.0   705.0   \n",
       "\n",
       "     3 ...   18    19     20    21     22      23   а   б   в   г  \n",
       "0  0.0 ...  0.0  24.0  382.0  28.0   71.0  1066.0 NaN NaN NaN NaN  \n",
       "1  0.0 ...  0.0  51.0  453.0  49.0  104.0  1174.0 NaN NaN NaN NaN  \n",
       "2  0.0 ...  0.0  36.0  481.0  24.0  107.0  1025.0 NaN NaN NaN NaN  \n",
       "3  0.0 ...  0.0   0.0  414.0   0.0   48.0   784.0 NaN NaN NaN NaN  \n",
       "4  0.0 ...  0.0  19.0  138.0   4.0    7.0   286.0 NaN NaN NaN NaN  \n",
       "\n",
       "[5 rows x 34 columns]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 90003 entries, 0 to 90002\n",
      "Data columns (total 34 columns):\n",
      "link    90003 non-null object\n",
      "uik     90003 non-null int64\n",
      "kom1    90003 non-null object\n",
      "kom2    90003 non-null object\n",
      "kom3    89618 non-null object\n",
      "kom4    0 non-null float64\n",
      "kom5    0 non-null float64\n",
      "1       89994 non-null float64\n",
      "2       89994 non-null float64\n",
      "3       89994 non-null float64\n",
      "4       89994 non-null float64\n",
      "5       89994 non-null float64\n",
      "6       89994 non-null float64\n",
      "7       89994 non-null float64\n",
      "8       89994 non-null float64\n",
      "9       89994 non-null float64\n",
      "10      89994 non-null float64\n",
      "11      89994 non-null float64\n",
      "12      89994 non-null float64\n",
      "13      89994 non-null float64\n",
      "14      89994 non-null float64\n",
      "15      89994 non-null float64\n",
      "16      89994 non-null float64\n",
      "17      89994 non-null float64\n",
      "18      89994 non-null float64\n",
      "19      89994 non-null float64\n",
      "20      89994 non-null float64\n",
      "21      89994 non-null float64\n",
      "22      89994 non-null float64\n",
      "23      89994 non-null float64\n",
      "а       0 non-null float64\n",
      "б       0 non-null float64\n",
      "в       0 non-null float64\n",
      "г       0 non-null float64\n",
      "dtypes: float64(29), int64(1), object(4)\n",
      "memory usage: 23.3+ MB\n"
     ]
    }
   ],
   "source": [
    "df.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Таблица достаточно большая, поэтому давайте выберем те столбцы, которые понадобятся нам для работы. Какие именно? Столбцы в этой базе имеют порядковый номер строки в таблице на [сайте]() Центральной избирательной комиссии.\n",
    "\n",
    "Выберем столбцы, которые соответствуют уровням комиссий, а также следующим показателям: общее число зарегистрированных избирателей, число недействительных бюллетеней, число действительных бюллетеней, число голосов за Жириновского, Зюганова, Миронова, Прохорова и Путина."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "d = df[[\"kom1\", \"kom2\", \"kom3\", \"1\", \"9\", \"10\", \"19\", \"20\", \"21\", \"22\", \"23\"]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>kom1</th>\n",
       "      <th>kom2</th>\n",
       "      <th>kom3</th>\n",
       "      <th>1</th>\n",
       "      <th>9</th>\n",
       "      <th>10</th>\n",
       "      <th>19</th>\n",
       "      <th>20</th>\n",
       "      <th>21</th>\n",
       "      <th>22</th>\n",
       "      <th>23</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Республика Адыгея (Адыгея)</td>\n",
       "      <td>Адыгейская</td>\n",
       "      <td>УИК №1</td>\n",
       "      <td>2383.0</td>\n",
       "      <td>19.0</td>\n",
       "      <td>1571.0</td>\n",
       "      <td>24.0</td>\n",
       "      <td>382.0</td>\n",
       "      <td>28.0</td>\n",
       "      <td>71.0</td>\n",
       "      <td>1066.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Республика Адыгея (Адыгея)</td>\n",
       "      <td>Адыгейская</td>\n",
       "      <td>УИК №2</td>\n",
       "      <td>2865.0</td>\n",
       "      <td>29.0</td>\n",
       "      <td>1831.0</td>\n",
       "      <td>51.0</td>\n",
       "      <td>453.0</td>\n",
       "      <td>49.0</td>\n",
       "      <td>104.0</td>\n",
       "      <td>1174.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Республика Адыгея (Адыгея)</td>\n",
       "      <td>Адыгейская</td>\n",
       "      <td>УИК №3</td>\n",
       "      <td>2821.0</td>\n",
       "      <td>31.0</td>\n",
       "      <td>1673.0</td>\n",
       "      <td>36.0</td>\n",
       "      <td>481.0</td>\n",
       "      <td>24.0</td>\n",
       "      <td>107.0</td>\n",
       "      <td>1025.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Республика Адыгея (Адыгея)</td>\n",
       "      <td>Адыгейская</td>\n",
       "      <td>УИК №4</td>\n",
       "      <td>2069.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1246.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>414.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>48.0</td>\n",
       "      <td>784.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Республика Адыгея (Адыгея)</td>\n",
       "      <td>Адыгейская</td>\n",
       "      <td>УИК №5</td>\n",
       "      <td>777.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>454.0</td>\n",
       "      <td>19.0</td>\n",
       "      <td>138.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>286.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                         kom1        kom2    kom3       1     9      10    19  \\\n",
       "0  Республика Адыгея (Адыгея)  Адыгейская  УИК №1  2383.0  19.0  1571.0  24.0   \n",
       "1  Республика Адыгея (Адыгея)  Адыгейская  УИК №2  2865.0  29.0  1831.0  51.0   \n",
       "2  Республика Адыгея (Адыгея)  Адыгейская  УИК №3  2821.0  31.0  1673.0  36.0   \n",
       "3  Республика Адыгея (Адыгея)  Адыгейская  УИК №4  2069.0   0.0  1246.0   0.0   \n",
       "4  Республика Адыгея (Адыгея)  Адыгейская  УИК №5   777.0   8.0   454.0  19.0   \n",
       "\n",
       "      20    21     22      23  \n",
       "0  382.0  28.0   71.0  1066.0  \n",
       "1  453.0  49.0  104.0  1174.0  \n",
       "2  481.0  24.0  107.0  1025.0  \n",
       "3  414.0   0.0   48.0   784.0  \n",
       "4  138.0   4.0    7.0   286.0  "
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Теперь присвоим столбцам более информативные названия:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "d.columns = [\"region\", \"tik\", \"uik\", \"total\", \"invalid\", \"valid\", \"Zh\", \"Zu\", \"Mi\", \"Pr\", \"Pu\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>region</th>\n",
       "      <th>tik</th>\n",
       "      <th>uik</th>\n",
       "      <th>total</th>\n",
       "      <th>invalid</th>\n",
       "      <th>valid</th>\n",
       "      <th>Zh</th>\n",
       "      <th>Zu</th>\n",
       "      <th>Mi</th>\n",
       "      <th>Pr</th>\n",
       "      <th>Pu</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Республика Адыгея (Адыгея)</td>\n",
       "      <td>Адыгейская</td>\n",
       "      <td>УИК №1</td>\n",
       "      <td>2383.0</td>\n",
       "      <td>19.0</td>\n",
       "      <td>1571.0</td>\n",
       "      <td>24.0</td>\n",
       "      <td>382.0</td>\n",
       "      <td>28.0</td>\n",
       "      <td>71.0</td>\n",
       "      <td>1066.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Республика Адыгея (Адыгея)</td>\n",
       "      <td>Адыгейская</td>\n",
       "      <td>УИК №2</td>\n",
       "      <td>2865.0</td>\n",
       "      <td>29.0</td>\n",
       "      <td>1831.0</td>\n",
       "      <td>51.0</td>\n",
       "      <td>453.0</td>\n",
       "      <td>49.0</td>\n",
       "      <td>104.0</td>\n",
       "      <td>1174.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Республика Адыгея (Адыгея)</td>\n",
       "      <td>Адыгейская</td>\n",
       "      <td>УИК №3</td>\n",
       "      <td>2821.0</td>\n",
       "      <td>31.0</td>\n",
       "      <td>1673.0</td>\n",
       "      <td>36.0</td>\n",
       "      <td>481.0</td>\n",
       "      <td>24.0</td>\n",
       "      <td>107.0</td>\n",
       "      <td>1025.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Республика Адыгея (Адыгея)</td>\n",
       "      <td>Адыгейская</td>\n",
       "      <td>УИК №4</td>\n",
       "      <td>2069.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1246.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>414.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>48.0</td>\n",
       "      <td>784.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Республика Адыгея (Адыгея)</td>\n",
       "      <td>Адыгейская</td>\n",
       "      <td>УИК №5</td>\n",
       "      <td>777.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>454.0</td>\n",
       "      <td>19.0</td>\n",
       "      <td>138.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>286.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                       region         tik     uik   total  invalid   valid  \\\n",
       "0  Республика Адыгея (Адыгея)  Адыгейская  УИК №1  2383.0     19.0  1571.0   \n",
       "1  Республика Адыгея (Адыгея)  Адыгейская  УИК №2  2865.0     29.0  1831.0   \n",
       "2  Республика Адыгея (Адыгея)  Адыгейская  УИК №3  2821.0     31.0  1673.0   \n",
       "3  Республика Адыгея (Адыгея)  Адыгейская  УИК №4  2069.0      0.0  1246.0   \n",
       "4  Республика Адыгея (Адыгея)  Адыгейская  УИК №5   777.0      8.0   454.0   \n",
       "\n",
       "     Zh     Zu    Mi     Pr      Pu  \n",
       "0  24.0  382.0  28.0   71.0  1066.0  \n",
       "1  51.0  453.0  49.0  104.0  1174.0  \n",
       "2  36.0  481.0  24.0  107.0  1025.0  \n",
       "3   0.0  414.0   0.0   48.0   784.0  \n",
       "4  19.0  138.0   4.0    7.0   286.0  "
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d.head() # опять посмотрим"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Посмотрим теперь, какие регионы есть в базе. Выбрать столбец *region* в таком случае будет не совсем удачно, поскольку в нем будет много повторяющихся значенийй. Посмотрим только на уникальные:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['Республика Адыгея (Адыгея)', 'Республика Алтай',\n",
       "       'Республика Башкортостан', 'Республика Бурятия',\n",
       "       'Республика Дагестан', 'Ðåñïóáëèêà Äàãåñòàí',\n",
       "       'Республика Ингушетия', 'Кабардино-Балкарская Республика',\n",
       "       'Республика Калмыкия', 'Карачаево-Черкесская Республика',\n",
       "       'Республика Карелия', 'Республика Коми', 'Республика Марий Эл',\n",
       "       'Республика Мордовия', 'Республика Саха (Якутия)',\n",
       "       'Республика Северная Осетия - Алания', 'Республика Тыва',\n",
       "       'Удмуртская Республика', 'Республика Хакасия',\n",
       "       'Чувашская Республика - Чувашия', 'Алтайский край',\n",
       "       'Забайкальский край', 'Камчатский край', 'Краснодарский край',\n",
       "       'Красноярский край', 'Пермский край', 'Приморский край',\n",
       "       'Ставропольский край', 'Хабаровский край', 'Õàáàðîâñêèé êðàé',\n",
       "       'Амурская область', 'Архангельская область',\n",
       "       'Астраханская область', 'Белгородская область', 'Брянская область',\n",
       "       'Владимирская область', 'Волгоградская область',\n",
       "       'Вологодская область', 'Воронежская область', 'Ивановская область',\n",
       "       'Иркутская область', 'Калужская область', 'Кемеровская область',\n",
       "       'Кировская область', 'Костромская область', 'Курганская область',\n",
       "       'Курская область', 'Ленинградская область', 'Липецкая область',\n",
       "       'Магаданская область', 'Московская область', 'Мурманская область',\n",
       "       'Ìóðìàíñêàÿ îáëàñòü', 'Нижегородская область',\n",
       "       'Новгородская область', 'Новосибирская область', 'Омская область',\n",
       "       'Оренбургская область', 'Орловская область', 'Пензенская область',\n",
       "       'Псковская область', 'Ростовская область', 'Рязанская область',\n",
       "       'Самарская область', 'Саратовская область', 'Сахалинская область',\n",
       "       'Свердловская область', 'Смоленская область', 'Тамбовская область',\n",
       "       'Тверская область', 'Томская область', 'Тульская область',\n",
       "       'Тюменская область', 'Ульяновская область', 'Челябинская область',\n",
       "       'Город Москва', 'Город Санкт-Петербург', 'Ãîðîä Ñàíêò-Ïåòåðáóðã',\n",
       "       'Еврейская автономная область', 'Ненецкий автономный округ',\n",
       "       'Чукотский автономный округ', 'Ямало-Ненецкий автономный округ',\n",
       "       'Город Байконур (Республика Казахстан)',\n",
       "       'Территория за пределами РФ'], dtype=object)"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d.region.unique() # метод unique - уникальные значения"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Видно, что в этом массиве встречаются какие-то крокозябры (названия со странной кодировкой). Давайте уберем эти строки из базы."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "# отфильтруем с помощью условий\n",
    "d = d[(d.region != 'Ðåñïóáëèêà Äàãåñòàí') & \n",
    "  (d.region != 'Õàáàðîâñêèé êðàé') & \n",
    "  (d.region != 'Ìóðìàíñêàÿ îáëàñòü') & (d.region != 'Ãîðîä Ñàíêò-Ïåòåðáóðã')]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Сгруппируем данные по регионам и посчитаем для каждого региона явку в процентах и процент голосов за каждого кандидата. Группировка осуществляется с помощью метода `.groupby()`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<pandas.core.groupby.DataFrameGroupBy object at 0x7ffb59de38d0>"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d.groupby('region') # пока ничего не увидели"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Что выдает метод `.groupby()`? На самом деле он делает следующее: создает список, состоящий из кортежей. Каждый кортеж ‒ это пара *название группы*-*соответствующий ей фрагмент датафрейма*."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# посмотрим на все сразу\n",
    "for g in d.groupby('region'):\n",
    "    print(g)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "В таком виде метод `.groupby()` дает нам немного. Мы же хотим не просто получать отдельные таблицы, а агрегировать данные по регионам ‒ суммировать все показатели (число избирателей, бюллетеней, голосов) по каждому региону. Тут на помощь придет метод `.agg()`, который выполняет агрегирование по группам."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>total</th>\n",
       "      <th>invalid</th>\n",
       "      <th>valid</th>\n",
       "      <th>Zh</th>\n",
       "      <th>Zu</th>\n",
       "      <th>Mi</th>\n",
       "      <th>Pr</th>\n",
       "      <th>Pu</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>region</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>Алтайский край</th>\n",
       "      <td>1961328.0</td>\n",
       "      <td>12004.0</td>\n",
       "      <td>1163426.0</td>\n",
       "      <td>97961.0</td>\n",
       "      <td>261665.0</td>\n",
       "      <td>45883.0</td>\n",
       "      <td>83778.0</td>\n",
       "      <td>674139.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Амурская область</th>\n",
       "      <td>662320.0</td>\n",
       "      <td>4708.0</td>\n",
       "      <td>394996.0</td>\n",
       "      <td>39717.0</td>\n",
       "      <td>67433.0</td>\n",
       "      <td>13594.0</td>\n",
       "      <td>23070.0</td>\n",
       "      <td>251182.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Архангельская область</th>\n",
       "      <td>988678.0</td>\n",
       "      <td>5522.0</td>\n",
       "      <td>569492.0</td>\n",
       "      <td>51169.0</td>\n",
       "      <td>91648.0</td>\n",
       "      <td>33223.0</td>\n",
       "      <td>60108.0</td>\n",
       "      <td>333344.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Астраханская область</th>\n",
       "      <td>769608.0</td>\n",
       "      <td>5107.0</td>\n",
       "      <td>427496.0</td>\n",
       "      <td>21918.0</td>\n",
       "      <td>67662.0</td>\n",
       "      <td>18595.0</td>\n",
       "      <td>21873.0</td>\n",
       "      <td>297448.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Белгородская область</th>\n",
       "      <td>1210590.0</td>\n",
       "      <td>10209.0</td>\n",
       "      <td>889764.0</td>\n",
       "      <td>59561.0</td>\n",
       "      <td>211079.0</td>\n",
       "      <td>35601.0</td>\n",
       "      <td>49807.0</td>\n",
       "      <td>533716.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Брянская область</th>\n",
       "      <td>1045083.0</td>\n",
       "      <td>6922.0</td>\n",
       "      <td>692926.0</td>\n",
       "      <td>42974.0</td>\n",
       "      <td>146340.0</td>\n",
       "      <td>23453.0</td>\n",
       "      <td>32141.0</td>\n",
       "      <td>448018.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Владимирская область</th>\n",
       "      <td>1202174.0</td>\n",
       "      <td>8484.0</td>\n",
       "      <td>629526.0</td>\n",
       "      <td>53615.0</td>\n",
       "      <td>132400.0</td>\n",
       "      <td>41895.0</td>\n",
       "      <td>60315.0</td>\n",
       "      <td>341301.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Волгоградская область</th>\n",
       "      <td>2003455.0</td>\n",
       "      <td>12696.0</td>\n",
       "      <td>1265720.0</td>\n",
       "      <td>87657.0</td>\n",
       "      <td>240998.0</td>\n",
       "      <td>55325.0</td>\n",
       "      <td>71142.0</td>\n",
       "      <td>810598.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Вологодская область</th>\n",
       "      <td>987574.0</td>\n",
       "      <td>6596.0</td>\n",
       "      <td>601999.0</td>\n",
       "      <td>49492.0</td>\n",
       "      <td>93417.0</td>\n",
       "      <td>40306.0</td>\n",
       "      <td>57064.0</td>\n",
       "      <td>361720.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Воронежская область</th>\n",
       "      <td>1918524.0</td>\n",
       "      <td>13073.0</td>\n",
       "      <td>1291271.0</td>\n",
       "      <td>81081.0</td>\n",
       "      <td>292379.0</td>\n",
       "      <td>47974.0</td>\n",
       "      <td>69813.0</td>\n",
       "      <td>800024.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Город Байконур (Республика Казахстан)</th>\n",
       "      <td>15116.0</td>\n",
       "      <td>185.0</td>\n",
       "      <td>10422.0</td>\n",
       "      <td>586.0</td>\n",
       "      <td>1288.0</td>\n",
       "      <td>317.0</td>\n",
       "      <td>722.0</td>\n",
       "      <td>7509.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Город Москва</th>\n",
       "      <td>7309869.0</td>\n",
       "      <td>87698.0</td>\n",
       "      <td>4159740.0</td>\n",
       "      <td>267418.0</td>\n",
       "      <td>814573.0</td>\n",
       "      <td>214703.0</td>\n",
       "      <td>868736.0</td>\n",
       "      <td>1994310.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Город Санкт-Петербург</th>\n",
       "      <td>3849426.0</td>\n",
       "      <td>33331.0</td>\n",
       "      <td>2355236.0</td>\n",
       "      <td>110979.0</td>\n",
       "      <td>311937.0</td>\n",
       "      <td>157768.0</td>\n",
       "      <td>370799.0</td>\n",
       "      <td>1403753.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Еврейская автономная область</th>\n",
       "      <td>135703.0</td>\n",
       "      <td>1208.0</td>\n",
       "      <td>78205.0</td>\n",
       "      <td>6632.0</td>\n",
       "      <td>14796.0</td>\n",
       "      <td>2763.0</td>\n",
       "      <td>5102.0</td>\n",
       "      <td>48912.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Забайкальский край</th>\n",
       "      <td>831712.0</td>\n",
       "      <td>5271.0</td>\n",
       "      <td>493136.0</td>\n",
       "      <td>49612.0</td>\n",
       "      <td>71636.0</td>\n",
       "      <td>15015.0</td>\n",
       "      <td>29466.0</td>\n",
       "      <td>327407.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Ивановская область</th>\n",
       "      <td>866474.0</td>\n",
       "      <td>5338.0</td>\n",
       "      <td>513901.0</td>\n",
       "      <td>37650.0</td>\n",
       "      <td>95005.0</td>\n",
       "      <td>23060.0</td>\n",
       "      <td>37016.0</td>\n",
       "      <td>321170.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Иркутская область</th>\n",
       "      <td>1915179.0</td>\n",
       "      <td>12186.0</td>\n",
       "      <td>1060537.0</td>\n",
       "      <td>88419.0</td>\n",
       "      <td>242097.0</td>\n",
       "      <td>41152.0</td>\n",
       "      <td>94008.0</td>\n",
       "      <td>594861.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Кабардино-Балкарская Республика</th>\n",
       "      <td>528147.0</td>\n",
       "      <td>418.0</td>\n",
       "      <td>385368.0</td>\n",
       "      <td>11888.0</td>\n",
       "      <td>53261.0</td>\n",
       "      <td>11753.0</td>\n",
       "      <td>8937.0</td>\n",
       "      <td>299529.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Калужская область</th>\n",
       "      <td>798196.0</td>\n",
       "      <td>6327.0</td>\n",
       "      <td>500606.0</td>\n",
       "      <td>37634.0</td>\n",
       "      <td>101459.0</td>\n",
       "      <td>21427.0</td>\n",
       "      <td>40911.0</td>\n",
       "      <td>299175.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Камчатский край</th>\n",
       "      <td>256522.0</td>\n",
       "      <td>1951.0</td>\n",
       "      <td>154696.0</td>\n",
       "      <td>16504.0</td>\n",
       "      <td>25009.0</td>\n",
       "      <td>5430.0</td>\n",
       "      <td>14015.0</td>\n",
       "      <td>93738.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Карачаево-Черкесская Республика</th>\n",
       "      <td>319473.0</td>\n",
       "      <td>631.0</td>\n",
       "      <td>290989.0</td>\n",
       "      <td>2851.0</td>\n",
       "      <td>16937.0</td>\n",
       "      <td>2162.0</td>\n",
       "      <td>2629.0</td>\n",
       "      <td>266410.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Кемеровская область</th>\n",
       "      <td>2076673.0</td>\n",
       "      <td>16002.0</td>\n",
       "      <td>1626578.0</td>\n",
       "      <td>112067.0</td>\n",
       "      <td>133705.0</td>\n",
       "      <td>37450.0</td>\n",
       "      <td>75519.0</td>\n",
       "      <td>1267837.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Кировская область</th>\n",
       "      <td>1125794.0</td>\n",
       "      <td>7864.0</td>\n",
       "      <td>682321.0</td>\n",
       "      <td>54531.0</td>\n",
       "      <td>127982.0</td>\n",
       "      <td>36005.0</td>\n",
       "      <td>63993.0</td>\n",
       "      <td>399810.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Костромская область</th>\n",
       "      <td>567472.0</td>\n",
       "      <td>3076.0</td>\n",
       "      <td>345513.0</td>\n",
       "      <td>28204.0</td>\n",
       "      <td>90714.0</td>\n",
       "      <td>16094.0</td>\n",
       "      <td>26517.0</td>\n",
       "      <td>183984.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Краснодарский край</th>\n",
       "      <td>3803307.0</td>\n",
       "      <td>32893.0</td>\n",
       "      <td>2659197.0</td>\n",
       "      <td>176119.0</td>\n",
       "      <td>496909.0</td>\n",
       "      <td>88976.0</td>\n",
       "      <td>181844.0</td>\n",
       "      <td>1715349.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Красноярский край</th>\n",
       "      <td>2192321.0</td>\n",
       "      <td>16279.0</td>\n",
       "      <td>1287567.0</td>\n",
       "      <td>112222.0</td>\n",
       "      <td>235058.0</td>\n",
       "      <td>46123.0</td>\n",
       "      <td>109827.0</td>\n",
       "      <td>784337.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Курганская область</th>\n",
       "      <td>751903.0</td>\n",
       "      <td>4314.0</td>\n",
       "      <td>478077.0</td>\n",
       "      <td>41340.0</td>\n",
       "      <td>83955.0</td>\n",
       "      <td>19280.0</td>\n",
       "      <td>27725.0</td>\n",
       "      <td>305777.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Курская область</th>\n",
       "      <td>947765.0</td>\n",
       "      <td>6350.0</td>\n",
       "      <td>600367.0</td>\n",
       "      <td>49744.0</td>\n",
       "      <td>122775.0</td>\n",
       "      <td>23101.0</td>\n",
       "      <td>38002.0</td>\n",
       "      <td>366745.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Ленинградская область</th>\n",
       "      <td>1281947.0</td>\n",
       "      <td>10664.0</td>\n",
       "      <td>800093.0</td>\n",
       "      <td>54857.0</td>\n",
       "      <td>114951.0</td>\n",
       "      <td>47518.0</td>\n",
       "      <td>80874.0</td>\n",
       "      <td>501893.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Липецкая область</th>\n",
       "      <td>954695.0</td>\n",
       "      <td>7751.0</td>\n",
       "      <td>618784.0</td>\n",
       "      <td>44697.0</td>\n",
       "      <td>132408.0</td>\n",
       "      <td>24722.0</td>\n",
       "      <td>34778.0</td>\n",
       "      <td>382179.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Республика Калмыкия</th>\n",
       "      <td>214497.0</td>\n",
       "      <td>1242.0</td>\n",
       "      <td>131760.0</td>\n",
       "      <td>3374.0</td>\n",
       "      <td>23295.0</td>\n",
       "      <td>3562.0</td>\n",
       "      <td>8029.0</td>\n",
       "      <td>93500.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Республика Карелия</th>\n",
       "      <td>558774.0</td>\n",
       "      <td>3839.0</td>\n",
       "      <td>305600.0</td>\n",
       "      <td>26579.0</td>\n",
       "      <td>50957.0</td>\n",
       "      <td>18886.0</td>\n",
       "      <td>37798.0</td>\n",
       "      <td>171380.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Республика Коми</th>\n",
       "      <td>750661.0</td>\n",
       "      <td>6970.0</td>\n",
       "      <td>518810.0</td>\n",
       "      <td>40314.0</td>\n",
       "      <td>70135.0</td>\n",
       "      <td>22738.0</td>\n",
       "      <td>43759.0</td>\n",
       "      <td>341864.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Республика Марий Эл</th>\n",
       "      <td>537932.0</td>\n",
       "      <td>3984.0</td>\n",
       "      <td>377164.0</td>\n",
       "      <td>24895.0</td>\n",
       "      <td>84200.0</td>\n",
       "      <td>15175.0</td>\n",
       "      <td>24282.0</td>\n",
       "      <td>228612.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Республика Мордовия</th>\n",
       "      <td>649355.0</td>\n",
       "      <td>3796.0</td>\n",
       "      <td>577911.0</td>\n",
       "      <td>13635.0</td>\n",
       "      <td>42060.0</td>\n",
       "      <td>6448.0</td>\n",
       "      <td>9353.0</td>\n",
       "      <td>506415.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Республика Саха (Якутия)</th>\n",
       "      <td>614351.0</td>\n",
       "      <td>3978.0</td>\n",
       "      <td>453719.0</td>\n",
       "      <td>20010.0</td>\n",
       "      <td>65871.0</td>\n",
       "      <td>20193.0</td>\n",
       "      <td>29712.0</td>\n",
       "      <td>317933.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Республика Северная Осетия - Алания</th>\n",
       "      <td>512245.0</td>\n",
       "      <td>3995.0</td>\n",
       "      <td>409435.0</td>\n",
       "      <td>13063.0</td>\n",
       "      <td>87017.0</td>\n",
       "      <td>12864.0</td>\n",
       "      <td>6848.0</td>\n",
       "      <td>289643.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Республика Тыва</th>\n",
       "      <td>159341.0</td>\n",
       "      <td>860.0</td>\n",
       "      <td>146720.0</td>\n",
       "      <td>2574.0</td>\n",
       "      <td>6370.0</td>\n",
       "      <td>2023.0</td>\n",
       "      <td>2925.0</td>\n",
       "      <td>132828.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Республика Хакасия</th>\n",
       "      <td>382578.0</td>\n",
       "      <td>2819.0</td>\n",
       "      <td>244660.0</td>\n",
       "      <td>20991.0</td>\n",
       "      <td>50872.0</td>\n",
       "      <td>8878.0</td>\n",
       "      <td>19400.0</td>\n",
       "      <td>144519.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Ростовская область</th>\n",
       "      <td>3315673.0</td>\n",
       "      <td>21742.0</td>\n",
       "      <td>2091438.0</td>\n",
       "      <td>132418.0</td>\n",
       "      <td>423884.0</td>\n",
       "      <td>76633.0</td>\n",
       "      <td>134461.0</td>\n",
       "      <td>1324042.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Рязанская область</th>\n",
       "      <td>967998.0</td>\n",
       "      <td>6508.0</td>\n",
       "      <td>614459.0</td>\n",
       "      <td>47068.0</td>\n",
       "      <td>132981.0</td>\n",
       "      <td>25562.0</td>\n",
       "      <td>37903.0</td>\n",
       "      <td>370945.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Самарская область</th>\n",
       "      <td>2562916.0</td>\n",
       "      <td>20828.0</td>\n",
       "      <td>1536839.0</td>\n",
       "      <td>117828.0</td>\n",
       "      <td>320128.0</td>\n",
       "      <td>61361.0</td>\n",
       "      <td>125423.0</td>\n",
       "      <td>912099.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Саратовская область</th>\n",
       "      <td>1991376.0</td>\n",
       "      <td>12400.0</td>\n",
       "      <td>1310761.0</td>\n",
       "      <td>66985.0</td>\n",
       "      <td>206818.0</td>\n",
       "      <td>43267.0</td>\n",
       "      <td>59006.0</td>\n",
       "      <td>934685.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Сахалинская область</th>\n",
       "      <td>398893.0</td>\n",
       "      <td>2846.0</td>\n",
       "      <td>225504.0</td>\n",
       "      <td>20016.0</td>\n",
       "      <td>45730.0</td>\n",
       "      <td>8856.0</td>\n",
       "      <td>22337.0</td>\n",
       "      <td>128565.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Свердловская область</th>\n",
       "      <td>3527808.0</td>\n",
       "      <td>25560.0</td>\n",
       "      <td>2048423.0</td>\n",
       "      <td>107819.0</td>\n",
       "      <td>251690.0</td>\n",
       "      <td>113353.0</td>\n",
       "      <td>237780.0</td>\n",
       "      <td>1337781.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Смоленская область</th>\n",
       "      <td>816276.0</td>\n",
       "      <td>5843.0</td>\n",
       "      <td>476106.0</td>\n",
       "      <td>38246.0</td>\n",
       "      <td>111182.0</td>\n",
       "      <td>20930.0</td>\n",
       "      <td>32516.0</td>\n",
       "      <td>273232.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Ставропольский край</th>\n",
       "      <td>1983954.0</td>\n",
       "      <td>12448.0</td>\n",
       "      <td>1183292.0</td>\n",
       "      <td>83543.0</td>\n",
       "      <td>215600.0</td>\n",
       "      <td>37551.0</td>\n",
       "      <td>75724.0</td>\n",
       "      <td>770874.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Тамбовская область</th>\n",
       "      <td>884888.0</td>\n",
       "      <td>5570.0</td>\n",
       "      <td>614521.0</td>\n",
       "      <td>28179.0</td>\n",
       "      <td>107797.0</td>\n",
       "      <td>13973.0</td>\n",
       "      <td>19594.0</td>\n",
       "      <td>444978.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Тверская область</th>\n",
       "      <td>1137087.0</td>\n",
       "      <td>7076.0</td>\n",
       "      <td>660420.0</td>\n",
       "      <td>49384.0</td>\n",
       "      <td>131591.0</td>\n",
       "      <td>32835.0</td>\n",
       "      <td>59302.0</td>\n",
       "      <td>387308.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Территория за пределами РФ</th>\n",
       "      <td>459661.0</td>\n",
       "      <td>5838.0</td>\n",
       "      <td>436093.0</td>\n",
       "      <td>12006.0</td>\n",
       "      <td>31785.0</td>\n",
       "      <td>8674.0</td>\n",
       "      <td>59942.0</td>\n",
       "      <td>323686.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Томская область</th>\n",
       "      <td>787075.0</td>\n",
       "      <td>5194.0</td>\n",
       "      <td>453117.0</td>\n",
       "      <td>35139.0</td>\n",
       "      <td>86403.0</td>\n",
       "      <td>16966.0</td>\n",
       "      <td>53028.0</td>\n",
       "      <td>261581.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Тульская область</th>\n",
       "      <td>1249121.0</td>\n",
       "      <td>8862.0</td>\n",
       "      <td>858707.0</td>\n",
       "      <td>50218.0</td>\n",
       "      <td>147019.0</td>\n",
       "      <td>29601.0</td>\n",
       "      <td>43917.0</td>\n",
       "      <td>587952.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Тюменская область</th>\n",
       "      <td>1056505.0</td>\n",
       "      <td>6915.0</td>\n",
       "      <td>829264.0</td>\n",
       "      <td>59083.0</td>\n",
       "      <td>95398.0</td>\n",
       "      <td>20455.0</td>\n",
       "      <td>43047.0</td>\n",
       "      <td>611281.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Удмуртская Республика</th>\n",
       "      <td>1218251.0</td>\n",
       "      <td>9048.0</td>\n",
       "      <td>775357.0</td>\n",
       "      <td>49160.0</td>\n",
       "      <td>116277.0</td>\n",
       "      <td>26803.0</td>\n",
       "      <td>67362.0</td>\n",
       "      <td>515755.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Ульяновская область</th>\n",
       "      <td>1048667.0</td>\n",
       "      <td>6926.0</td>\n",
       "      <td>659233.0</td>\n",
       "      <td>46384.0</td>\n",
       "      <td>160089.0</td>\n",
       "      <td>27783.0</td>\n",
       "      <td>37437.0</td>\n",
       "      <td>387540.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Хабаровский край</th>\n",
       "      <td>1056125.0</td>\n",
       "      <td>8733.0</td>\n",
       "      <td>645264.0</td>\n",
       "      <td>68500.0</td>\n",
       "      <td>115436.0</td>\n",
       "      <td>31944.0</td>\n",
       "      <td>62145.0</td>\n",
       "      <td>367239.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Челябинская область</th>\n",
       "      <td>2757879.0</td>\n",
       "      <td>25366.0</td>\n",
       "      <td>1704033.0</td>\n",
       "      <td>97869.0</td>\n",
       "      <td>254542.0</td>\n",
       "      <td>88177.0</td>\n",
       "      <td>138907.0</td>\n",
       "      <td>1124538.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Чувашская Республика - Чувашия</th>\n",
       "      <td>954572.0</td>\n",
       "      <td>10465.0</td>\n",
       "      <td>692492.0</td>\n",
       "      <td>39707.0</td>\n",
       "      <td>144676.0</td>\n",
       "      <td>31201.0</td>\n",
       "      <td>38838.0</td>\n",
       "      <td>438070.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Чукотский автономный округ</th>\n",
       "      <td>35968.0</td>\n",
       "      <td>428.0</td>\n",
       "      <td>28909.0</td>\n",
       "      <td>2106.0</td>\n",
       "      <td>2651.0</td>\n",
       "      <td>633.0</td>\n",
       "      <td>2209.0</td>\n",
       "      <td>21310.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Ямало-Ненецкий автономный округ</th>\n",
       "      <td>358834.0</td>\n",
       "      <td>2669.0</td>\n",
       "      <td>332293.0</td>\n",
       "      <td>17456.0</td>\n",
       "      <td>18738.0</td>\n",
       "      <td>4979.0</td>\n",
       "      <td>7807.0</td>\n",
       "      <td>283313.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>80 rows × 8 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                                           total  invalid      valid  \\\n",
       "region                                                                 \n",
       "Алтайский край                         1961328.0  12004.0  1163426.0   \n",
       "Амурская область                        662320.0   4708.0   394996.0   \n",
       "Архангельская область                   988678.0   5522.0   569492.0   \n",
       "Астраханская область                    769608.0   5107.0   427496.0   \n",
       "Белгородская область                   1210590.0  10209.0   889764.0   \n",
       "Брянская область                       1045083.0   6922.0   692926.0   \n",
       "Владимирская область                   1202174.0   8484.0   629526.0   \n",
       "Волгоградская область                  2003455.0  12696.0  1265720.0   \n",
       "Вологодская область                     987574.0   6596.0   601999.0   \n",
       "Воронежская область                    1918524.0  13073.0  1291271.0   \n",
       "Город Байконур (Республика Казахстан)    15116.0    185.0    10422.0   \n",
       "Город Москва                           7309869.0  87698.0  4159740.0   \n",
       "Город Санкт-Петербург                  3849426.0  33331.0  2355236.0   \n",
       "Еврейская автономная область            135703.0   1208.0    78205.0   \n",
       "Забайкальский край                      831712.0   5271.0   493136.0   \n",
       "Ивановская область                      866474.0   5338.0   513901.0   \n",
       "Иркутская область                      1915179.0  12186.0  1060537.0   \n",
       "Кабардино-Балкарская Республика         528147.0    418.0   385368.0   \n",
       "Калужская область                       798196.0   6327.0   500606.0   \n",
       "Камчатский край                         256522.0   1951.0   154696.0   \n",
       "Карачаево-Черкесская Республика         319473.0    631.0   290989.0   \n",
       "Кемеровская область                    2076673.0  16002.0  1626578.0   \n",
       "Кировская область                      1125794.0   7864.0   682321.0   \n",
       "Костромская область                     567472.0   3076.0   345513.0   \n",
       "Краснодарский край                     3803307.0  32893.0  2659197.0   \n",
       "Красноярский край                      2192321.0  16279.0  1287567.0   \n",
       "Курганская область                      751903.0   4314.0   478077.0   \n",
       "Курская область                         947765.0   6350.0   600367.0   \n",
       "Ленинградская область                  1281947.0  10664.0   800093.0   \n",
       "Липецкая область                        954695.0   7751.0   618784.0   \n",
       "...                                          ...      ...        ...   \n",
       "Республика Калмыкия                     214497.0   1242.0   131760.0   \n",
       "Республика Карелия                      558774.0   3839.0   305600.0   \n",
       "Республика Коми                         750661.0   6970.0   518810.0   \n",
       "Республика Марий Эл                     537932.0   3984.0   377164.0   \n",
       "Республика Мордовия                     649355.0   3796.0   577911.0   \n",
       "Республика Саха (Якутия)                614351.0   3978.0   453719.0   \n",
       "Республика Северная Осетия - Алания     512245.0   3995.0   409435.0   \n",
       "Республика Тыва                         159341.0    860.0   146720.0   \n",
       "Республика Хакасия                      382578.0   2819.0   244660.0   \n",
       "Ростовская область                     3315673.0  21742.0  2091438.0   \n",
       "Рязанская область                       967998.0   6508.0   614459.0   \n",
       "Самарская область                      2562916.0  20828.0  1536839.0   \n",
       "Саратовская область                    1991376.0  12400.0  1310761.0   \n",
       "Сахалинская область                     398893.0   2846.0   225504.0   \n",
       "Свердловская область                   3527808.0  25560.0  2048423.0   \n",
       "Смоленская область                      816276.0   5843.0   476106.0   \n",
       "Ставропольский край                    1983954.0  12448.0  1183292.0   \n",
       "Тамбовская область                      884888.0   5570.0   614521.0   \n",
       "Тверская область                       1137087.0   7076.0   660420.0   \n",
       "Территория за пределами РФ              459661.0   5838.0   436093.0   \n",
       "Томская область                         787075.0   5194.0   453117.0   \n",
       "Тульская область                       1249121.0   8862.0   858707.0   \n",
       "Тюменская область                      1056505.0   6915.0   829264.0   \n",
       "Удмуртская Республика                  1218251.0   9048.0   775357.0   \n",
       "Ульяновская область                    1048667.0   6926.0   659233.0   \n",
       "Хабаровский край                       1056125.0   8733.0   645264.0   \n",
       "Челябинская область                    2757879.0  25366.0  1704033.0   \n",
       "Чувашская Республика - Чувашия          954572.0  10465.0   692492.0   \n",
       "Чукотский автономный округ               35968.0    428.0    28909.0   \n",
       "Ямало-Ненецкий автономный округ         358834.0   2669.0   332293.0   \n",
       "\n",
       "                                             Zh        Zu        Mi        Pr  \\\n",
       "region                                                                          \n",
       "Алтайский край                          97961.0  261665.0   45883.0   83778.0   \n",
       "Амурская область                        39717.0   67433.0   13594.0   23070.0   \n",
       "Архангельская область                   51169.0   91648.0   33223.0   60108.0   \n",
       "Астраханская область                    21918.0   67662.0   18595.0   21873.0   \n",
       "Белгородская область                    59561.0  211079.0   35601.0   49807.0   \n",
       "Брянская область                        42974.0  146340.0   23453.0   32141.0   \n",
       "Владимирская область                    53615.0  132400.0   41895.0   60315.0   \n",
       "Волгоградская область                   87657.0  240998.0   55325.0   71142.0   \n",
       "Вологодская область                     49492.0   93417.0   40306.0   57064.0   \n",
       "Воронежская область                     81081.0  292379.0   47974.0   69813.0   \n",
       "Город Байконур (Республика Казахстан)     586.0    1288.0     317.0     722.0   \n",
       "Город Москва                           267418.0  814573.0  214703.0  868736.0   \n",
       "Город Санкт-Петербург                  110979.0  311937.0  157768.0  370799.0   \n",
       "Еврейская автономная область             6632.0   14796.0    2763.0    5102.0   \n",
       "Забайкальский край                      49612.0   71636.0   15015.0   29466.0   \n",
       "Ивановская область                      37650.0   95005.0   23060.0   37016.0   \n",
       "Иркутская область                       88419.0  242097.0   41152.0   94008.0   \n",
       "Кабардино-Балкарская Республика         11888.0   53261.0   11753.0    8937.0   \n",
       "Калужская область                       37634.0  101459.0   21427.0   40911.0   \n",
       "Камчатский край                         16504.0   25009.0    5430.0   14015.0   \n",
       "Карачаево-Черкесская Республика          2851.0   16937.0    2162.0    2629.0   \n",
       "Кемеровская область                    112067.0  133705.0   37450.0   75519.0   \n",
       "Кировская область                       54531.0  127982.0   36005.0   63993.0   \n",
       "Костромская область                     28204.0   90714.0   16094.0   26517.0   \n",
       "Краснодарский край                     176119.0  496909.0   88976.0  181844.0   \n",
       "Красноярский край                      112222.0  235058.0   46123.0  109827.0   \n",
       "Курганская область                      41340.0   83955.0   19280.0   27725.0   \n",
       "Курская область                         49744.0  122775.0   23101.0   38002.0   \n",
       "Ленинградская область                   54857.0  114951.0   47518.0   80874.0   \n",
       "Липецкая область                        44697.0  132408.0   24722.0   34778.0   \n",
       "...                                         ...       ...       ...       ...   \n",
       "Республика Калмыкия                      3374.0   23295.0    3562.0    8029.0   \n",
       "Республика Карелия                      26579.0   50957.0   18886.0   37798.0   \n",
       "Республика Коми                         40314.0   70135.0   22738.0   43759.0   \n",
       "Республика Марий Эл                     24895.0   84200.0   15175.0   24282.0   \n",
       "Республика Мордовия                     13635.0   42060.0    6448.0    9353.0   \n",
       "Республика Саха (Якутия)                20010.0   65871.0   20193.0   29712.0   \n",
       "Республика Северная Осетия - Алания     13063.0   87017.0   12864.0    6848.0   \n",
       "Республика Тыва                          2574.0    6370.0    2023.0    2925.0   \n",
       "Республика Хакасия                      20991.0   50872.0    8878.0   19400.0   \n",
       "Ростовская область                     132418.0  423884.0   76633.0  134461.0   \n",
       "Рязанская область                       47068.0  132981.0   25562.0   37903.0   \n",
       "Самарская область                      117828.0  320128.0   61361.0  125423.0   \n",
       "Саратовская область                     66985.0  206818.0   43267.0   59006.0   \n",
       "Сахалинская область                     20016.0   45730.0    8856.0   22337.0   \n",
       "Свердловская область                   107819.0  251690.0  113353.0  237780.0   \n",
       "Смоленская область                      38246.0  111182.0   20930.0   32516.0   \n",
       "Ставропольский край                     83543.0  215600.0   37551.0   75724.0   \n",
       "Тамбовская область                      28179.0  107797.0   13973.0   19594.0   \n",
       "Тверская область                        49384.0  131591.0   32835.0   59302.0   \n",
       "Территория за пределами РФ              12006.0   31785.0    8674.0   59942.0   \n",
       "Томская область                         35139.0   86403.0   16966.0   53028.0   \n",
       "Тульская область                        50218.0  147019.0   29601.0   43917.0   \n",
       "Тюменская область                       59083.0   95398.0   20455.0   43047.0   \n",
       "Удмуртская Республика                   49160.0  116277.0   26803.0   67362.0   \n",
       "Ульяновская область                     46384.0  160089.0   27783.0   37437.0   \n",
       "Хабаровский край                        68500.0  115436.0   31944.0   62145.0   \n",
       "Челябинская область                     97869.0  254542.0   88177.0  138907.0   \n",
       "Чувашская Республика - Чувашия          39707.0  144676.0   31201.0   38838.0   \n",
       "Чукотский автономный округ               2106.0    2651.0     633.0    2209.0   \n",
       "Ямало-Ненецкий автономный округ         17456.0   18738.0    4979.0    7807.0   \n",
       "\n",
       "                                              Pu  \n",
       "region                                            \n",
       "Алтайский край                          674139.0  \n",
       "Амурская область                        251182.0  \n",
       "Архангельская область                   333344.0  \n",
       "Астраханская область                    297448.0  \n",
       "Белгородская область                    533716.0  \n",
       "Брянская область                        448018.0  \n",
       "Владимирская область                    341301.0  \n",
       "Волгоградская область                   810598.0  \n",
       "Вологодская область                     361720.0  \n",
       "Воронежская область                     800024.0  \n",
       "Город Байконур (Республика Казахстан)     7509.0  \n",
       "Город Москва                           1994310.0  \n",
       "Город Санкт-Петербург                  1403753.0  \n",
       "Еврейская автономная область             48912.0  \n",
       "Забайкальский край                      327407.0  \n",
       "Ивановская область                      321170.0  \n",
       "Иркутская область                       594861.0  \n",
       "Кабардино-Балкарская Республика         299529.0  \n",
       "Калужская область                       299175.0  \n",
       "Камчатский край                          93738.0  \n",
       "Карачаево-Черкесская Республика         266410.0  \n",
       "Кемеровская область                    1267837.0  \n",
       "Кировская область                       399810.0  \n",
       "Костромская область                     183984.0  \n",
       "Краснодарский край                     1715349.0  \n",
       "Красноярский край                       784337.0  \n",
       "Курганская область                      305777.0  \n",
       "Курская область                         366745.0  \n",
       "Ленинградская область                   501893.0  \n",
       "Липецкая область                        382179.0  \n",
       "...                                          ...  \n",
       "Республика Калмыкия                      93500.0  \n",
       "Республика Карелия                      171380.0  \n",
       "Республика Коми                         341864.0  \n",
       "Республика Марий Эл                     228612.0  \n",
       "Республика Мордовия                     506415.0  \n",
       "Республика Саха (Якутия)                317933.0  \n",
       "Республика Северная Осетия - Алания     289643.0  \n",
       "Республика Тыва                         132828.0  \n",
       "Республика Хакасия                      144519.0  \n",
       "Ростовская область                     1324042.0  \n",
       "Рязанская область                       370945.0  \n",
       "Самарская область                       912099.0  \n",
       "Саратовская область                     934685.0  \n",
       "Сахалинская область                     128565.0  \n",
       "Свердловская область                   1337781.0  \n",
       "Смоленская область                      273232.0  \n",
       "Ставропольский край                     770874.0  \n",
       "Тамбовская область                      444978.0  \n",
       "Тверская область                        387308.0  \n",
       "Территория за пределами РФ              323686.0  \n",
       "Томская область                         261581.0  \n",
       "Тульская область                        587952.0  \n",
       "Тюменская область                       611281.0  \n",
       "Удмуртская Республика                   515755.0  \n",
       "Ульяновская область                     387540.0  \n",
       "Хабаровский край                        367239.0  \n",
       "Челябинская область                    1124538.0  \n",
       "Чувашская Республика - Чувашия          438070.0  \n",
       "Чукотский автономный округ               21310.0  \n",
       "Ямало-Ненецкий автономный округ         283313.0  \n",
       "\n",
       "[80 rows x 8 columns]"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d.groupby('region').agg('sum')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Сначала в `.groupby()` мы указали переменную, по которой нужно выполнить группировку, затем в `.agg()` мы указали функцию, которую нужно выполнить. В нашем случае это 'sum', поскольку нам нужно просто сложить все показатели в пределах одного региона. Применять можно и другие функции, например, считать среднее:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>total</th>\n",
       "      <th>invalid</th>\n",
       "      <th>valid</th>\n",
       "      <th>Zh</th>\n",
       "      <th>Zu</th>\n",
       "      <th>Mi</th>\n",
       "      <th>Pr</th>\n",
       "      <th>Pu</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>region</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>Алтайский край</th>\n",
       "      <td>1053.344791</td>\n",
       "      <td>6.446831</td>\n",
       "      <td>624.825994</td>\n",
       "      <td>52.610634</td>\n",
       "      <td>140.529001</td>\n",
       "      <td>24.641783</td>\n",
       "      <td>44.993555</td>\n",
       "      <td>362.051020</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Амурская область</th>\n",
       "      <td>845.874840</td>\n",
       "      <td>6.012771</td>\n",
       "      <td>504.464879</td>\n",
       "      <td>50.724138</td>\n",
       "      <td>86.121328</td>\n",
       "      <td>17.361430</td>\n",
       "      <td>29.463602</td>\n",
       "      <td>320.794381</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Архангельская область</th>\n",
       "      <td>1004.754065</td>\n",
       "      <td>5.611789</td>\n",
       "      <td>578.752033</td>\n",
       "      <td>52.001016</td>\n",
       "      <td>93.138211</td>\n",
       "      <td>33.763211</td>\n",
       "      <td>61.085366</td>\n",
       "      <td>338.764228</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Астраханская область</th>\n",
       "      <td>1313.324232</td>\n",
       "      <td>8.715017</td>\n",
       "      <td>729.515358</td>\n",
       "      <td>37.402730</td>\n",
       "      <td>115.464164</td>\n",
       "      <td>31.732082</td>\n",
       "      <td>37.325939</td>\n",
       "      <td>507.590444</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Белгородская область</th>\n",
       "      <td>968.472000</td>\n",
       "      <td>8.167200</td>\n",
       "      <td>711.811200</td>\n",
       "      <td>47.648800</td>\n",
       "      <td>168.863200</td>\n",
       "      <td>28.480800</td>\n",
       "      <td>39.845600</td>\n",
       "      <td>426.972800</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                             total   invalid       valid         Zh  \\\n",
       "region                                                                \n",
       "Алтайский край         1053.344791  6.446831  624.825994  52.610634   \n",
       "Амурская область        845.874840  6.012771  504.464879  50.724138   \n",
       "Архангельская область  1004.754065  5.611789  578.752033  52.001016   \n",
       "Астраханская область   1313.324232  8.715017  729.515358  37.402730   \n",
       "Белгородская область    968.472000  8.167200  711.811200  47.648800   \n",
       "\n",
       "                               Zu         Mi         Pr          Pu  \n",
       "region                                                               \n",
       "Алтайский край         140.529001  24.641783  44.993555  362.051020  \n",
       "Амурская область        86.121328  17.361430  29.463602  320.794381  \n",
       "Архангельская область   93.138211  33.763211  61.085366  338.764228  \n",
       "Астраханская область   115.464164  31.732082  37.325939  507.590444  \n",
       "Белгородская область   168.863200  28.480800  39.845600  426.972800  "
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d.groupby('region').agg('mean').head() # mean - среднее"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Или сразу несколько статистик. которые можно указать в `.agg()` в виде списка."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr:last-of-type th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th colspan=\"2\" halign=\"left\">total</th>\n",
       "      <th colspan=\"2\" halign=\"left\">invalid</th>\n",
       "      <th colspan=\"2\" halign=\"left\">valid</th>\n",
       "      <th colspan=\"2\" halign=\"left\">Zh</th>\n",
       "      <th colspan=\"2\" halign=\"left\">Zu</th>\n",
       "      <th colspan=\"2\" halign=\"left\">Mi</th>\n",
       "      <th colspan=\"2\" halign=\"left\">Pr</th>\n",
       "      <th colspan=\"2\" halign=\"left\">Pu</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th>mean</th>\n",
       "      <th>median</th>\n",
       "      <th>mean</th>\n",
       "      <th>median</th>\n",
       "      <th>mean</th>\n",
       "      <th>median</th>\n",
       "      <th>mean</th>\n",
       "      <th>median</th>\n",
       "      <th>mean</th>\n",
       "      <th>median</th>\n",
       "      <th>mean</th>\n",
       "      <th>median</th>\n",
       "      <th>mean</th>\n",
       "      <th>median</th>\n",
       "      <th>mean</th>\n",
       "      <th>median</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>region</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>Алтайский край</th>\n",
       "      <td>1053.344791</td>\n",
       "      <td>823.0</td>\n",
       "      <td>6.446831</td>\n",
       "      <td>4.0</td>\n",
       "      <td>624.825994</td>\n",
       "      <td>495.0</td>\n",
       "      <td>52.610634</td>\n",
       "      <td>41.0</td>\n",
       "      <td>140.529001</td>\n",
       "      <td>109.5</td>\n",
       "      <td>24.641783</td>\n",
       "      <td>15.0</td>\n",
       "      <td>44.993555</td>\n",
       "      <td>22.0</td>\n",
       "      <td>362.051020</td>\n",
       "      <td>305.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Амурская область</th>\n",
       "      <td>845.874840</td>\n",
       "      <td>523.0</td>\n",
       "      <td>6.012771</td>\n",
       "      <td>4.0</td>\n",
       "      <td>504.464879</td>\n",
       "      <td>326.0</td>\n",
       "      <td>50.724138</td>\n",
       "      <td>31.0</td>\n",
       "      <td>86.121328</td>\n",
       "      <td>52.0</td>\n",
       "      <td>17.361430</td>\n",
       "      <td>9.0</td>\n",
       "      <td>29.463602</td>\n",
       "      <td>12.0</td>\n",
       "      <td>320.794381</td>\n",
       "      <td>224.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Архангельская область</th>\n",
       "      <td>1004.754065</td>\n",
       "      <td>581.5</td>\n",
       "      <td>5.611789</td>\n",
       "      <td>2.0</td>\n",
       "      <td>578.752033</td>\n",
       "      <td>332.5</td>\n",
       "      <td>52.001016</td>\n",
       "      <td>29.0</td>\n",
       "      <td>93.138211</td>\n",
       "      <td>44.0</td>\n",
       "      <td>33.763211</td>\n",
       "      <td>19.0</td>\n",
       "      <td>61.085366</td>\n",
       "      <td>20.5</td>\n",
       "      <td>338.764228</td>\n",
       "      <td>230.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Астраханская область</th>\n",
       "      <td>1313.324232</td>\n",
       "      <td>1283.5</td>\n",
       "      <td>8.715017</td>\n",
       "      <td>6.0</td>\n",
       "      <td>729.515358</td>\n",
       "      <td>692.5</td>\n",
       "      <td>37.402730</td>\n",
       "      <td>31.0</td>\n",
       "      <td>115.464164</td>\n",
       "      <td>100.5</td>\n",
       "      <td>31.732082</td>\n",
       "      <td>22.0</td>\n",
       "      <td>37.325939</td>\n",
       "      <td>22.0</td>\n",
       "      <td>507.590444</td>\n",
       "      <td>480.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Белгородская область</th>\n",
       "      <td>968.472000</td>\n",
       "      <td>802.0</td>\n",
       "      <td>8.167200</td>\n",
       "      <td>6.0</td>\n",
       "      <td>711.811200</td>\n",
       "      <td>633.0</td>\n",
       "      <td>47.648800</td>\n",
       "      <td>41.0</td>\n",
       "      <td>168.863200</td>\n",
       "      <td>140.5</td>\n",
       "      <td>28.480800</td>\n",
       "      <td>21.0</td>\n",
       "      <td>39.845600</td>\n",
       "      <td>22.0</td>\n",
       "      <td>426.972800</td>\n",
       "      <td>397.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                             total           invalid              valid  \\\n",
       "                              mean  median      mean median        mean   \n",
       "region                                                                    \n",
       "Алтайский край         1053.344791   823.0  6.446831    4.0  624.825994   \n",
       "Амурская область        845.874840   523.0  6.012771    4.0  504.464879   \n",
       "Архангельская область  1004.754065   581.5  5.611789    2.0  578.752033   \n",
       "Астраханская область   1313.324232  1283.5  8.715017    6.0  729.515358   \n",
       "Белгородская область    968.472000   802.0  8.167200    6.0  711.811200   \n",
       "\n",
       "                                     Zh                 Zu                Mi  \\\n",
       "                      median       mean median        mean median       mean   \n",
       "region                                                                         \n",
       "Алтайский край         495.0  52.610634   41.0  140.529001  109.5  24.641783   \n",
       "Амурская область       326.0  50.724138   31.0   86.121328   52.0  17.361430   \n",
       "Архангельская область  332.5  52.001016   29.0   93.138211   44.0  33.763211   \n",
       "Астраханская область   692.5  37.402730   31.0  115.464164  100.5  31.732082   \n",
       "Белгородская область   633.0  47.648800   41.0  168.863200  140.5  28.480800   \n",
       "\n",
       "                                     Pr                 Pu         \n",
       "                      median       mean median        mean median  \n",
       "region                                                             \n",
       "Алтайский край          15.0  44.993555   22.0  362.051020  305.5  \n",
       "Амурская область         9.0  29.463602   12.0  320.794381  224.0  \n",
       "Архангельская область   19.0  61.085366   20.5  338.764228  230.5  \n",
       "Астраханская область    22.0  37.325939   22.0  507.590444  480.0  \n",
       "Белгородская область    21.0  39.845600   22.0  426.972800  397.0  "
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d.groupby('region').agg(['mean', 'median']).head() # среднее и медиана"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Кроме того, внутри `.agg()` можно указывать свои функции. Например, нас интересует разница между максимальным и минимальным значением. Сначала напишем функцию `my_diff`, которая будет определять такую разность:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "def my_diff(x):\n",
    "    return max(x) - min(x)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Проверим, как она работает:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "my_diff([4, 6, 8]) # все верно, 8 - 4 = 4"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Теперь используем эту функцию внутри `.agg()`:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>total</th>\n",
       "      <th>invalid</th>\n",
       "      <th>valid</th>\n",
       "      <th>Zh</th>\n",
       "      <th>Zu</th>\n",
       "      <th>Mi</th>\n",
       "      <th>Pr</th>\n",
       "      <th>Pu</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>region</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>Алтайский край</th>\n",
       "      <td>3030.0</td>\n",
       "      <td>72.0</td>\n",
       "      <td>2389.0</td>\n",
       "      <td>379.0</td>\n",
       "      <td>573.0</td>\n",
       "      <td>131.0</td>\n",
       "      <td>351.0</td>\n",
       "      <td>1639.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Амурская область</th>\n",
       "      <td>2942.0</td>\n",
       "      <td>130.0</td>\n",
       "      <td>1773.0</td>\n",
       "      <td>267.0</td>\n",
       "      <td>404.0</td>\n",
       "      <td>92.0</td>\n",
       "      <td>197.0</td>\n",
       "      <td>1201.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Архангельская область</th>\n",
       "      <td>2953.0</td>\n",
       "      <td>76.0</td>\n",
       "      <td>1951.0</td>\n",
       "      <td>232.0</td>\n",
       "      <td>407.0</td>\n",
       "      <td>153.0</td>\n",
       "      <td>369.0</td>\n",
       "      <td>1205.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Астраханская область</th>\n",
       "      <td>2936.0</td>\n",
       "      <td>223.0</td>\n",
       "      <td>1862.0</td>\n",
       "      <td>209.0</td>\n",
       "      <td>411.0</td>\n",
       "      <td>157.0</td>\n",
       "      <td>234.0</td>\n",
       "      <td>1367.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Белгородская область</th>\n",
       "      <td>2998.0</td>\n",
       "      <td>71.0</td>\n",
       "      <td>2118.0</td>\n",
       "      <td>234.0</td>\n",
       "      <td>612.0</td>\n",
       "      <td>108.0</td>\n",
       "      <td>335.0</td>\n",
       "      <td>1268.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                        total  invalid   valid     Zh     Zu     Mi     Pr  \\\n",
       "region                                                                       \n",
       "Алтайский край         3030.0     72.0  2389.0  379.0  573.0  131.0  351.0   \n",
       "Амурская область       2942.0    130.0  1773.0  267.0  404.0   92.0  197.0   \n",
       "Архангельская область  2953.0     76.0  1951.0  232.0  407.0  153.0  369.0   \n",
       "Астраханская область   2936.0    223.0  1862.0  209.0  411.0  157.0  234.0   \n",
       "Белгородская область   2998.0     71.0  2118.0  234.0  612.0  108.0  335.0   \n",
       "\n",
       "                           Pu  \n",
       "region                         \n",
       "Алтайский край         1639.0  \n",
       "Амурская область       1201.0  \n",
       "Архангельская область  1205.0  \n",
       "Астраханская область   1367.0  \n",
       "Белгородская область   1268.0  "
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d.groupby('region').agg(my_diff).head() # везде смотрим на первые 5 строк"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Возможностей на самом деле у метода `.agg()` много, но давайте более продвинутые вещи оставим на потом (будет выложен отдельный конспект с дополнительными материалами).\n",
    "\n",
    "Все, что мы пока сделали, очень интересно, но есть проблема: все данные пока даны в абсолютных значениях, не в процентах. Это неудобно. Давайте сгруппируем данные по региону и добавим в базу с агрегированными данными новые столбцы: явка в процентах и проценты голосов за каждого кандидата.\n",
    "\n",
    "Для этого необходимо вспомнить, как считается явка и проценты голосов. Явка считается так: суммируем число действительных и недействительных бюллетеней. Чтобы получить явку в процентах, делим явку на общее число зарегистрированных избирателей и домножаем на 100, чтобы перевести долю в проценты. Проценты голосов за кандидатов считаем от явки, берем число голосов за кандидата, делим на явку и домножаем на 100. Проделаем это поэтапно. \n",
    "\n",
    "Сначала сохраним результат агрегирования в переменную `regs` и добавим новый столбец для явки в абсолютных значениях (в голосах)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "regs = d.groupby('region').agg('sum')\n",
    "\n",
    "regs[\"turnout\"] = regs.invalid + regs.valid # новый столбец - сумма двух старых"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>total</th>\n",
       "      <th>invalid</th>\n",
       "      <th>valid</th>\n",
       "      <th>Zh</th>\n",
       "      <th>Zu</th>\n",
       "      <th>Mi</th>\n",
       "      <th>Pr</th>\n",
       "      <th>Pu</th>\n",
       "      <th>turnout</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>region</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>Алтайский край</th>\n",
       "      <td>1961328.0</td>\n",
       "      <td>12004.0</td>\n",
       "      <td>1163426.0</td>\n",
       "      <td>97961.0</td>\n",
       "      <td>261665.0</td>\n",
       "      <td>45883.0</td>\n",
       "      <td>83778.0</td>\n",
       "      <td>674139.0</td>\n",
       "      <td>1175430.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Амурская область</th>\n",
       "      <td>662320.0</td>\n",
       "      <td>4708.0</td>\n",
       "      <td>394996.0</td>\n",
       "      <td>39717.0</td>\n",
       "      <td>67433.0</td>\n",
       "      <td>13594.0</td>\n",
       "      <td>23070.0</td>\n",
       "      <td>251182.0</td>\n",
       "      <td>399704.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Архангельская область</th>\n",
       "      <td>988678.0</td>\n",
       "      <td>5522.0</td>\n",
       "      <td>569492.0</td>\n",
       "      <td>51169.0</td>\n",
       "      <td>91648.0</td>\n",
       "      <td>33223.0</td>\n",
       "      <td>60108.0</td>\n",
       "      <td>333344.0</td>\n",
       "      <td>575014.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                           total  invalid      valid       Zh        Zu  \\\n",
       "region                                                                    \n",
       "Алтайский край         1961328.0  12004.0  1163426.0  97961.0  261665.0   \n",
       "Амурская область        662320.0   4708.0   394996.0  39717.0   67433.0   \n",
       "Архангельская область   988678.0   5522.0   569492.0  51169.0   91648.0   \n",
       "\n",
       "                            Mi       Pr        Pu    turnout  \n",
       "region                                                        \n",
       "Алтайский край         45883.0  83778.0  674139.0  1175430.0  \n",
       "Амурская область       13594.0  23070.0  251182.0   399704.0  \n",
       "Архангельская область  33223.0  60108.0  333344.0   575014.0  "
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "regs.head(3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Теперь добавим столбец с явкой в процентах:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "regs[\"turnout_perc\"] = regs.turnout / regs.total * 100"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>total</th>\n",
       "      <th>invalid</th>\n",
       "      <th>valid</th>\n",
       "      <th>Zh</th>\n",
       "      <th>Zu</th>\n",
       "      <th>Mi</th>\n",
       "      <th>Pr</th>\n",
       "      <th>Pu</th>\n",
       "      <th>turnout</th>\n",
       "      <th>turnout_perc</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>region</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>Алтайский край</th>\n",
       "      <td>1961328.0</td>\n",
       "      <td>12004.0</td>\n",
       "      <td>1163426.0</td>\n",
       "      <td>97961.0</td>\n",
       "      <td>261665.0</td>\n",
       "      <td>45883.0</td>\n",
       "      <td>83778.0</td>\n",
       "      <td>674139.0</td>\n",
       "      <td>1175430.0</td>\n",
       "      <td>59.930313</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Амурская область</th>\n",
       "      <td>662320.0</td>\n",
       "      <td>4708.0</td>\n",
       "      <td>394996.0</td>\n",
       "      <td>39717.0</td>\n",
       "      <td>67433.0</td>\n",
       "      <td>13594.0</td>\n",
       "      <td>23070.0</td>\n",
       "      <td>251182.0</td>\n",
       "      <td>399704.0</td>\n",
       "      <td>60.349076</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Архангельская область</th>\n",
       "      <td>988678.0</td>\n",
       "      <td>5522.0</td>\n",
       "      <td>569492.0</td>\n",
       "      <td>51169.0</td>\n",
       "      <td>91648.0</td>\n",
       "      <td>33223.0</td>\n",
       "      <td>60108.0</td>\n",
       "      <td>333344.0</td>\n",
       "      <td>575014.0</td>\n",
       "      <td>58.159886</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                           total  invalid      valid       Zh        Zu  \\\n",
       "region                                                                    \n",
       "Алтайский край         1961328.0  12004.0  1163426.0  97961.0  261665.0   \n",
       "Амурская область        662320.0   4708.0   394996.0  39717.0   67433.0   \n",
       "Архангельская область   988678.0   5522.0   569492.0  51169.0   91648.0   \n",
       "\n",
       "                            Mi       Pr        Pu    turnout  turnout_perc  \n",
       "region                                                                      \n",
       "Алтайский край         45883.0  83778.0  674139.0  1175430.0     59.930313  \n",
       "Амурская область       13594.0  23070.0  251182.0   399704.0     60.349076  \n",
       "Архангельская область  33223.0  60108.0  333344.0   575014.0     58.159886  "
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "regs.head(3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Осталось проделать аналогичные операции для голосов за разных кандидатов. Но повторять одно и то же пять раз не хочется (а что бы мы делали, если бы кандидатов было больше?). Давайте напишем функцию, которая будет принимать на вход столбец, делить все его значения на значения из столбца *turnout* и переводить все в проценты."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "def to_perc(x):\n",
    "    return x / regs.turnout * 100"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "А теперь выберем из базы данных столбцы с голосами за кандидатов и применим к ним нашу функцию."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "perc = regs[['Zh' ,'Zu', 'Mi', 'Pr', 'Pu']].apply(to_perc, axis = 0) # axis = 0 - по столбцам, не по строкам "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Zh</th>\n",
       "      <th>Zu</th>\n",
       "      <th>Mi</th>\n",
       "      <th>Pr</th>\n",
       "      <th>Pu</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>region</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>Алтайский край</th>\n",
       "      <td>8.334056</td>\n",
       "      <td>22.261215</td>\n",
       "      <td>3.903508</td>\n",
       "      <td>7.127434</td>\n",
       "      <td>57.352543</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Амурская область</th>\n",
       "      <td>9.936603</td>\n",
       "      <td>16.870734</td>\n",
       "      <td>3.401017</td>\n",
       "      <td>5.771771</td>\n",
       "      <td>62.842003</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Архангельская область</th>\n",
       "      <td>8.898740</td>\n",
       "      <td>15.938395</td>\n",
       "      <td>5.777772</td>\n",
       "      <td>10.453311</td>\n",
       "      <td>57.971458</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                             Zh         Zu        Mi         Pr         Pu\n",
       "region                                                                    \n",
       "Алтайский край         8.334056  22.261215  3.903508   7.127434  57.352543\n",
       "Амурская область       9.936603  16.870734  3.401017   5.771771  62.842003\n",
       "Архангельская область  8.898740  15.938395  5.777772  10.453311  57.971458"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "perc.head(3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Нужно переименовать столбцы в базе `perc`. Давайте сделаем это по-умному: возьмем названия столбцов в `perc` и приклеим к ним часть с `_perc`, чтобы названия столбцов с показателями в процентах отличались от показателей в абсолютных числах."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['Zh', 'Zu', 'Mi', 'Pr', 'Pu']"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "old_cols = list(perc.columns)\n",
    "old_cols"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['Zh_perc', 'Zu_perc', 'Mi_perc', 'Pr_perc', 'Pu_perc']"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "new_cols = [x + \"_perc\" for x in old_cols]\n",
    "new_cols"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "perc.columns = new_cols"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Zh_perc</th>\n",
       "      <th>Zu_perc</th>\n",
       "      <th>Mi_perc</th>\n",
       "      <th>Pr_perc</th>\n",
       "      <th>Pu_perc</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>region</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>Алтайский край</th>\n",
       "      <td>8.334056</td>\n",
       "      <td>22.261215</td>\n",
       "      <td>3.903508</td>\n",
       "      <td>7.127434</td>\n",
       "      <td>57.352543</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Амурская область</th>\n",
       "      <td>9.936603</td>\n",
       "      <td>16.870734</td>\n",
       "      <td>3.401017</td>\n",
       "      <td>5.771771</td>\n",
       "      <td>62.842003</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Архангельская область</th>\n",
       "      <td>8.898740</td>\n",
       "      <td>15.938395</td>\n",
       "      <td>5.777772</td>\n",
       "      <td>10.453311</td>\n",
       "      <td>57.971458</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                        Zh_perc    Zu_perc   Mi_perc    Pr_perc    Pu_perc\n",
       "region                                                                    \n",
       "Алтайский край         8.334056  22.261215  3.903508   7.127434  57.352543\n",
       "Амурская область       9.936603  16.870734  3.401017   5.771771  62.842003\n",
       "Архангельская область  8.898740  15.938395  5.777772  10.453311  57.971458"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "perc.head(3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Ура! Последний аккорд: соединим нашу таблицу `regs` с таблицей `perc`, чтобы все показатели были в одном месте. Способов объединять датафреймы много, но давайте обсудим их в следующий раз. А пока просто склеим две таблицы по столбцам с помощью метода `.concat()`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [],
   "source": [
    "final = pd.concat([regs, perc], axis = 1) # axis = 1 - по столбцам"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>total</th>\n",
       "      <th>invalid</th>\n",
       "      <th>valid</th>\n",
       "      <th>Zh</th>\n",
       "      <th>Zu</th>\n",
       "      <th>Mi</th>\n",
       "      <th>Pr</th>\n",
       "      <th>Pu</th>\n",
       "      <th>turnout</th>\n",
       "      <th>turnout_perc</th>\n",
       "      <th>Zh_perc</th>\n",
       "      <th>Zu_perc</th>\n",
       "      <th>Mi_perc</th>\n",
       "      <th>Pr_perc</th>\n",
       "      <th>Pu_perc</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>region</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>Алтайский край</th>\n",
       "      <td>1961328.0</td>\n",
       "      <td>12004.0</td>\n",
       "      <td>1163426.0</td>\n",
       "      <td>97961.0</td>\n",
       "      <td>261665.0</td>\n",
       "      <td>45883.0</td>\n",
       "      <td>83778.0</td>\n",
       "      <td>674139.0</td>\n",
       "      <td>1175430.0</td>\n",
       "      <td>59.930313</td>\n",
       "      <td>8.334056</td>\n",
       "      <td>22.261215</td>\n",
       "      <td>3.903508</td>\n",
       "      <td>7.127434</td>\n",
       "      <td>57.352543</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Амурская область</th>\n",
       "      <td>662320.0</td>\n",
       "      <td>4708.0</td>\n",
       "      <td>394996.0</td>\n",
       "      <td>39717.0</td>\n",
       "      <td>67433.0</td>\n",
       "      <td>13594.0</td>\n",
       "      <td>23070.0</td>\n",
       "      <td>251182.0</td>\n",
       "      <td>399704.0</td>\n",
       "      <td>60.349076</td>\n",
       "      <td>9.936603</td>\n",
       "      <td>16.870734</td>\n",
       "      <td>3.401017</td>\n",
       "      <td>5.771771</td>\n",
       "      <td>62.842003</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Архангельская область</th>\n",
       "      <td>988678.0</td>\n",
       "      <td>5522.0</td>\n",
       "      <td>569492.0</td>\n",
       "      <td>51169.0</td>\n",
       "      <td>91648.0</td>\n",
       "      <td>33223.0</td>\n",
       "      <td>60108.0</td>\n",
       "      <td>333344.0</td>\n",
       "      <td>575014.0</td>\n",
       "      <td>58.159886</td>\n",
       "      <td>8.898740</td>\n",
       "      <td>15.938395</td>\n",
       "      <td>5.777772</td>\n",
       "      <td>10.453311</td>\n",
       "      <td>57.971458</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Астраханская область</th>\n",
       "      <td>769608.0</td>\n",
       "      <td>5107.0</td>\n",
       "      <td>427496.0</td>\n",
       "      <td>21918.0</td>\n",
       "      <td>67662.0</td>\n",
       "      <td>18595.0</td>\n",
       "      <td>21873.0</td>\n",
       "      <td>297448.0</td>\n",
       "      <td>432603.0</td>\n",
       "      <td>56.210824</td>\n",
       "      <td>5.066539</td>\n",
       "      <td>15.640668</td>\n",
       "      <td>4.298398</td>\n",
       "      <td>5.056137</td>\n",
       "      <td>68.757729</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Белгородская область</th>\n",
       "      <td>1210590.0</td>\n",
       "      <td>10209.0</td>\n",
       "      <td>889764.0</td>\n",
       "      <td>59561.0</td>\n",
       "      <td>211079.0</td>\n",
       "      <td>35601.0</td>\n",
       "      <td>49807.0</td>\n",
       "      <td>533716.0</td>\n",
       "      <td>899973.0</td>\n",
       "      <td>74.341685</td>\n",
       "      <td>6.618087</td>\n",
       "      <td>23.453926</td>\n",
       "      <td>3.955785</td>\n",
       "      <td>5.534277</td>\n",
       "      <td>59.303557</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                           total  invalid      valid       Zh        Zu  \\\n",
       "region                                                                    \n",
       "Алтайский край         1961328.0  12004.0  1163426.0  97961.0  261665.0   \n",
       "Амурская область        662320.0   4708.0   394996.0  39717.0   67433.0   \n",
       "Архангельская область   988678.0   5522.0   569492.0  51169.0   91648.0   \n",
       "Астраханская область    769608.0   5107.0   427496.0  21918.0   67662.0   \n",
       "Белгородская область   1210590.0  10209.0   889764.0  59561.0  211079.0   \n",
       "\n",
       "                            Mi       Pr        Pu    turnout  turnout_perc  \\\n",
       "region                                                                       \n",
       "Алтайский край         45883.0  83778.0  674139.0  1175430.0     59.930313   \n",
       "Амурская область       13594.0  23070.0  251182.0   399704.0     60.349076   \n",
       "Архангельская область  33223.0  60108.0  333344.0   575014.0     58.159886   \n",
       "Астраханская область   18595.0  21873.0  297448.0   432603.0     56.210824   \n",
       "Белгородская область   35601.0  49807.0  533716.0   899973.0     74.341685   \n",
       "\n",
       "                        Zh_perc    Zu_perc   Mi_perc    Pr_perc    Pu_perc  \n",
       "region                                                                      \n",
       "Алтайский край         8.334056  22.261215  3.903508   7.127434  57.352543  \n",
       "Амурская область       9.936603  16.870734  3.401017   5.771771  62.842003  \n",
       "Архангельская область  8.898740  15.938395  5.777772  10.453311  57.971458  \n",
       "Астраханская область   5.066539  15.640668  4.298398   5.056137  68.757729  \n",
       "Белгородская область   6.618087  23.453926  3.955785   5.534277  59.303557  "
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "final.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "На этом пока всё."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}