Created
December 29, 2019 17:34
-
-
Save kshirsagarsiddharth/3cb475a71d321eca0da46d86791e91a6 to your computer and use it in GitHub Desktop.
Created on Cognitive Class Labs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "import pandas as pd\n", | |
| "import numpy as np" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "df = pd.read_csv(\"https://raw.githubusercontent.com/codebasics/py/master/pandas/7_group_by/weather_by_cities.csv\")" | |
| ] | |
| }, | |
| { | |
| "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>day</th>\n", | |
| " <th>city</th>\n", | |
| " <th>temperature</th>\n", | |
| " <th>windspeed</th>\n", | |
| " <th>event</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>1/1/2017</td>\n", | |
| " <td>new york</td>\n", | |
| " <td>32</td>\n", | |
| " <td>6</td>\n", | |
| " <td>Rain</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>1/2/2017</td>\n", | |
| " <td>new york</td>\n", | |
| " <td>36</td>\n", | |
| " <td>7</td>\n", | |
| " <td>Sunny</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>1/3/2017</td>\n", | |
| " <td>new york</td>\n", | |
| " <td>28</td>\n", | |
| " <td>12</td>\n", | |
| " <td>Snow</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>1/4/2017</td>\n", | |
| " <td>new york</td>\n", | |
| " <td>33</td>\n", | |
| " <td>7</td>\n", | |
| " <td>Sunny</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>1/1/2017</td>\n", | |
| " <td>mumbai</td>\n", | |
| " <td>90</td>\n", | |
| " <td>5</td>\n", | |
| " <td>Sunny</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>5</th>\n", | |
| " <td>1/2/2017</td>\n", | |
| " <td>mumbai</td>\n", | |
| " <td>85</td>\n", | |
| " <td>12</td>\n", | |
| " <td>Fog</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>6</th>\n", | |
| " <td>1/3/2017</td>\n", | |
| " <td>mumbai</td>\n", | |
| " <td>87</td>\n", | |
| " <td>15</td>\n", | |
| " <td>Fog</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>7</th>\n", | |
| " <td>1/4/2017</td>\n", | |
| " <td>mumbai</td>\n", | |
| " <td>92</td>\n", | |
| " <td>5</td>\n", | |
| " <td>Rain</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>8</th>\n", | |
| " <td>1/1/2017</td>\n", | |
| " <td>paris</td>\n", | |
| " <td>45</td>\n", | |
| " <td>20</td>\n", | |
| " <td>Sunny</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>9</th>\n", | |
| " <td>1/2/2017</td>\n", | |
| " <td>paris</td>\n", | |
| " <td>50</td>\n", | |
| " <td>13</td>\n", | |
| " <td>Cloudy</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>10</th>\n", | |
| " <td>1/3/2017</td>\n", | |
| " <td>paris</td>\n", | |
| " <td>54</td>\n", | |
| " <td>8</td>\n", | |
| " <td>Cloudy</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>11</th>\n", | |
| " <td>1/4/2017</td>\n", | |
| " <td>paris</td>\n", | |
| " <td>42</td>\n", | |
| " <td>10</td>\n", | |
| " <td>Cloudy</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " day city temperature windspeed event\n", | |
| "0 1/1/2017 new york 32 6 Rain\n", | |
| "1 1/2/2017 new york 36 7 Sunny\n", | |
| "2 1/3/2017 new york 28 12 Snow\n", | |
| "3 1/4/2017 new york 33 7 Sunny\n", | |
| "4 1/1/2017 mumbai 90 5 Sunny\n", | |
| "5 1/2/2017 mumbai 85 12 Fog\n", | |
| "6 1/3/2017 mumbai 87 15 Fog\n", | |
| "7 1/4/2017 mumbai 92 5 Rain\n", | |
| "8 1/1/2017 paris 45 20 Sunny\n", | |
| "9 1/2/2017 paris 50 13 Cloudy\n", | |
| "10 1/3/2017 paris 54 8 Cloudy\n", | |
| "11 1/4/2017 paris 42 10 Cloudy" | |
| ] | |
| }, | |
| "execution_count": 3, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "df" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 4, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "g = df.groupby('city')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 5, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "<pandas.core.groupby.generic.DataFrameGroupBy object at 0x7ff911748d30>" | |
| ] | |
| }, | |
| "execution_count": 5, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "g" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 6, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "mumbai\n", | |
| " day city temperature windspeed event\n", | |
| "4 1/1/2017 mumbai 90 5 Sunny\n", | |
| "5 1/2/2017 mumbai 85 12 Fog\n", | |
| "6 1/3/2017 mumbai 87 15 Fog\n", | |
| "7 1/4/2017 mumbai 92 5 Rain\n", | |
| "new york\n", | |
| " day city temperature windspeed event\n", | |
| "0 1/1/2017 new york 32 6 Rain\n", | |
| "1 1/2/2017 new york 36 7 Sunny\n", | |
| "2 1/3/2017 new york 28 12 Snow\n", | |
| "3 1/4/2017 new york 33 7 Sunny\n", | |
| "paris\n", | |
| " day city temperature windspeed event\n", | |
| "8 1/1/2017 paris 45 20 Sunny\n", | |
| "9 1/2/2017 paris 50 13 Cloudy\n", | |
| "10 1/3/2017 paris 54 8 Cloudy\n", | |
| "11 1/4/2017 paris 42 10 Cloudy\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "for city,city_df in g:\n", | |
| " print(city)\n", | |
| " print(city_df)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 7, | |
| "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>day</th>\n", | |
| " <th>city</th>\n", | |
| " <th>temperature</th>\n", | |
| " <th>windspeed</th>\n", | |
| " <th>event</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>1/1/2017</td>\n", | |
| " <td>mumbai</td>\n", | |
| " <td>90</td>\n", | |
| " <td>5</td>\n", | |
| " <td>Sunny</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>5</th>\n", | |
| " <td>1/2/2017</td>\n", | |
| " <td>mumbai</td>\n", | |
| " <td>85</td>\n", | |
| " <td>12</td>\n", | |
| " <td>Fog</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>6</th>\n", | |
| " <td>1/3/2017</td>\n", | |
| " <td>mumbai</td>\n", | |
| " <td>87</td>\n", | |
| " <td>15</td>\n", | |
| " <td>Fog</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>7</th>\n", | |
| " <td>1/4/2017</td>\n", | |
| " <td>mumbai</td>\n", | |
| " <td>92</td>\n", | |
| " <td>5</td>\n", | |
| " <td>Rain</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " day city temperature windspeed event\n", | |
| "4 1/1/2017 mumbai 90 5 Sunny\n", | |
| "5 1/2/2017 mumbai 85 12 Fog\n", | |
| "6 1/3/2017 mumbai 87 15 Fog\n", | |
| "7 1/4/2017 mumbai 92 5 Rain" | |
| ] | |
| }, | |
| "execution_count": 7, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "g.get_group('mumbai')" | |
| ] | |
| }, | |
| { | |
| "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>day</th>\n", | |
| " <th>temperature</th>\n", | |
| " <th>windspeed</th>\n", | |
| " <th>event</th>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>city</th>\n", | |
| " <th></th>\n", | |
| " <th></th>\n", | |
| " <th></th>\n", | |
| " <th></th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>mumbai</th>\n", | |
| " <td>1/4/2017</td>\n", | |
| " <td>92</td>\n", | |
| " <td>15</td>\n", | |
| " <td>Sunny</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>new york</th>\n", | |
| " <td>1/4/2017</td>\n", | |
| " <td>36</td>\n", | |
| " <td>12</td>\n", | |
| " <td>Sunny</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>paris</th>\n", | |
| " <td>1/4/2017</td>\n", | |
| " <td>54</td>\n", | |
| " <td>20</td>\n", | |
| " <td>Sunny</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " day temperature windspeed event\n", | |
| "city \n", | |
| "mumbai 1/4/2017 92 15 Sunny\n", | |
| "new york 1/4/2017 36 12 Sunny\n", | |
| "paris 1/4/2017 54 20 Sunny" | |
| ] | |
| }, | |
| "execution_count": 8, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "g.max()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 9, | |
| "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>temperature</th>\n", | |
| " <th>windspeed</th>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>city</th>\n", | |
| " <th></th>\n", | |
| " <th></th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>mumbai</th>\n", | |
| " <td>88.50</td>\n", | |
| " <td>9.25</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>new york</th>\n", | |
| " <td>32.25</td>\n", | |
| " <td>8.00</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>paris</th>\n", | |
| " <td>47.75</td>\n", | |
| " <td>12.75</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " temperature windspeed\n", | |
| "city \n", | |
| "mumbai 88.50 9.25\n", | |
| "new york 32.25 8.00\n", | |
| "paris 47.75 12.75" | |
| ] | |
| }, | |
| "execution_count": 9, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "g.mean()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 10, | |
| "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=\"8\" halign=\"left\">temperature</th>\n", | |
| " <th colspan=\"8\" halign=\"left\">windspeed</th>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th></th>\n", | |
| " <th>count</th>\n", | |
| " <th>mean</th>\n", | |
| " <th>std</th>\n", | |
| " <th>min</th>\n", | |
| " <th>25%</th>\n", | |
| " <th>50%</th>\n", | |
| " <th>75%</th>\n", | |
| " <th>max</th>\n", | |
| " <th>count</th>\n", | |
| " <th>mean</th>\n", | |
| " <th>std</th>\n", | |
| " <th>min</th>\n", | |
| " <th>25%</th>\n", | |
| " <th>50%</th>\n", | |
| " <th>75%</th>\n", | |
| " <th>max</th>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>city</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>mumbai</th>\n", | |
| " <td>4.0</td>\n", | |
| " <td>88.50</td>\n", | |
| " <td>3.109126</td>\n", | |
| " <td>85.0</td>\n", | |
| " <td>86.50</td>\n", | |
| " <td>88.5</td>\n", | |
| " <td>90.50</td>\n", | |
| " <td>92.0</td>\n", | |
| " <td>4.0</td>\n", | |
| " <td>9.25</td>\n", | |
| " <td>5.057997</td>\n", | |
| " <td>5.0</td>\n", | |
| " <td>5.00</td>\n", | |
| " <td>8.5</td>\n", | |
| " <td>12.75</td>\n", | |
| " <td>15.0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>new york</th>\n", | |
| " <td>4.0</td>\n", | |
| " <td>32.25</td>\n", | |
| " <td>3.304038</td>\n", | |
| " <td>28.0</td>\n", | |
| " <td>31.00</td>\n", | |
| " <td>32.5</td>\n", | |
| " <td>33.75</td>\n", | |
| " <td>36.0</td>\n", | |
| " <td>4.0</td>\n", | |
| " <td>8.00</td>\n", | |
| " <td>2.708013</td>\n", | |
| " <td>6.0</td>\n", | |
| " <td>6.75</td>\n", | |
| " <td>7.0</td>\n", | |
| " <td>8.25</td>\n", | |
| " <td>12.0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>paris</th>\n", | |
| " <td>4.0</td>\n", | |
| " <td>47.75</td>\n", | |
| " <td>5.315073</td>\n", | |
| " <td>42.0</td>\n", | |
| " <td>44.25</td>\n", | |
| " <td>47.5</td>\n", | |
| " <td>51.00</td>\n", | |
| " <td>54.0</td>\n", | |
| " <td>4.0</td>\n", | |
| " <td>12.75</td>\n", | |
| " <td>5.251984</td>\n", | |
| " <td>8.0</td>\n", | |
| " <td>9.50</td>\n", | |
| " <td>11.5</td>\n", | |
| " <td>14.75</td>\n", | |
| " <td>20.0</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " temperature \\\n", | |
| " count mean std min 25% 50% 75% max \n", | |
| "city \n", | |
| "mumbai 4.0 88.50 3.109126 85.0 86.50 88.5 90.50 92.0 \n", | |
| "new york 4.0 32.25 3.304038 28.0 31.00 32.5 33.75 36.0 \n", | |
| "paris 4.0 47.75 5.315073 42.0 44.25 47.5 51.00 54.0 \n", | |
| "\n", | |
| " windspeed \n", | |
| " count mean std min 25% 50% 75% max \n", | |
| "city \n", | |
| "mumbai 4.0 9.25 5.057997 5.0 5.00 8.5 12.75 15.0 \n", | |
| "new york 4.0 8.00 2.708013 6.0 6.75 7.0 8.25 12.0 \n", | |
| "paris 4.0 12.75 5.251984 8.0 9.50 11.5 14.75 20.0 " | |
| ] | |
| }, | |
| "execution_count": 10, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "g.describe()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 11, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "city\n", | |
| "mumbai AxesSubplot(0.125,0.125;0.775x0.755)\n", | |
| "new york AxesSubplot(0.125,0.125;0.775x0.755)\n", | |
| "paris AxesSubplot(0.125,0.125;0.775x0.755)\n", | |
| "dtype: object" | |
| ] | |
| }, | |
| "execution_count": 11, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<Figure size 432x288 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": { | |
| "needs_background": "light" | |
| }, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<Figure size 432x288 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": { | |
| "needs_background": "light" | |
| }, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<Figure size 432x288 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": { | |
| "needs_background": "light" | |
| }, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "%matplotlib inline\n", | |
| "g.plot()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "ename": "NameError", | |
| "evalue": "name 'pd' is not defined", | |
| "output_type": "error", | |
| "traceback": [ | |
| "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", | |
| "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", | |
| "\u001b[0;32m<ipython-input-2-97f6ca8d444d>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m df = pd.DataFrame([('bird', 'Falconiformes', 389.0),\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;34m'bird'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'Psittaciformes'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m24.0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;34m'mammal'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'Carnivora'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m80.2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;34m'mammal'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'Primates'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnan\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m ('mammal', 'Carnivora', 58)],\n", | |
| "\u001b[0;31mNameError\u001b[0m: name 'pd' is not defined" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "df = pd.DataFrame([('bird', 'Falconiformes', 389.0),\n", | |
| " ...: ('bird', 'Psittaciformes', 24.0),\n", | |
| " ...: ('mammal', 'Carnivora', 80.2),\n", | |
| " ...: ('mammal', 'Primates', np.nan),\n", | |
| " ...: ('mammal', 'Carnivora', 58)],\n", | |
| " ...: index=['falcon', 'parrot', 'lion', 'monkey', 'leopard'],\n", | |
| " ...: columns=('class', 'order', 'max_speed'))\n", | |
| " ...: " | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 13, | |
| "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>class</th>\n", | |
| " <th>order</th>\n", | |
| " <th>max_speed</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>falcon</th>\n", | |
| " <td>bird</td>\n", | |
| " <td>Falconiformes</td>\n", | |
| " <td>389.0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>parrot</th>\n", | |
| " <td>bird</td>\n", | |
| " <td>Psittaciformes</td>\n", | |
| " <td>24.0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>lion</th>\n", | |
| " <td>mammal</td>\n", | |
| " <td>Carnivora</td>\n", | |
| " <td>80.2</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>monkey</th>\n", | |
| " <td>mammal</td>\n", | |
| " <td>Primates</td>\n", | |
| " <td>NaN</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>leopard</th>\n", | |
| " <td>mammal</td>\n", | |
| " <td>Carnivora</td>\n", | |
| " <td>58.0</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " class order max_speed\n", | |
| "falcon bird Falconiformes 389.0\n", | |
| "parrot bird Psittaciformes 24.0\n", | |
| "lion mammal Carnivora 80.2\n", | |
| "monkey mammal Primates NaN\n", | |
| "leopard mammal Carnivora 58.0" | |
| ] | |
| }, | |
| "execution_count": 13, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "df" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 18, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "grouped = df.groupby('class')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 19, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "<pandas.core.groupby.generic.DataFrameGroupBy object at 0x7ff90f019048>" | |
| ] | |
| }, | |
| "execution_count": 19, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "grouped" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 16, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "bird\n", | |
| " class order max_speed\n", | |
| "falcon bird Falconiformes 389.0\n", | |
| "parrot bird Psittaciformes 24.0\n", | |
| "mammal\n", | |
| " class order max_speed\n", | |
| "lion mammal Carnivora 80.2\n", | |
| "monkey mammal Primates NaN\n", | |
| "leopard mammal Carnivora 58.0\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "for city,city_df in grouped:\n", | |
| " print(city)\n", | |
| " print(city_df)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar',\n", | |
| " ...: 'foo', 'bar', 'foo', 'foo'],\n", | |
| " ...: 'B': ['one', 'one', 'two', 'three',\n", | |
| " ...: 'two', 'two', 'one', 'three'],\n", | |
| " ...: 'C': np.random.randn(8),\n", | |
| " ...: 'D': np.random.randn(8)})\n", | |
| " ...: " | |
| ] | |
| }, | |
| { | |
| "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>A</th>\n", | |
| " <th>B</th>\n", | |
| " <th>C</th>\n", | |
| " <th>D</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>foo</td>\n", | |
| " <td>one</td>\n", | |
| " <td>-0.427707</td>\n", | |
| " <td>0.926455</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>bar</td>\n", | |
| " <td>one</td>\n", | |
| " <td>0.069816</td>\n", | |
| " <td>-0.411009</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>foo</td>\n", | |
| " <td>two</td>\n", | |
| " <td>-0.588241</td>\n", | |
| " <td>0.881698</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>bar</td>\n", | |
| " <td>three</td>\n", | |
| " <td>-1.371077</td>\n", | |
| " <td>-1.092267</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>foo</td>\n", | |
| " <td>two</td>\n", | |
| " <td>-0.835216</td>\n", | |
| " <td>1.881674</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>5</th>\n", | |
| " <td>bar</td>\n", | |
| " <td>two</td>\n", | |
| " <td>0.438134</td>\n", | |
| " <td>1.779023</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>6</th>\n", | |
| " <td>foo</td>\n", | |
| " <td>one</td>\n", | |
| " <td>1.621576</td>\n", | |
| " <td>0.284195</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>7</th>\n", | |
| " <td>foo</td>\n", | |
| " <td>three</td>\n", | |
| " <td>0.125520</td>\n", | |
| " <td>0.682608</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " A B C D\n", | |
| "0 foo one -0.427707 0.926455\n", | |
| "1 bar one 0.069816 -0.411009\n", | |
| "2 foo two -0.588241 0.881698\n", | |
| "3 bar three -1.371077 -1.092267\n", | |
| "4 foo two -0.835216 1.881674\n", | |
| "5 bar two 0.438134 1.779023\n", | |
| "6 foo one 1.621576 0.284195\n", | |
| "7 foo three 0.125520 0.682608" | |
| ] | |
| }, | |
| "execution_count": 6, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "df" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 22, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "grouped = df.groupby('A')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 26, | |
| "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>A</th>\n", | |
| " <th>B</th>\n", | |
| " <th>C</th>\n", | |
| " <th>D</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>foo</td>\n", | |
| " <td>one</td>\n", | |
| " <td>-0.070427</td>\n", | |
| " <td>0.147015</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>foo</td>\n", | |
| " <td>two</td>\n", | |
| " <td>-1.943961</td>\n", | |
| " <td>0.131995</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>foo</td>\n", | |
| " <td>two</td>\n", | |
| " <td>0.236054</td>\n", | |
| " <td>1.057360</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>6</th>\n", | |
| " <td>foo</td>\n", | |
| " <td>one</td>\n", | |
| " <td>-1.298446</td>\n", | |
| " <td>1.062111</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>7</th>\n", | |
| " <td>foo</td>\n", | |
| " <td>three</td>\n", | |
| " <td>-0.121273</td>\n", | |
| " <td>-0.247628</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " A B C D\n", | |
| "0 foo one -0.070427 0.147015\n", | |
| "2 foo two -1.943961 0.131995\n", | |
| "4 foo two 0.236054 1.057360\n", | |
| "6 foo one -1.298446 1.062111\n", | |
| "7 foo three -0.121273 -0.247628" | |
| ] | |
| }, | |
| "execution_count": 26, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "grouped.get_group('foo')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 27, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "grouped = df.groupby(['A','B'])" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 32, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "('bar', 'one')\n", | |
| " A B C D\n", | |
| "1 bar one 1.654142 -1.449257\n", | |
| "('bar', 'three')\n", | |
| " A B C D\n", | |
| "3 bar three -1.358795 -0.985885\n", | |
| "('bar', 'two')\n", | |
| " A B C D\n", | |
| "5 bar two 0.345297 -0.276898\n", | |
| "('foo', 'one')\n", | |
| " A B C D\n", | |
| "0 foo one -0.070427 0.147015\n", | |
| "6 foo one -1.298446 1.062111\n", | |
| "('foo', 'three')\n", | |
| " A B C D\n", | |
| "7 foo three -0.121273 -0.247628\n", | |
| "('foo', 'two')\n", | |
| " A B C D\n", | |
| "2 foo two -1.943961 0.131995\n", | |
| "4 foo two 0.236054 1.057360\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "for city,city_df in grouped:\n", | |
| " print(city)\n", | |
| " print(city_df)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 33, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "df2 = df.set_index(['A','B'])" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 34, | |
| "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></th>\n", | |
| " <th>C</th>\n", | |
| " <th>D</th>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>A</th>\n", | |
| " <th>B</th>\n", | |
| " <th></th>\n", | |
| " <th></th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>foo</th>\n", | |
| " <th>one</th>\n", | |
| " <td>-0.070427</td>\n", | |
| " <td>0.147015</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>bar</th>\n", | |
| " <th>one</th>\n", | |
| " <td>1.654142</td>\n", | |
| " <td>-1.449257</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>foo</th>\n", | |
| " <th>two</th>\n", | |
| " <td>-1.943961</td>\n", | |
| " <td>0.131995</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>bar</th>\n", | |
| " <th>three</th>\n", | |
| " <td>-1.358795</td>\n", | |
| " <td>-0.985885</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>foo</th>\n", | |
| " <th>two</th>\n", | |
| " <td>0.236054</td>\n", | |
| " <td>1.057360</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>bar</th>\n", | |
| " <th>two</th>\n", | |
| " <td>0.345297</td>\n", | |
| " <td>-0.276898</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th rowspan=\"2\" valign=\"top\">foo</th>\n", | |
| " <th>one</th>\n", | |
| " <td>-1.298446</td>\n", | |
| " <td>1.062111</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>three</th>\n", | |
| " <td>-0.121273</td>\n", | |
| " <td>-0.247628</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " C D\n", | |
| "A B \n", | |
| "foo one -0.070427 0.147015\n", | |
| "bar one 1.654142 -1.449257\n", | |
| "foo two -1.943961 0.131995\n", | |
| "bar three -1.358795 -0.985885\n", | |
| "foo two 0.236054 1.057360\n", | |
| "bar two 0.345297 -0.276898\n", | |
| "foo one -1.298446 1.062111\n", | |
| " three -0.121273 -0.247628" | |
| ] | |
| }, | |
| "execution_count": 34, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "df2" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 39, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "ename": "AttributeError", | |
| "evalue": "'FrozenList' object has no attribute 'diffrence'", | |
| "output_type": "error", | |
| "traceback": [ | |
| "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", | |
| "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", | |
| "\u001b[0;32m<ipython-input-39-7aaac08dd2ce>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mlevel\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdf2\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mindex\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnames\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdiffrence\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'B'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", | |
| "\u001b[0;31mAttributeError\u001b[0m: 'FrozenList' object has no attribute 'diffrence'" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "level = df2.index.names.diffrence(['B'])" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 40, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "FrozenList(['A', 'B'])" | |
| ] | |
| }, | |
| "execution_count": 40, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "level" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 41, | |
| "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>A</th>\n", | |
| " <th>B</th>\n", | |
| " <th>C</th>\n", | |
| " <th>D</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>foo</td>\n", | |
| " <td>one</td>\n", | |
| " <td>-0.070427</td>\n", | |
| " <td>0.147015</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>bar</td>\n", | |
| " <td>one</td>\n", | |
| " <td>1.654142</td>\n", | |
| " <td>-1.449257</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>foo</td>\n", | |
| " <td>two</td>\n", | |
| " <td>-1.943961</td>\n", | |
| " <td>0.131995</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>bar</td>\n", | |
| " <td>three</td>\n", | |
| " <td>-1.358795</td>\n", | |
| " <td>-0.985885</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>foo</td>\n", | |
| " <td>two</td>\n", | |
| " <td>0.236054</td>\n", | |
| " <td>1.057360</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>5</th>\n", | |
| " <td>bar</td>\n", | |
| " <td>two</td>\n", | |
| " <td>0.345297</td>\n", | |
| " <td>-0.276898</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>6</th>\n", | |
| " <td>foo</td>\n", | |
| " <td>one</td>\n", | |
| " <td>-1.298446</td>\n", | |
| " <td>1.062111</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>7</th>\n", | |
| " <td>foo</td>\n", | |
| " <td>three</td>\n", | |
| " <td>-0.121273</td>\n", | |
| " <td>-0.247628</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " A B C D\n", | |
| "0 foo one -0.070427 0.147015\n", | |
| "1 bar one 1.654142 -1.449257\n", | |
| "2 foo two -1.943961 0.131995\n", | |
| "3 bar three -1.358795 -0.985885\n", | |
| "4 foo two 0.236054 1.057360\n", | |
| "5 bar two 0.345297 -0.276898\n", | |
| "6 foo one -1.298446 1.062111\n", | |
| "7 foo three -0.121273 -0.247628" | |
| ] | |
| }, | |
| "execution_count": 41, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "df" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 45, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "def get_letter_type(letter):\n", | |
| " if letter.lower() in 'aeiou':\n", | |
| " return 'vowel'\n", | |
| " else:\n", | |
| " return 'consonant'\n", | |
| "grouped = df.groupby(get_letter_type,axis=1)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 46, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "grouped = df.groupby(get_letter_type,axis=1)\n", | |
| "#seprates consonant from vowelsi" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 47, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "consonant\n", | |
| " B C D\n", | |
| "0 one -0.070427 0.147015\n", | |
| "1 one 1.654142 -1.449257\n", | |
| "2 two -1.943961 0.131995\n", | |
| "3 three -1.358795 -0.985885\n", | |
| "4 two 0.236054 1.057360\n", | |
| "5 two 0.345297 -0.276898\n", | |
| "6 one -1.298446 1.062111\n", | |
| "7 three -0.121273 -0.247628\n", | |
| "vowel\n", | |
| " A\n", | |
| "0 foo\n", | |
| "1 bar\n", | |
| "2 foo\n", | |
| "3 bar\n", | |
| "4 foo\n", | |
| "5 bar\n", | |
| "6 foo\n", | |
| "7 foo\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "for city,city_df in grouped:\n", | |
| " print(city)\n", | |
| " print(city_df)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 50, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "lst = [1,2,3,1,2,3]\n", | |
| "s = pd.Series([1, 2, 3, 10, 20, 30], lst)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 53, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "grouped = s.groupby(level=0)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 56, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "1 1\n", | |
| "2 2\n", | |
| "3 3\n", | |
| "dtype: int64" | |
| ] | |
| }, | |
| "execution_count": 56, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "grouped.first()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 57, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "1 10\n", | |
| "2 20\n", | |
| "3 30\n", | |
| "dtype: int64" | |
| ] | |
| }, | |
| "execution_count": 57, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "grouped.last()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 58, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "1 11\n", | |
| "2 22\n", | |
| "3 33\n", | |
| "dtype: int64" | |
| ] | |
| }, | |
| "execution_count": 58, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "grouped.sum()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 59, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| " df2 = pd.DataFrame({'X': ['B', 'B', 'A', 'A'], 'Y': [1, 2, 3, 4]})" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 60, | |
| "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>X</th>\n", | |
| " <th>Y</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>B</td>\n", | |
| " <td>1</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>B</td>\n", | |
| " <td>2</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>A</td>\n", | |
| " <td>3</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>A</td>\n", | |
| " <td>4</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " X Y\n", | |
| "0 B 1\n", | |
| "1 B 2\n", | |
| "2 A 3\n", | |
| "3 A 4" | |
| ] | |
| }, | |
| "execution_count": 60, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "df2" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 66, | |
| "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>Y</th>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>X</th>\n", | |
| " <th></th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>A</th>\n", | |
| " <td>7</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>B</th>\n", | |
| " <td>3</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " Y\n", | |
| "X \n", | |
| "A 7\n", | |
| "B 3" | |
| ] | |
| }, | |
| "execution_count": 66, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "df2.groupby(['X']).sum()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 65, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "B\n", | |
| " X Y\n", | |
| "0 B 1\n", | |
| "1 B 2\n", | |
| "A\n", | |
| " X Y\n", | |
| "2 A 3\n", | |
| "3 A 4\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "for city,city_df in df2.groupby(['X'],sort=False):\n", | |
| " print(city)\n", | |
| " print(city_df)a" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 67, | |
| "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>Y</th>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>X</th>\n", | |
| " <th></th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>B</th>\n", | |
| " <td>3</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>A</th>\n", | |
| " <td>7</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " Y\n", | |
| "X \n", | |
| "B 3\n", | |
| "A 7" | |
| ] | |
| }, | |
| "execution_count": 67, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "df2.groupby(['X'],sort=False).sum()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 68, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "df3 = pd.DataFrame({'X': ['A', 'B', 'A', 'B'], 'Y': [1, 4, 3, 2]})" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 69, | |
| "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>X</th>\n", | |
| " <th>Y</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>A</td>\n", | |
| " <td>1</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>B</td>\n", | |
| " <td>4</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>A</td>\n", | |
| " <td>3</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>B</td>\n", | |
| " <td>2</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " X Y\n", | |
| "0 A 1\n", | |
| "1 B 4\n", | |
| "2 A 3\n", | |
| "3 B 2" | |
| ] | |
| }, | |
| "execution_count": 69, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "df3" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 70, | |
| "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>X</th>\n", | |
| " <th>Y</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>A</td>\n", | |
| " <td>1</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>A</td>\n", | |
| " <td>3</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " X Y\n", | |
| "0 A 1\n", | |
| "2 A 3" | |
| ] | |
| }, | |
| "execution_count": 70, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "df3.groupby(['X']).get_group('A')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 71, | |
| "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>X</th>\n", | |
| " <th>Y</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>B</td>\n", | |
| " <td>4</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>B</td>\n", | |
| " <td>2</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " X Y\n", | |
| "1 B 4\n", | |
| "3 B 2" | |
| ] | |
| }, | |
| "execution_count": 71, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "df3.groupby(['X']).get_group('B')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 106, | |
| "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></th>\n", | |
| " <th>A</th>\n", | |
| " <th>B</th>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>first</th>\n", | |
| " <th>second</th>\n", | |
| " <th></th>\n", | |
| " <th></th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th rowspan=\"2\" valign=\"top\">bar</th>\n", | |
| " <th>one</th>\n", | |
| " <td>1</td>\n", | |
| " <td>0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>two</th>\n", | |
| " <td>1</td>\n", | |
| " <td>1</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th rowspan=\"2\" valign=\"top\">baz</th>\n", | |
| " <th>one</th>\n", | |
| " <td>1</td>\n", | |
| " <td>2</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>two</th>\n", | |
| " <td>1</td>\n", | |
| " <td>3</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th rowspan=\"2\" valign=\"top\">foo</th>\n", | |
| " <th>one</th>\n", | |
| " <td>2</td>\n", | |
| " <td>4</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>two</th>\n", | |
| " <td>2</td>\n", | |
| " <td>5</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th rowspan=\"2\" valign=\"top\">qux</th>\n", | |
| " <th>one</th>\n", | |
| " <td>3</td>\n", | |
| " <td>6</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>two</th>\n", | |
| " <td>3</td>\n", | |
| " <td>7</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " A B\n", | |
| "first second \n", | |
| "bar one 1 0\n", | |
| " two 1 1\n", | |
| "baz one 1 2\n", | |
| " two 1 3\n", | |
| "foo one 2 4\n", | |
| " two 2 5\n", | |
| "qux one 3 6\n", | |
| " two 3 7" | |
| ] | |
| }, | |
| "execution_count": 106, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "df" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 74, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "{'bar': Int64Index([1, 3, 5], dtype='int64'),\n", | |
| " 'foo': Int64Index([0, 2, 4, 6, 7], dtype='int64')}" | |
| ] | |
| }, | |
| "execution_count": 74, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "df.groupby('A').groups" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 75, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "{'consonant': Index(['B', 'C', 'D'], dtype='object'),\n", | |
| " 'vowel': Index(['A'], dtype='object')}" | |
| ] | |
| }, | |
| "execution_count": 75, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "df.groupby(get_letter_type,axis=1).groups" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 76, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "grouped = df.groupby(['A','B'])" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 77, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "{('bar', 'one'): Int64Index([1], dtype='int64'),\n", | |
| " ('bar', 'three'): Int64Index([3], dtype='int64'),\n", | |
| " ('bar', 'two'): Int64Index([5], dtype='int64'),\n", | |
| " ('foo', 'one'): Int64Index([0, 6], dtype='int64'),\n", | |
| " ('foo', 'three'): Int64Index([7], dtype='int64'),\n", | |
| " ('foo', 'two'): Int64Index([2, 4], dtype='int64')}" | |
| ] | |
| }, | |
| "execution_count": 77, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "grouped.groups" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 78, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "6" | |
| ] | |
| }, | |
| "execution_count": 78, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "len(grouped)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 79, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "ename": "SyntaxError", | |
| "evalue": "invalid syntax (<ipython-input-79-b4a25bb4f0eb>, line 1)", | |
| "output_type": "error", | |
| "traceback": [ | |
| "\u001b[0;36m File \u001b[0;32m\"<ipython-input-79-b4a25bb4f0eb>\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m grouped.<TAB>\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "grouped.<TAB>" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 80, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'],\n", | |
| " ....: ['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]\n", | |
| " ....: \n", | |
| "\n", | |
| "In [36]: index = pd.MultiIndex.from_arrays(arrays, names=['first', 'second'])\n", | |
| "\n", | |
| "In [37]: s = pd.Series(np.random.randn(8), index=index)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 81, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "first second\n", | |
| "bar one -1.066896\n", | |
| " two -1.887404\n", | |
| "baz one 0.061950\n", | |
| " two 1.079029\n", | |
| "foo one 1.315513\n", | |
| " two 0.280189\n", | |
| "qux one 0.716360\n", | |
| " two -1.381552\n", | |
| "dtype: float64" | |
| ] | |
| }, | |
| "execution_count": 81, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "s" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 82, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "bar\n", | |
| "first second\n", | |
| "bar one -1.066896\n", | |
| " two -1.887404\n", | |
| "dtype: float64\n", | |
| "baz\n", | |
| "first second\n", | |
| "baz one 0.061950\n", | |
| " two 1.079029\n", | |
| "dtype: float64\n", | |
| "foo\n", | |
| "first second\n", | |
| "foo one 1.315513\n", | |
| " two 0.280189\n", | |
| "dtype: float64\n", | |
| "qux\n", | |
| "first second\n", | |
| "qux one 0.716360\n", | |
| " two -1.381552\n", | |
| "dtype: float64\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "for city,city_df in s.groupby(level=0):\n", | |
| " print(city)\n", | |
| " print(city_df)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 84, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "grouped = s.groupby(level=0)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 85, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "first\n", | |
| "bar -2.954301\n", | |
| "baz 1.140978\n", | |
| "foo 1.595702\n", | |
| "qux -0.665192\n", | |
| "dtype: float64" | |
| ] | |
| }, | |
| "execution_count": 85, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "grouped.sum()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 86, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "grouped = s.groupby(level='first')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 87, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "grouped = s.groupby(level='second')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 88, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "one\n", | |
| "first second\n", | |
| "bar one -1.066896\n", | |
| "baz one 0.061950\n", | |
| "foo one 1.315513\n", | |
| "qux one 0.716360\n", | |
| "dtype: float64\n", | |
| "two\n", | |
| "first second\n", | |
| "bar two -1.887404\n", | |
| "baz two 1.079029\n", | |
| "foo two 0.280189\n", | |
| "qux two -1.381552\n", | |
| "dtype: float64\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "for city,city_df in grouped:\n", | |
| " print(city)\n", | |
| " print(city_df)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 89, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| " arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'],\n", | |
| " ....: ['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]\n", | |
| " ....: \n", | |
| "\n", | |
| "In [47]: index = pd.MultiIndex.from_arrays(arrays, names=['first', 'second'])\n", | |
| "\n", | |
| "In [48]: df = pd.DataFrame({'A': [1, 1, 1, 1, 2, 2, 3, 3],\n", | |
| " ....: 'B': np.arange(8)},\n", | |
| " ....: index=index)\n", | |
| " ....: " | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 94, | |
| "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></th>\n", | |
| " <th>A</th>\n", | |
| " <th>B</th>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>first</th>\n", | |
| " <th>second</th>\n", | |
| " <th></th>\n", | |
| " <th></th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th rowspan=\"2\" valign=\"top\">bar</th>\n", | |
| " <th>one</th>\n", | |
| " <td>1</td>\n", | |
| " <td>0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>two</th>\n", | |
| " <td>1</td>\n", | |
| " <td>1</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th rowspan=\"2\" valign=\"top\">baz</th>\n", | |
| " <th>one</th>\n", | |
| " <td>1</td>\n", | |
| " <td>2</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>two</th>\n", | |
| " <td>1</td>\n", | |
| " <td>3</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th rowspan=\"2\" valign=\"top\">foo</th>\n", | |
| " <th>one</th>\n", | |
| " <td>2</td>\n", | |
| " <td>4</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>two</th>\n", | |
| " <td>2</td>\n", | |
| " <td>5</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th rowspan=\"2\" valign=\"top\">qux</th>\n", | |
| " <th>one</th>\n", | |
| " <td>3</td>\n", | |
| " <td>6</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>two</th>\n", | |
| " <td>3</td>\n", | |
| " <td>7</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " A B\n", | |
| "first second \n", | |
| "bar one 1 0\n", | |
| " two 1 1\n", | |
| "baz one 1 2\n", | |
| " two 1 3\n", | |
| "foo one 2 4\n", | |
| " two 2 5\n", | |
| "qux one 3 6\n", | |
| " two 3 7" | |
| ] | |
| }, | |
| "execution_count": 94, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "df" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 99, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "('one', 1)\n", | |
| " A B\n", | |
| "first second \n", | |
| "bar one 1 0\n", | |
| "baz one 1 2\n", | |
| "('one', 2)\n", | |
| " A B\n", | |
| "first second \n", | |
| "foo one 2 4\n", | |
| "('one', 3)\n", | |
| " A B\n", | |
| "first second \n", | |
| "qux one 3 6\n", | |
| "('two', 1)\n", | |
| " A B\n", | |
| "first second \n", | |
| "bar two 1 1\n", | |
| "baz two 1 3\n", | |
| "('two', 2)\n", | |
| " A B\n", | |
| "first second \n", | |
| "foo two 2 5\n", | |
| "('two', 3)\n", | |
| " A B\n", | |
| "first second \n", | |
| "qux two 3 7\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "for city,city_df in df.groupby(['second','A']):\n", | |
| " print(city)\n", | |
| " print(city_df)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 100, | |
| "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></th>\n", | |
| " <th>B</th>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>second</th>\n", | |
| " <th>A</th>\n", | |
| " <th></th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th rowspan=\"3\" valign=\"top\">one</th>\n", | |
| " <th>1</th>\n", | |
| " <td>2</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>4</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>6</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th rowspan=\"3\" valign=\"top\">two</th>\n", | |
| " <th>1</th>\n", | |
| " <td>4</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>5</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>7</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " B\n", | |
| "second A \n", | |
| "one 1 2\n", | |
| " 2 4\n", | |
| " 3 6\n", | |
| "two 1 4\n", | |
| " 2 5\n", | |
| " 3 7" | |
| ] | |
| }, | |
| "execution_count": 100, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "df.groupby(['second','A']).sum()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 101, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "grouped = df.groupby(['A'])" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 102, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "1\n", | |
| " A B\n", | |
| "first second \n", | |
| "bar one 1 0\n", | |
| " two 1 1\n", | |
| "baz one 1 2\n", | |
| " two 1 3\n", | |
| "2\n", | |
| " A B\n", | |
| "first second \n", | |
| "foo one 2 4\n", | |
| " two 2 5\n", | |
| "3\n", | |
| " A B\n", | |
| "first second \n", | |
| "qux one 3 6\n", | |
| " two 3 7\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "for city,city_df in grouped:\n", | |
| " print(city)\n", | |
| " print(city_df)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 103, | |
| "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></th>\n", | |
| " <th>A</th>\n", | |
| " <th>B</th>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>first</th>\n", | |
| " <th>second</th>\n", | |
| " <th></th>\n", | |
| " <th></th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th rowspan=\"2\" valign=\"top\">bar</th>\n", | |
| " <th>one</th>\n", | |
| " <td>1</td>\n", | |
| " <td>0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>two</th>\n", | |
| " <td>1</td>\n", | |
| " <td>1</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th rowspan=\"2\" valign=\"top\">baz</th>\n", | |
| " <th>one</th>\n", | |
| " <td>1</td>\n", | |
| " <td>2</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>two</th>\n", | |
| " <td>1</td>\n", | |
| " <td>3</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th rowspan=\"2\" valign=\"top\">foo</th>\n", | |
| " <th>one</th>\n", | |
| " <td>2</td>\n", | |
| " <td>4</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>two</th>\n", | |
| " <td>2</td>\n", | |
| " <td>5</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th rowspan=\"2\" valign=\"top\">qux</th>\n", | |
| " <th>one</th>\n", | |
| " <td>3</td>\n", | |
| " <td>6</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>two</th>\n", | |
| " <td>3</td>\n", | |
| " <td>7</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " A B\n", | |
| "first second \n", | |
| "bar one 1 0\n", | |
| " two 1 1\n", | |
| "baz one 1 2\n", | |
| " two 1 3\n", | |
| "foo one 2 4\n", | |
| " two 2 5\n", | |
| "qux one 3 6\n", | |
| " two 3 7" | |
| ] | |
| }, | |
| "execution_count": 103, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "df" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 104, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "ename": "KeyError", | |
| "evalue": "'Column not found: C'", | |
| "output_type": "error", | |
| "traceback": [ | |
| "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", | |
| "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", | |
| "\u001b[0;32m<ipython-input-104-793d0234d896>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mgrouped_C\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgrouped\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'C'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", | |
| "\u001b[0;32m~/conda/envs/python/lib/python3.6/site-packages/pandas/core/base.py\u001b[0m in \u001b[0;36m__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 266\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 267\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mkey\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 268\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Column not found: {key}\"\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 269\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_gotitem\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mndim\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 270\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", | |
| "\u001b[0;31mKeyError\u001b[0m: 'Column not found: C'" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "grouped_C = grouped['C']" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 105, | |
| "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></th>\n", | |
| " <th>A</th>\n", | |
| " <th>B</th>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>first</th>\n", | |
| " <th>second</th>\n", | |
| " <th></th>\n", | |
| " <th></th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th rowspan=\"2\" valign=\"top\">bar</th>\n", | |
| " <th>one</th>\n", | |
| " <td>1</td>\n", | |
| " <td>0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>two</th>\n", | |
| " <td>1</td>\n", | |
| " <td>1</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th rowspan=\"2\" valign=\"top\">baz</th>\n", | |
| " <th>one</th>\n", | |
| " <td>1</td>\n", | |
| " <td>2</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>two</th>\n", | |
| " <td>1</td>\n", | |
| " <td>3</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th rowspan=\"2\" valign=\"top\">foo</th>\n", | |
| " <th>one</th>\n", | |
| " <td>2</td>\n", | |
| " <td>4</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>two</th>\n", | |
| " <td>2</td>\n", | |
| " <td>5</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th rowspan=\"2\" valign=\"top\">qux</th>\n", | |
| " <th>one</th>\n", | |
| " <td>3</td>\n", | |
| " <td>6</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>two</th>\n", | |
| " <td>3</td>\n", | |
| " <td>7</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " A B\n", | |
| "first second \n", | |
| "bar one 1 0\n", | |
| " two 1 1\n", | |
| "baz one 1 2\n", | |
| " two 1 3\n", | |
| "foo one 2 4\n", | |
| " two 2 5\n", | |
| "qux one 3 6\n", | |
| " two 3 7" | |
| ] | |
| }, | |
| "execution_count": 105, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "df" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 110, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "grouped = df.groupby('A')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 111, | |
| "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>A</th>\n", | |
| " <th>B</th>\n", | |
| " <th>C</th>\n", | |
| " <th>D</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>bar</td>\n", | |
| " <td>one</td>\n", | |
| " <td>-0.164786</td>\n", | |
| " <td>-0.095669</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>bar</td>\n", | |
| " <td>three</td>\n", | |
| " <td>1.222772</td>\n", | |
| " <td>-0.327442</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>5</th>\n", | |
| " <td>bar</td>\n", | |
| " <td>two</td>\n", | |
| " <td>0.234509</td>\n", | |
| " <td>-1.830546</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " A B C D\n", | |
| "1 bar one -0.164786 -0.095669\n", | |
| "3 bar three 1.222772 -0.327442\n", | |
| "5 bar two 0.234509 -1.830546" | |
| ] | |
| }, | |
| "execution_count": 111, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "grouped.get_group('bar')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 113, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "grouped=df.groupby(['A','B'])" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 114, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "('bar', 'one')\n", | |
| " A B C D\n", | |
| "1 bar one -0.164786 -0.095669\n", | |
| "('bar', 'three')\n", | |
| " A B C D\n", | |
| "3 bar three 1.222772 -0.327442\n", | |
| "('bar', 'two')\n", | |
| " A B C D\n", | |
| "5 bar two 0.234509 -1.830546\n", | |
| "('foo', 'one')\n", | |
| " A B C D\n", | |
| "0 foo one 1.412836 0.355419\n", | |
| "6 foo one 0.739483 -0.024285\n", | |
| "('foo', 'three')\n", | |
| " A B C D\n", | |
| "7 foo three 1.297815 -0.85314\n", | |
| "('foo', 'two')\n", | |
| " A B C D\n", | |
| "2 foo two -0.458831 -0.265426\n", | |
| "4 foo two 0.277010 -1.404317\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "for name, group in grouped:\n", | |
| " ....: print(name)\n", | |
| " ....: print(group)\n", | |
| " ....: " | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 115, | |
| "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>A</th>\n", | |
| " <th>B</th>\n", | |
| " <th>C</th>\n", | |
| " <th>D</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>bar</td>\n", | |
| " <td>one</td>\n", | |
| " <td>-0.164786</td>\n", | |
| " <td>-0.095669</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " A B C D\n", | |
| "1 bar one -0.164786 -0.095669" | |
| ] | |
| }, | |
| "execution_count": 115, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "df.groupby(['A','B']).get_group(('bar','one'))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 117, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "('bar', 'one')\n", | |
| " A B C D\n", | |
| "1 bar one -0.164786 -0.095669\n", | |
| "('bar', 'three')\n", | |
| " A B C D\n", | |
| "3 bar three 1.222772 -0.327442\n", | |
| "('bar', 'two')\n", | |
| " A B C D\n", | |
| "5 bar two 0.234509 -1.830546\n", | |
| "('foo', 'one')\n", | |
| " A B C D\n", | |
| "0 foo one 1.412836 0.355419\n", | |
| "6 foo one 0.739483 -0.024285\n", | |
| "('foo', 'three')\n", | |
| " A B C D\n", | |
| "7 foo three 1.297815 -0.85314\n", | |
| "('foo', 'two')\n", | |
| " A B C D\n", | |
| "2 foo two -0.458831 -0.265426\n", | |
| "4 foo two 0.277010 -1.404317\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "groupd = df.groupby('A').aggregete(np.sum)\n", | |
| "for name, group in grouped:\n", | |
| " print(name)\n", | |
| " print(group)\n", | |
| " " | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 119, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "groupd = df.groupby('A').aggregate(np.sum)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 121, | |
| "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>C</th>\n", | |
| " <th>D</th>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>A</th>\n", | |
| " <th></th>\n", | |
| " <th></th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>bar</th>\n", | |
| " <td>1.292495</td>\n", | |
| " <td>-2.253657</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>foo</th>\n", | |
| " <td>3.268314</td>\n", | |
| " <td>-2.191750</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " C D\n", | |
| "A \n", | |
| "bar 1.292495 -2.253657\n", | |
| "foo 3.268314 -2.191750" | |
| ] | |
| }, | |
| "execution_count": 121, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "groupd" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 122, | |
| "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>A</th>\n", | |
| " <th>B</th>\n", | |
| " <th>C</th>\n", | |
| " <th>D</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>foo</td>\n", | |
| " <td>one</td>\n", | |
| " <td>1.412836</td>\n", | |
| " <td>0.355419</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>bar</td>\n", | |
| " <td>one</td>\n", | |
| " <td>-0.164786</td>\n", | |
| " <td>-0.095669</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>foo</td>\n", | |
| " <td>two</td>\n", | |
| " <td>-0.458831</td>\n", | |
| " <td>-0.265426</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>bar</td>\n", | |
| " <td>three</td>\n", | |
| " <td>1.222772</td>\n", | |
| " <td>-0.327442</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>foo</td>\n", | |
| " <td>two</td>\n", | |
| " <td>0.277010</td>\n", | |
| " <td>-1.404317</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>5</th>\n", | |
| " <td>bar</td>\n", | |
| " <td>two</td>\n", | |
| " <td>0.234509</td>\n", | |
| " <td>-1.830546</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>6</th>\n", | |
| " <td>foo</td>\n", | |
| " <td>one</td>\n", | |
| " <td>0.739483</td>\n", | |
| " <td>-0.024285</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>7</th>\n", | |
| " <td>foo</td>\n", | |
| " <td>three</td>\n", | |
| " <td>1.297815</td>\n", | |
| " <td>-0.853140</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " A B C D\n", | |
| "0 foo one 1.412836 0.355419\n", | |
| "1 bar one -0.164786 -0.095669\n", | |
| "2 foo two -0.458831 -0.265426\n", | |
| "3 bar three 1.222772 -0.327442\n", | |
| "4 foo two 0.277010 -1.404317\n", | |
| "5 bar two 0.234509 -1.830546\n", | |
| "6 foo one 0.739483 -0.024285\n", | |
| "7 foo three 1.297815 -0.853140" | |
| ] | |
| }, | |
| "execution_count": 122, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "grouped = df.groupby('A').aggregate(np.sum)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 123, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "grouped = df.groupby(['A','B']).aggregate(np.sum)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 124, | |
| "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></th>\n", | |
| " <th>C</th>\n", | |
| " <th>D</th>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>A</th>\n", | |
| " <th>B</th>\n", | |
| " <th></th>\n", | |
| " <th></th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th rowspan=\"3\" valign=\"top\">bar</th>\n", | |
| " <th>one</th>\n", | |
| " <td>-0.164786</td>\n", | |
| " <td>-0.095669</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>three</th>\n", | |
| " <td>1.222772</td>\n", | |
| " <td>-0.327442</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>two</th>\n", | |
| " <td>0.234509</td>\n", | |
| " <td>-1.830546</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th rowspan=\"3\" valign=\"top\">foo</th>\n", | |
| " <th>one</th>\n", | |
| " <td>2.152319</td>\n", | |
| " <td>0.331134</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>three</th>\n", | |
| " <td>1.297815</td>\n", | |
| " <td>-0.853140</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>two</th>\n", | |
| " <td>-0.181820</td>\n", | |
| " <td>-1.669744</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " C D\n", | |
| "A B \n", | |
| "bar one -0.164786 -0.095669\n", | |
| " three 1.222772 -0.327442\n", | |
| " two 0.234509 -1.830546\n", | |
| "foo one 2.152319 0.331134\n", | |
| " three 1.297815 -0.853140\n", | |
| " two -0.181820 -1.669744" | |
| ] | |
| }, | |
| "execution_count": 124, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "grouped" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 125, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "grouped = df.groupby(['A','B'],as_index = False)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 126, | |
| "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>A</th>\n", | |
| " <th>B</th>\n", | |
| " <th>C</th>\n", | |
| " <th>D</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>bar</td>\n", | |
| " <td>one</td>\n", | |
| " <td>-0.164786</td>\n", | |
| " <td>-0.095669</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>bar</td>\n", | |
| " <td>three</td>\n", | |
| " <td>1.222772</td>\n", | |
| " <td>-0.327442</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>bar</td>\n", | |
| " <td>two</td>\n", | |
| " <td>0.234509</td>\n", | |
| " <td>-1.830546</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>foo</td>\n", | |
| " <td>one</td>\n", | |
| " <td>2.152319</td>\n", | |
| " <td>0.331134</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>foo</td>\n", | |
| " <td>three</td>\n", | |
| " <td>1.297815</td>\n", | |
| " <td>-0.853140</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>5</th>\n", | |
| " <td>foo</td>\n", | |
| " <td>two</td>\n", | |
| " <td>-0.181820</td>\n", | |
| " <td>-1.669744</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " A B C D\n", | |
| "0 bar one -0.164786 -0.095669\n", | |
| "1 bar three 1.222772 -0.327442\n", | |
| "2 bar two 0.234509 -1.830546\n", | |
| "3 foo one 2.152319 0.331134\n", | |
| "4 foo three 1.297815 -0.853140\n", | |
| "5 foo two -0.181820 -1.669744" | |
| ] | |
| }, | |
| "execution_count": 126, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "grouped.aggregate(np.sum)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 127, | |
| "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>A</th>\n", | |
| " <th>C</th>\n", | |
| " <th>D</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>bar</td>\n", | |
| " <td>1.292495</td>\n", | |
| " <td>-2.253657</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>foo</td>\n", | |
| " <td>3.268314</td>\n", | |
| " <td>-2.191750</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " A C D\n", | |
| "0 bar 1.292495 -2.253657\n", | |
| "1 foo 3.268314 -2.191750" | |
| ] | |
| }, | |
| "execution_count": 127, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "df.groupby('A',as_index=False).sum()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 129, | |
| "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>A</th>\n", | |
| " <th>B</th>\n", | |
| " <th>C</th>\n", | |
| " <th>D</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>bar</td>\n", | |
| " <td>one</td>\n", | |
| " <td>-0.164786</td>\n", | |
| " <td>-0.095669</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>bar</td>\n", | |
| " <td>three</td>\n", | |
| " <td>1.222772</td>\n", | |
| " <td>-0.327442</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>bar</td>\n", | |
| " <td>two</td>\n", | |
| " <td>0.234509</td>\n", | |
| " <td>-1.830546</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>foo</td>\n", | |
| " <td>one</td>\n", | |
| " <td>2.152319</td>\n", | |
| " <td>0.331134</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>foo</td>\n", | |
| " <td>three</td>\n", | |
| " <td>1.297815</td>\n", | |
| " <td>-0.853140</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>5</th>\n", | |
| " <td>foo</td>\n", | |
| " <td>two</td>\n", | |
| " <td>-0.181820</td>\n", | |
| " <td>-1.669744</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " A B C D\n", | |
| "0 bar one -0.164786 -0.095669\n", | |
| "1 bar three 1.222772 -0.327442\n", | |
| "2 bar two 0.234509 -1.830546\n", | |
| "3 foo one 2.152319 0.331134\n", | |
| "4 foo three 1.297815 -0.853140\n", | |
| "5 foo two -0.181820 -1.669744" | |
| ] | |
| }, | |
| "execution_count": 129, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "df.groupby(['A','B']).sum().reset_index()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 130, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "A B \n", | |
| "bar one 1\n", | |
| " three 1\n", | |
| " two 1\n", | |
| "foo one 2\n", | |
| " three 1\n", | |
| " two 2\n", | |
| "dtype: int64" | |
| ] | |
| }, | |
| "execution_count": 130, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "grouped.size()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "ename": "NameError", | |
| "evalue": "name 'grouped' is not defined", | |
| "output_type": "error", | |
| "traceback": [ | |
| "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", | |
| "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", | |
| "\u001b[0;32m<ipython-input-1-6dc34867c034>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mgrouped\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdescribe\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", | |
| "\u001b[0;31mNameError\u001b[0m: name 'grouped' is not defined" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "grouped.describe()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 8, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "grouped = df.groupby('A')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 11, | |
| "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>sum</th>\n", | |
| " <th>mean</th>\n", | |
| " <th>std</th>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>A</th>\n", | |
| " <th></th>\n", | |
| " <th></th>\n", | |
| " <th></th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>bar</th>\n", | |
| " <td>-1.067728</td>\n", | |
| " <td>-0.355909</td>\n", | |
| " <td>0.612014</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>foo</th>\n", | |
| " <td>2.591334</td>\n", | |
| " <td>0.518267</td>\n", | |
| " <td>0.774105</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " sum mean std\n", | |
| "A \n", | |
| "bar -1.067728 -0.355909 0.612014\n", | |
| "foo 2.591334 0.518267 0.774105" | |
| ] | |
| }, | |
| "execution_count": 11, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "grouped['C'].agg([np.sum,np.mean,np.std])" | |
| ] | |
| }, | |
| { | |
| "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 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=\"3\" halign=\"left\">C</th>\n", | |
| " <th colspan=\"3\" halign=\"left\">D</th>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th></th>\n", | |
| " <th>sum</th>\n", | |
| " <th>mean</th>\n", | |
| " <th>std</th>\n", | |
| " <th>sum</th>\n", | |
| " <th>mean</th>\n", | |
| " <th>std</th>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>A</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>bar</th>\n", | |
| " <td>-1.067728</td>\n", | |
| " <td>-0.355909</td>\n", | |
| " <td>0.612014</td>\n", | |
| " <td>4.521936</td>\n", | |
| " <td>1.507312</td>\n", | |
| " <td>0.601616</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>foo</th>\n", | |
| " <td>2.591334</td>\n", | |
| " <td>0.518267</td>\n", | |
| " <td>0.774105</td>\n", | |
| " <td>-5.674091</td>\n", | |
| " <td>-1.134818</td>\n", | |
| " <td>0.632171</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " C D \n", | |
| " sum mean std sum mean std\n", | |
| "A \n", | |
| "bar -1.067728 -0.355909 0.612014 4.521936 1.507312 0.601616\n", | |
| "foo 2.591334 0.518267 0.774105 -5.674091 -1.134818 0.632171" | |
| ] | |
| }, | |
| "execution_count": 12, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "grouped.agg([np.sum,np.mean,np.std])" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 13, | |
| "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>sum_of_vals_C</th>\n", | |
| " <th>mean_of_vals_C</th>\n", | |
| " <th>std_of_vals_C</th>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>A</th>\n", | |
| " <th></th>\n", | |
| " <th></th>\n", | |
| " <th></th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>bar</th>\n", | |
| " <td>-1.067728</td>\n", | |
| " <td>-0.355909</td>\n", | |
| " <td>0.612014</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>foo</th>\n", | |
| " <td>2.591334</td>\n", | |
| " <td>0.518267</td>\n", | |
| " <td>0.774105</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " sum_of_vals_C mean_of_vals_C std_of_vals_C\n", | |
| "A \n", | |
| "bar -1.067728 -0.355909 0.612014\n", | |
| "foo 2.591334 0.518267 0.774105" | |
| ] | |
| }, | |
| "execution_count": 13, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "(grouped['C'].agg([np.sum,np.mean,np.std])\n", | |
| " .rename(columns={'sum':'sum_of_vals_C',\n", | |
| " 'mean':'mean_of_vals_C',\n", | |
| " 'std':'std_of_vals_C'}))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 15, | |
| "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=\"3\" halign=\"left\">C</th>\n", | |
| " <th colspan=\"3\" halign=\"left\">D</th>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th></th>\n", | |
| " <th>foo</th>\n", | |
| " <th>bar</th>\n", | |
| " <th>baz</th>\n", | |
| " <th>foo</th>\n", | |
| " <th>bar</th>\n", | |
| " <th>baz</th>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>A</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>bar</th>\n", | |
| " <td>-1.067728</td>\n", | |
| " <td>-0.355909</td>\n", | |
| " <td>0.612014</td>\n", | |
| " <td>4.521936</td>\n", | |
| " <td>1.507312</td>\n", | |
| " <td>0.601616</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>foo</th>\n", | |
| " <td>2.591334</td>\n", | |
| " <td>0.518267</td>\n", | |
| " <td>0.774105</td>\n", | |
| " <td>-5.674091</td>\n", | |
| " <td>-1.134818</td>\n", | |
| " <td>0.632171</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " C D \n", | |
| " foo bar baz foo bar baz\n", | |
| "A \n", | |
| "bar -1.067728 -0.355909 0.612014 4.521936 1.507312 0.601616\n", | |
| "foo 2.591334 0.518267 0.774105 -5.674091 -1.134818 0.632171" | |
| ] | |
| }, | |
| "execution_count": 15, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "(grouped.agg([np.sum,np.mean,np.std])\n", | |
| " .rename(columns={'sum':'foo',\n", | |
| " 'mean':'bar',\n", | |
| " 'std':'baz'}))" | |
| ] | |
| }, | |
| { | |
| "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><lambda_0></th>\n", | |
| " <th><lambda_1></th>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>A</th>\n", | |
| " <th></th>\n", | |
| " <th></th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>bar</th>\n", | |
| " <td>1.179325</td>\n", | |
| " <td>0.189243</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>foo</th>\n", | |
| " <td>2.018660</td>\n", | |
| " <td>0.247032</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " <lambda_0> <lambda_1>\n", | |
| "A \n", | |
| "bar 1.179325 0.189243\n", | |
| "foo 2.018660 0.247032" | |
| ] | |
| }, | |
| "execution_count": 16, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "grouped['C'].agg([lambda x : x.max() - x.min(),lambda x:x.median() - x.mean()])" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 17, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| " animals = pd.DataFrame({'kind': ['cat', 'dog', 'cat', 'dog'],\n", | |
| " ....: 'height': [9.1, 6.0, 9.5, 34.0],\n", | |
| " ....: 'weight': [7.9, 7.5, 9.9, 198.0]})\n", | |
| " ....: " | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 18, | |
| "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>kind</th>\n", | |
| " <th>height</th>\n", | |
| " <th>weight</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>cat</td>\n", | |
| " <td>9.1</td>\n", | |
| " <td>7.9</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>dog</td>\n", | |
| " <td>6.0</td>\n", | |
| " <td>7.5</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>cat</td>\n", | |
| " <td>9.5</td>\n", | |
| " <td>9.9</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>dog</td>\n", | |
| " <td>34.0</td>\n", | |
| " <td>198.0</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " kind height weight\n", | |
| "0 cat 9.1 7.9\n", | |
| "1 dog 6.0 7.5\n", | |
| "2 cat 9.5 9.9\n", | |
| "3 dog 34.0 198.0" | |
| ] | |
| }, | |
| "execution_count": 18, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "animals" | |
| ] | |
| }, | |
| { | |
| "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>min_height</th>\n", | |
| " <th>max_height</th>\n", | |
| " <th>avg_height</th>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>kind</th>\n", | |
| " <th></th>\n", | |
| " <th></th>\n", | |
| " <th></th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>cat</th>\n", | |
| " <td>9.1</td>\n", | |
| " <td>9.5</td>\n", | |
| " <td>9.3</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>dog</th>\n", | |
| " <td>6.0</td>\n", | |
| " <td>34.0</td>\n", | |
| " <td>20.0</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " min_height max_height avg_height\n", | |
| "kind \n", | |
| "cat 9.1 9.5 9.3\n", | |
| "dog 6.0 34.0 20.0" | |
| ] | |
| }, | |
| "execution_count": 20, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "#performing multiple operations on a single column\n", | |
| "animals.groupby('kind').agg(\n", | |
| " min_height = pd.NamedAgg(column='height',aggfunc='min'),\n", | |
| " max_height = pd.NamedAgg(column='height',aggfunc='max'),\n", | |
| " avg_height = pd.NamedAgg(column='height',aggfunc=np.mean))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 21, | |
| "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>min_weight</th>\n", | |
| " <th>max_weight</th>\n", | |
| " <th>avg_weight</th>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>kind</th>\n", | |
| " <th></th>\n", | |
| " <th></th>\n", | |
| " <th></th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>cat</th>\n", | |
| " <td>7.9</td>\n", | |
| " <td>9.9</td>\n", | |
| " <td>8.90</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>dog</th>\n", | |
| " <td>7.5</td>\n", | |
| " <td>198.0</td>\n", | |
| " <td>102.75</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " min_weight max_weight avg_weight\n", | |
| "kind \n", | |
| "cat 7.9 9.9 8.90\n", | |
| "dog 7.5 198.0 102.75" | |
| ] | |
| }, | |
| "execution_count": 21, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "animals.groupby('kind').agg(\n", | |
| " min_weight = pd.NamedAgg(column='weight',aggfunc='min'),\n", | |
| " max_weight = pd.NamedAgg(column='weight',aggfunc='max'),\n", | |
| " avg_weight = pd.NamedAgg(column='weight',aggfunc=np.mean))" | |
| ] | |
| }, | |
| { | |
| "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>min_weight</th>\n", | |
| " <th>max_weight</th>\n", | |
| " <th>avg_weight</th>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>kind</th>\n", | |
| " <th></th>\n", | |
| " <th></th>\n", | |
| " <th></th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>cat</th>\n", | |
| " <td>7.9</td>\n", | |
| " <td>9.9</td>\n", | |
| " <td>8.90</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>dog</th>\n", | |
| " <td>7.5</td>\n", | |
| " <td>198.0</td>\n", | |
| " <td>102.75</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " min_weight max_weight avg_weight\n", | |
| "kind \n", | |
| "cat 7.9 9.9 8.90\n", | |
| "dog 7.5 198.0 102.75" | |
| ] | |
| }, | |
| "execution_count": 22, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "animals.groupby('kind').agg(\n", | |
| " min_weight = ('weight','min'),\n", | |
| " max_weight = ('weight','max'),\n", | |
| " avg_weight = ('weight',np.mean))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 23, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar',\n", | |
| " ...: 'foo', 'bar', 'foo', 'foo'],\n", | |
| " ...: 'B': ['one', 'one', 'two', 'three',\n", | |
| " ...: 'two', 'two', 'one', 'three'],\n", | |
| " ...: 'C': np.random.randn(8),\n", | |
| " ...: 'D': np.random.randn(8)})\n", | |
| " ...: " | |
| ] | |
| }, | |
| { | |
| "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>C</th>\n", | |
| " <th>D</th>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>A</th>\n", | |
| " <th></th>\n", | |
| " <th></th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>bar</th>\n", | |
| " <td>-1.614837</td>\n", | |
| " <td>0.154791</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>foo</th>\n", | |
| " <td>-0.004034</td>\n", | |
| " <td>0.903334</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " C D\n", | |
| "A \n", | |
| "bar -1.614837 0.154791\n", | |
| "foo -0.004034 0.903334" | |
| ] | |
| }, | |
| "execution_count": 27, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "df.groupby('A').agg({'C':np.sum,\n", | |
| " 'D':lambda x: np.std(x,ddof=1)})" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 25, | |
| "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>A</th>\n", | |
| " <th>B</th>\n", | |
| " <th>C</th>\n", | |
| " <th>D</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>foo</td>\n", | |
| " <td>one</td>\n", | |
| " <td>0.525831</td>\n", | |
| " <td>0.937198</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>bar</td>\n", | |
| " <td>one</td>\n", | |
| " <td>-0.606828</td>\n", | |
| " <td>-0.960484</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>foo</td>\n", | |
| " <td>two</td>\n", | |
| " <td>-0.593733</td>\n", | |
| " <td>0.660704</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>bar</td>\n", | |
| " <td>three</td>\n", | |
| " <td>-0.293773</td>\n", | |
| " <td>-0.654798</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>foo</td>\n", | |
| " <td>two</td>\n", | |
| " <td>-0.670192</td>\n", | |
| " <td>-0.177364</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>5</th>\n", | |
| " <td>bar</td>\n", | |
| " <td>two</td>\n", | |
| " <td>-0.714235</td>\n", | |
| " <td>-0.850042</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>6</th>\n", | |
| " <td>foo</td>\n", | |
| " <td>one</td>\n", | |
| " <td>0.063952</td>\n", | |
| " <td>-1.352500</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>7</th>\n", | |
| " <td>foo</td>\n", | |
| " <td>three</td>\n", | |
| " <td>0.670108</td>\n", | |
| " <td>-0.317702</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " A B C D\n", | |
| "0 foo one 0.525831 0.937198\n", | |
| "1 bar one -0.606828 -0.960484\n", | |
| "2 foo two -0.593733 0.660704\n", | |
| "3 bar three -0.293773 -0.654798\n", | |
| "4 foo two -0.670192 -0.177364\n", | |
| "5 bar two -0.714235 -0.850042\n", | |
| "6 foo one 0.063952 -1.352500\n", | |
| "7 foo three 0.670108 -0.317702" | |
| ] | |
| }, | |
| "execution_count": 25, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "df.groupby('A').agg({'C':'sum','D':'std'})" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 28, | |
| "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>C</th>\n", | |
| " <th>D</th>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>A</th>\n", | |
| " <th></th>\n", | |
| " <th></th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>bar</th>\n", | |
| " <td>-1.614837</td>\n", | |
| " <td>-2.465325</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>foo</th>\n", | |
| " <td>-0.004034</td>\n", | |
| " <td>-0.249664</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " C D\n", | |
| "A \n", | |
| "bar -1.614837 -2.465325\n", | |
| "foo -0.004034 -0.249664" | |
| ] | |
| }, | |
| "execution_count": 28, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "df.groupby('A').sum()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 29, | |
| "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></th>\n", | |
| " <th>C</th>\n", | |
| " <th>D</th>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>A</th>\n", | |
| " <th>B</th>\n", | |
| " <th></th>\n", | |
| " <th></th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th rowspan=\"3\" valign=\"top\">bar</th>\n", | |
| " <th>one</th>\n", | |
| " <td>-0.606828</td>\n", | |
| " <td>-0.960484</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>three</th>\n", | |
| " <td>-0.293773</td>\n", | |
| " <td>-0.654798</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>two</th>\n", | |
| " <td>-0.714235</td>\n", | |
| " <td>-0.850042</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th rowspan=\"3\" valign=\"top\">foo</th>\n", | |
| " <th>one</th>\n", | |
| " <td>0.294892</td>\n", | |
| " <td>-0.207651</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>three</th>\n", | |
| " <td>0.670108</td>\n", | |
| " <td>-0.317702</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>two</th>\n", | |
| " <td>-0.631962</td>\n", | |
| " <td>0.241670</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " C D\n", | |
| "A B \n", | |
| "bar one -0.606828 -0.960484\n", | |
| " three -0.293773 -0.654798\n", | |
| " two -0.714235 -0.850042\n", | |
| "foo one 0.294892 -0.207651\n", | |
| " three 0.670108 -0.317702\n", | |
| " two -0.631962 0.241670" | |
| ] | |
| }, | |
| "execution_count": 29, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "df.groupby(['A','B']).mean()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 36, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "index = pd.date_range('10/1/1999', periods=1100)\n", | |
| "\n", | |
| "ts = pd.Series(np.random.normal(0.5, 2, 1100), index)\n", | |
| "\n", | |
| "ts = ts.rolling(window=100, min_periods=100).mean().dropna()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 37, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "2000-01-08 0.397750\n", | |
| "2000-01-09 0.412502\n", | |
| "2000-01-10 0.459791\n", | |
| "2000-01-11 0.462337\n", | |
| "2000-01-12 0.463646\n", | |
| " ... \n", | |
| "2002-09-30 0.252382\n", | |
| "2002-10-01 0.249659\n", | |
| "2002-10-02 0.260878\n", | |
| "2002-10-03 0.253985\n", | |
| "2002-10-04 0.321154\n", | |
| "Freq: D, Length: 1001, dtype: float64" | |
| ] | |
| }, | |
| "execution_count": 37, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "ts" | |
| ] | |
| }, | |
| { | |
| "cell_type": "raw", | |
| "metadata": {}, | |
| "source": [ | |
| "for city,city_df in grouped:\n", | |
| " print(city)\n", | |
| " print(city_df)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 39, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "transformed = (ts.groupby(lambda x : x.year)\n", | |
| " .transform(lambda x:(x - x.mean())/x.std()))\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 41, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "transformed = (ts.groupby(lambda x : x.year)\n", | |
| " .transform(lambda x:(x - x.mean())/x.std()))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 42, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "grouped = ts.groupby(lambda x : x.year)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 43, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "2000 0.298367\n", | |
| "2001 0.517357\n", | |
| "2002 0.421771\n", | |
| "dtype: float64" | |
| ] | |
| }, | |
| "execution_count": 43, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "grouped.mean()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 44, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "2000 0.227476\n", | |
| "2001 0.169031\n", | |
| "2002 0.098716\n", | |
| "dtype: float64" | |
| ] | |
| }, | |
| "execution_count": 44, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "grouped.std()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 46, | |
| "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>count</th>\n", | |
| " <th>mean</th>\n", | |
| " <th>std</th>\n", | |
| " <th>min</th>\n", | |
| " <th>25%</th>\n", | |
| " <th>50%</th>\n", | |
| " <th>75%</th>\n", | |
| " <th>max</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>2000</th>\n", | |
| " <td>359.0</td>\n", | |
| " <td>0.298367</td>\n", | |
| " <td>0.227476</td>\n", | |
| " <td>-0.116172</td>\n", | |
| " <td>0.119289</td>\n", | |
| " <td>0.304232</td>\n", | |
| " <td>0.475787</td>\n", | |
| " <td>0.777470</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2001</th>\n", | |
| " <td>365.0</td>\n", | |
| " <td>0.517357</td>\n", | |
| " <td>0.169031</td>\n", | |
| " <td>0.192838</td>\n", | |
| " <td>0.388280</td>\n", | |
| " <td>0.497874</td>\n", | |
| " <td>0.650184</td>\n", | |
| " <td>0.935739</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2002</th>\n", | |
| " <td>277.0</td>\n", | |
| " <td>0.421771</td>\n", | |
| " <td>0.098716</td>\n", | |
| " <td>0.192349</td>\n", | |
| " <td>0.353076</td>\n", | |
| " <td>0.423294</td>\n", | |
| " <td>0.481939</td>\n", | |
| " <td>0.676709</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " count mean std min 25% 50% 75% \\\n", | |
| "2000 359.0 0.298367 0.227476 -0.116172 0.119289 0.304232 0.475787 \n", | |
| "2001 365.0 0.517357 0.169031 0.192838 0.388280 0.497874 0.650184 \n", | |
| "2002 277.0 0.421771 0.098716 0.192349 0.353076 0.423294 0.481939 \n", | |
| "\n", | |
| " max \n", | |
| "2000 0.777470 \n", | |
| "2001 0.935739 \n", | |
| "2002 0.676709 " | |
| ] | |
| }, | |
| "execution_count": 46, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "grouped.describe()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 47, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "2000-01-08 0.436891\n", | |
| "2000-01-09 0.501745\n", | |
| "2000-01-10 0.709631\n", | |
| "2000-01-11 0.720823\n", | |
| "2000-01-12 0.726574\n", | |
| " ... \n", | |
| "2002-09-30 -1.715919\n", | |
| "2002-10-01 -1.743505\n", | |
| "2002-10-02 -1.629856\n", | |
| "2002-10-03 -1.699682\n", | |
| "2002-10-04 -1.019252\n", | |
| "Freq: D, Length: 1001, dtype: float64" | |
| ] | |
| }, | |
| "execution_count": 47, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "transformed" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 48, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "grouped_trans = transformed.groupby(lambda x : x.year)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 49, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "2000 2.566811e-16\n", | |
| "2001 -2.463783e-17\n", | |
| "2002 1.050103e-16\n", | |
| "dtype: float64" | |
| ] | |
| }, | |
| "execution_count": 49, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "grouped_trans.mean()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 51, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "2000 1.0\n", | |
| "2001 1.0\n", | |
| "2002 1.0\n", | |
| "dtype: float64" | |
| ] | |
| }, | |
| "execution_count": 51, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "grouped_trans.std()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 52, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "compare = pd.DataFrame({'Original':ts,'Transformed':transformed})" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 55, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "compare.plot()\n", | |
| "%matplotlib inline" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 56, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "<matplotlib.axes._subplots.AxesSubplot at 0x7feac9fd8470>" | |
| ] | |
| }, | |
| "execution_count": 56, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<Figure size 432x288 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": { | |
| "needs_background": "light" | |
| }, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "compare.plot()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 57, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "2000-01-08 0.893643\n", | |
| "2000-01-09 0.893643\n", | |
| "2000-01-10 0.893643\n", | |
| "2000-01-11 0.893643\n", | |
| "2000-01-12 0.893643\n", | |
| " ... \n", | |
| "2002-09-30 0.484360\n", | |
| "2002-10-01 0.484360\n", | |
| "2002-10-02 0.484360\n", | |
| "2002-10-03 0.484360\n", | |
| "2002-10-04 0.484360\n", | |
| "Freq: D, Length: 1001, dtype: float64" | |
| ] | |
| }, | |
| "execution_count": 57, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "ts.groupby(lambda x : x.year).transform(lambda x : x.max() - x.min())" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 59, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "<pandas.core.groupby.generic.SeriesGroupBy object at 0x7feaca0ecd30>" | |
| ] | |
| }, | |
| "execution_count": 59, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "ts.groupby(lambda x : x.year)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 64, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "-0.11617247988319544\n", | |
| "0.777470113827381\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "print(ts.groupby(lambda x : x.year).get_group(2000).min())\n", | |
| "print(ts.groupby(lambda x : x.year).get_group(2000).max())" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 65, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "0.1928377426265784\n", | |
| "0.9357392720374879\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "print(ts.groupby(lambda x : x.year).get_group(2001).min())\n", | |
| "print(ts.groupby(lambda x : x.year).get_group(2001).max())" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 66, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "2000-01-08 0.479103\n", | |
| "2000-01-09 0.479103\n", | |
| "2000-01-10 0.479103\n", | |
| "2000-01-11 0.479103\n", | |
| "2000-01-12 0.479103\n", | |
| " ... \n", | |
| "2002-09-30 0.254938\n", | |
| "2002-10-01 0.254938\n", | |
| "2002-10-02 0.254938\n", | |
| "2002-10-03 0.254938\n", | |
| "2002-10-04 0.254938\n", | |
| "Freq: D, Length: 1001, dtype: float64" | |
| ] | |
| }, | |
| "execution_count": 66, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "ts.groupby(lambda x :x.year).transform(lambda x : x.max() - x.mean())" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 68, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "max = ts.groupby(lambda x : x.year).transform('max')\n", | |
| "min = ts.groupby(lambda x : x.year).transform('min')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 69, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "2000-01-08 0.893643\n", | |
| "2000-01-09 0.893643\n", | |
| "2000-01-10 0.893643\n", | |
| "2000-01-11 0.893643\n", | |
| "2000-01-12 0.893643\n", | |
| " ... \n", | |
| "2002-09-30 0.484360\n", | |
| "2002-10-01 0.484360\n", | |
| "2002-10-02 0.484360\n", | |
| "2002-10-03 0.484360\n", | |
| "2002-10-04 0.484360\n", | |
| "Freq: D, Length: 1001, dtype: float64" | |
| ] | |
| }, | |
| "execution_count": 69, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "max - min" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 70, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([3, 0, 2, 2, 2, 3, 0, 2, 1, 0, 1, 1, 2, 2, 2, 1, 2, 1, 1, 3, 3, 1,\n", | |
| " 1, 2, 3, 3, 3, 0, 3, 1, 2, 1, 0, 3, 3, 3, 1, 2, 3, 3, 0, 3, 3, 0,\n", | |
| " 1, 0, 2, 1, 1, 3, 1, 3, 2, 2, 1, 0, 0, 0, 3, 2, 2, 0, 1, 2, 1, 2,\n", | |
| " 2, 0, 0, 0, 1, 0, 3, 1, 1, 3, 3, 1, 2, 1, 3, 3, 0, 0, 3, 1, 2, 1,\n", | |
| " 0, 1, 3, 2, 1, 1, 1, 2, 0, 3, 1, 1, 3, 1, 0, 0, 3, 3, 0, 1, 1, 2,\n", | |
| " 2, 0, 0, 2, 3, 2, 3, 3, 2, 3, 3, 2, 2, 2, 2, 0, 1, 1, 3, 0, 3, 2,\n", | |
| " 2, 0, 0, 1, 0, 1, 0, 3, 0, 1, 1, 1, 2, 0, 1, 3, 1, 1, 2, 3, 2, 0,\n", | |
| " 2, 1, 1, 2, 0, 3, 3, 2, 1, 2, 2, 0, 1, 1, 1, 3, 0, 2, 1, 2, 2, 2,\n", | |
| " 3, 2, 3, 3, 1, 1, 3, 0, 3, 2, 2, 2, 0, 0, 0, 3, 1, 1, 0, 1, 1, 3,\n", | |
| " 2, 1, 0, 3, 0, 3, 0, 1, 2, 3, 1, 1, 2, 0, 1, 2, 2, 2, 0, 3, 3, 3,\n", | |
| " 2, 1, 2, 2, 0, 2, 2, 1, 2, 3, 0, 1, 2, 0, 2, 3, 0, 0, 0, 2, 0, 0,\n", | |
| " 0, 1, 1, 1, 0, 1, 3, 1, 3, 3, 0, 2, 3, 3, 3, 1, 3, 3, 2, 3, 3, 3,\n", | |
| " 1, 2, 0, 2, 3, 1, 2, 0, 0, 0, 0, 3, 1, 2, 0, 2, 0, 0, 3, 2, 3, 3,\n", | |
| " 1, 0, 0, 0, 0, 2, 3, 2, 1, 0, 3, 2, 3, 0, 0, 3, 3, 2, 2, 3, 0, 3,\n", | |
| " 1, 0, 0, 3, 3, 0, 3, 2, 2, 2, 0, 2, 3, 2, 3, 1, 2, 2, 1, 1, 2, 0,\n", | |
| " 0, 0, 0, 3, 2, 0, 2, 0, 1, 2, 2, 2, 0, 2, 0, 2, 0, 0, 3, 2, 3, 2,\n", | |
| " 1, 2, 1, 1, 3, 2, 3, 1, 2, 3, 1, 0, 3, 1, 2, 3, 2, 1, 2, 3, 0, 2,\n", | |
| " 1, 3, 1, 2, 0, 3, 2, 0, 0, 3, 3, 2, 0, 3, 2, 2, 2, 3, 0, 1, 3, 2,\n", | |
| " 2, 0, 3, 0, 3, 0, 2, 0, 1, 3, 0, 0, 0, 1, 0, 2, 1, 2, 3, 1, 2, 1,\n", | |
| " 0, 2, 0, 0, 1, 2, 0, 3, 1, 0, 3, 0, 3, 3, 3, 3, 2, 2, 0, 0, 3, 0,\n", | |
| " 3, 3, 0, 1, 1, 3, 0, 0, 3, 3, 3, 2, 0, 2, 3, 0, 2, 2, 0, 1, 2, 2,\n", | |
| " 3, 3, 0, 0, 3, 3, 1, 2, 3, 2, 2, 0, 2, 2, 1, 0, 1, 2, 0, 0, 3, 1,\n", | |
| " 3, 2, 3, 0, 3, 3, 1, 1, 3, 0, 3, 0, 2, 1, 3, 3, 2, 0, 2, 3, 2, 3,\n", | |
| " 0, 2, 2, 3, 3, 3, 3, 0, 3, 3, 0, 0, 3, 3, 0, 3, 1, 0, 1, 3, 1, 2,\n", | |
| " 0, 2, 2, 0, 3, 0, 2, 3, 3, 2, 2, 2, 3, 3, 2, 2, 1, 2, 2, 3, 2, 0,\n", | |
| " 1, 0, 2, 1, 1, 3, 3, 0, 2, 2, 0, 0, 3, 2, 1, 3, 0, 2, 0, 2, 1, 1,\n", | |
| " 0, 0, 0, 2, 3, 1, 1, 2, 3, 3, 2, 1, 0, 3, 2, 0, 2, 2, 3, 1, 1, 1,\n", | |
| " 2, 2, 1, 0, 0, 1, 2, 0, 0, 3, 2, 3, 2, 0, 3, 0, 0, 1, 2, 0, 2, 2,\n", | |
| " 1, 0, 1, 3, 0, 2, 2, 2, 2, 0, 3, 1, 2, 3, 1, 2, 2, 3, 0, 1, 0, 0,\n", | |
| " 3, 3, 1, 3, 1, 3, 3, 0, 1, 1, 1, 0, 2, 1, 3, 1, 2, 0, 3, 2, 1, 2,\n", | |
| " 0, 2, 1, 2, 2, 3, 2, 3, 0, 3, 0, 0, 0, 1, 3, 1, 1, 0, 0, 2, 3, 1,\n", | |
| " 0, 0, 3, 2, 2, 3, 2, 1, 0, 3, 1, 3, 1, 3, 3, 1, 1, 3, 0, 0, 0, 3,\n", | |
| " 0, 0, 3, 0, 0, 1, 0, 2, 2, 2, 0, 1, 1, 1, 1, 1, 0, 3, 0, 1, 3, 2,\n", | |
| " 1, 3, 0, 3, 0, 2, 2, 3, 1, 1, 2, 3, 0, 3, 0, 1, 1, 3, 0, 2, 1, 1,\n", | |
| " 0, 0, 2, 2, 3, 1, 2, 2, 3, 1, 0, 1, 3, 3, 1, 2, 2, 2, 1, 3, 3, 1,\n", | |
| " 3, 3, 2, 3, 2, 2, 0, 1, 1, 1, 3, 1, 0, 2, 2, 2, 3, 2, 1, 0, 2, 3,\n", | |
| " 0, 1, 1, 2, 1, 1, 1, 0, 2, 3, 0, 0, 2, 0, 1, 3, 2, 1, 2, 3, 3, 3,\n", | |
| " 3, 3, 3, 2, 3, 2, 2, 3, 1, 0, 3, 0, 1, 3, 1, 2, 2, 2, 2, 1, 0, 2,\n", | |
| " 3, 1, 2, 2, 3, 2, 2, 1, 2, 1, 0, 1, 3, 0, 1, 2, 1, 0, 3, 0, 1, 3,\n", | |
| " 2, 1, 3, 0, 2, 3, 0, 1, 0, 1, 0, 1, 2, 2, 1, 0, 2, 1, 0, 0, 0, 1,\n", | |
| " 1, 1, 3, 1, 2, 3, 2, 1, 2, 2, 3, 0, 0, 2, 0, 0, 3, 0, 3, 0, 1, 2,\n", | |
| " 1, 1, 1, 2, 2, 0, 3, 2, 0, 2, 3, 2, 3, 3, 3, 2, 0, 3, 0, 0, 0, 0,\n", | |
| " 0, 1, 2, 0, 3, 0, 1, 3, 1, 0, 2, 1, 0, 0, 1, 2, 2, 0, 1, 1, 0, 2,\n", | |
| " 2, 2, 3, 3, 2, 3, 1, 2, 0, 3, 0, 0, 0, 0, 1, 0, 2, 2, 3, 3, 0, 2,\n", | |
| " 3, 0, 0, 0, 1, 1, 1, 1, 3, 0, 3, 2, 2, 1, 0, 3, 1, 1, 2, 2, 0, 0,\n", | |
| " 3, 2, 0, 0, 2, 3, 2, 2, 2, 3])" | |
| ] | |
| }, | |
| "execution_count": 70, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "np.random.randint(0,4,1000)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 71, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "countries = np.array(['US', 'UK', 'GR', 'JP'])\n", | |
| "key = countries[np.random.randint(0, 4, 1000)]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 72, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array(['GR', 'JP', 'US', 'UK', 'US', 'JP', 'GR', 'UK', 'GR', 'JP', 'UK',\n", | |
| " 'US', 'US', 'UK', 'UK', 'UK', 'UK', 'GR', 'UK', 'US', 'GR', 'JP',\n", | |
| " 'GR', 'JP', 'JP', 'GR', 'UK', 'UK', 'UK', 'UK', 'UK', 'JP', 'UK',\n", | |
| " 'GR', 'GR', 'GR', 'JP', 'JP', 'US', 'GR', 'US', 'GR', 'US', 'US',\n", | |
| " 'UK', 'US', 'JP', 'US', 'UK', 'US', 'UK', 'US', 'JP', 'US', 'UK',\n", | |
| " 'JP', 'US', 'GR', 'GR', 'UK', 'GR', 'US', 'US', 'UK', 'JP', 'GR',\n", | |
| " 'GR', 'US', 'GR', 'JP', 'JP', 'JP', 'UK', 'UK', 'GR', 'JP', 'UK',\n", | |
| " 'US', 'UK', 'US', 'US', 'GR', 'GR', 'GR', 'GR', 'UK', 'US', 'GR',\n", | |
| " 'US', 'UK', 'JP', 'US', 'JP', 'JP', 'JP', 'UK', 'US', 'UK', 'GR',\n", | |
| " 'US', 'US', 'GR', 'JP', 'US', 'GR', 'JP', 'JP', 'UK', 'US', 'US',\n", | |
| " 'GR', 'JP', 'US', 'US', 'JP', 'GR', 'JP', 'US', 'JP', 'US', 'GR',\n", | |
| " 'US', 'JP', 'GR', 'UK', 'JP', 'UK', 'JP', 'GR', 'UK', 'US', 'JP',\n", | |
| " 'US', 'US', 'US', 'UK', 'US', 'GR', 'GR', 'US', 'US', 'UK', 'UK',\n", | |
| " 'GR', 'UK', 'GR', 'UK', 'JP', 'JP', 'UK', 'US', 'GR', 'GR', 'GR',\n", | |
| " 'UK', 'JP', 'US', 'US', 'US', 'GR', 'GR', 'UK', 'UK', 'GR', 'JP',\n", | |
| " 'UK', 'GR', 'GR', 'JP', 'UK', 'US', 'UK', 'UK', 'JP', 'US', 'US',\n", | |
| " 'JP', 'GR', 'US', 'JP', 'GR', 'US', 'US', 'GR', 'GR', 'US', 'JP',\n", | |
| " 'UK', 'GR', 'GR', 'GR', 'JP', 'UK', 'JP', 'GR', 'UK', 'UK', 'UK',\n", | |
| " 'JP', 'US', 'JP', 'JP', 'GR', 'US', 'GR', 'UK', 'GR', 'JP', 'GR',\n", | |
| " 'US', 'UK', 'UK', 'GR', 'GR', 'US', 'US', 'UK', 'UK', 'GR', 'UK',\n", | |
| " 'UK', 'JP', 'JP', 'GR', 'UK', 'US', 'JP', 'UK', 'US', 'JP', 'UK',\n", | |
| " 'GR', 'GR', 'GR', 'GR', 'JP', 'JP', 'US', 'UK', 'GR', 'JP', 'UK',\n", | |
| " 'US', 'US', 'US', 'UK', 'JP', 'JP', 'GR', 'UK', 'JP', 'GR', 'US',\n", | |
| " 'US', 'UK', 'GR', 'UK', 'GR', 'UK', 'JP', 'GR', 'US', 'GR', 'US',\n", | |
| " 'US', 'GR', 'JP', 'US', 'GR', 'JP', 'GR', 'UK', 'GR', 'GR', 'GR',\n", | |
| " 'UK', 'UK', 'JP', 'GR', 'JP', 'US', 'US', 'GR', 'US', 'US', 'JP',\n", | |
| " 'GR', 'JP', 'UK', 'US', 'GR', 'UK', 'JP', 'UK', 'US', 'GR', 'GR',\n", | |
| " 'JP', 'UK', 'JP', 'JP', 'GR', 'UK', 'JP', 'GR', 'US', 'GR', 'JP',\n", | |
| " 'GR', 'UK', 'GR', 'UK', 'GR', 'UK', 'UK', 'JP', 'JP', 'GR', 'UK',\n", | |
| " 'US', 'GR', 'GR', 'US', 'JP', 'US', 'UK', 'US', 'US', 'US', 'US',\n", | |
| " 'UK', 'UK', 'UK', 'JP', 'UK', 'UK', 'GR', 'US', 'US', 'UK', 'GR',\n", | |
| " 'UK', 'UK', 'UK', 'GR', 'US', 'JP', 'US', 'UK', 'JP', 'UK', 'GR',\n", | |
| " 'JP', 'GR', 'GR', 'US', 'UK', 'GR', 'UK', 'JP', 'JP', 'UK', 'JP',\n", | |
| " 'UK', 'GR', 'US', 'GR', 'US', 'US', 'UK', 'JP', 'GR', 'US', 'JP',\n", | |
| " 'UK', 'GR', 'GR', 'UK', 'UK', 'GR', 'GR', 'UK', 'UK', 'JP', 'US',\n", | |
| " 'US', 'JP', 'GR', 'UK', 'JP', 'GR', 'UK', 'UK', 'JP', 'JP', 'GR',\n", | |
| " 'GR', 'US', 'US', 'US', 'UK', 'JP', 'GR', 'US', 'JP', 'GR', 'GR',\n", | |
| " 'US', 'UK', 'GR', 'US', 'GR', 'GR', 'US', 'UK', 'GR', 'GR', 'GR',\n", | |
| " 'GR', 'US', 'US', 'UK', 'JP', 'GR', 'US', 'US', 'GR', 'UK', 'JP',\n", | |
| " 'JP', 'UK', 'US', 'UK', 'UK', 'US', 'US', 'GR', 'GR', 'JP', 'GR',\n", | |
| " 'JP', 'GR', 'UK', 'GR', 'JP', 'US', 'UK', 'JP', 'JP', 'UK', 'UK',\n", | |
| " 'UK', 'GR', 'US', 'GR', 'UK', 'JP', 'UK', 'UK', 'GR', 'US', 'JP',\n", | |
| " 'UK', 'GR', 'UK', 'GR', 'JP', 'US', 'US', 'UK', 'GR', 'JP', 'US',\n", | |
| " 'GR', 'UK', 'JP', 'US', 'GR', 'JP', 'US', 'GR', 'GR', 'JP', 'JP',\n", | |
| " 'JP', 'GR', 'GR', 'GR', 'GR', 'US', 'US', 'US', 'GR', 'US', 'UK',\n", | |
| " 'GR', 'JP', 'JP', 'JP', 'US', 'US', 'JP', 'GR', 'US', 'US', 'UK',\n", | |
| " 'UK', 'US', 'US', 'US', 'US', 'JP', 'UK', 'JP', 'US', 'GR', 'UK',\n", | |
| " 'US', 'US', 'UK', 'GR', 'JP', 'GR', 'UK', 'US', 'UK', 'UK', 'GR',\n", | |
| " 'JP', 'US', 'GR', 'UK', 'UK', 'JP', 'JP', 'UK', 'UK', 'JP', 'US',\n", | |
| " 'JP', 'US', 'UK', 'US', 'GR', 'US', 'JP', 'UK', 'JP', 'GR', 'GR',\n", | |
| " 'JP', 'UK', 'JP', 'GR', 'JP', 'UK', 'GR', 'US', 'JP', 'GR', 'JP',\n", | |
| " 'GR', 'GR', 'GR', 'JP', 'GR', 'GR', 'JP', 'GR', 'JP', 'GR', 'JP',\n", | |
| " 'JP', 'UK', 'US', 'GR', 'JP', 'US', 'US', 'JP', 'JP', 'UK', 'UK',\n", | |
| " 'JP', 'JP', 'UK', 'JP', 'US', 'US', 'JP', 'UK', 'JP', 'GR', 'UK',\n", | |
| " 'JP', 'JP', 'JP', 'JP', 'UK', 'GR', 'UK', 'GR', 'US', 'GR', 'US',\n", | |
| " 'UK', 'JP', 'UK', 'GR', 'US', 'GR', 'GR', 'JP', 'GR', 'UK', 'UK',\n", | |
| " 'US', 'GR', 'US', 'JP', 'UK', 'GR', 'US', 'UK', 'UK', 'US', 'GR',\n", | |
| " 'US', 'UK', 'GR', 'GR', 'GR', 'US', 'UK', 'UK', 'UK', 'GR', 'JP',\n", | |
| " 'GR', 'US', 'UK', 'GR', 'GR', 'GR', 'JP', 'UK', 'US', 'GR', 'JP',\n", | |
| " 'GR', 'JP', 'UK', 'JP', 'US', 'US', 'US', 'UK', 'US', 'JP', 'UK',\n", | |
| " 'JP', 'US', 'JP', 'JP', 'GR', 'JP', 'GR', 'US', 'UK', 'US', 'JP',\n", | |
| " 'GR', 'UK', 'US', 'UK', 'JP', 'JP', 'JP', 'JP', 'US', 'GR', 'UK',\n", | |
| " 'JP', 'UK', 'US', 'US', 'US', 'UK', 'US', 'US', 'US', 'JP', 'JP',\n", | |
| " 'JP', 'US', 'UK', 'UK', 'US', 'GR', 'US', 'GR', 'US', 'US', 'JP',\n", | |
| " 'UK', 'JP', 'UK', 'US', 'JP', 'UK', 'UK', 'GR', 'UK', 'GR', 'UK',\n", | |
| " 'GR', 'JP', 'UK', 'JP', 'US', 'GR', 'US', 'GR', 'JP', 'US', 'GR',\n", | |
| " 'UK', 'GR', 'GR', 'US', 'US', 'JP', 'GR', 'JP', 'UK', 'JP', 'GR',\n", | |
| " 'US', 'UK', 'UK', 'JP', 'UK', 'GR', 'JP', 'JP', 'JP', 'GR', 'JP',\n", | |
| " 'JP', 'GR', 'GR', 'US', 'UK', 'US', 'UK', 'UK', 'UK', 'US', 'UK',\n", | |
| " 'UK', 'GR', 'JP', 'JP', 'JP', 'UK', 'GR', 'UK', 'UK', 'UK', 'UK',\n", | |
| " 'JP', 'UK', 'UK', 'JP', 'UK', 'US', 'GR', 'JP', 'JP', 'US', 'US',\n", | |
| " 'JP', 'UK', 'GR', 'GR', 'JP', 'JP', 'JP', 'UK', 'GR', 'JP', 'JP',\n", | |
| " 'US', 'JP', 'UK', 'UK', 'UK', 'GR', 'UK', 'US', 'JP', 'US', 'JP',\n", | |
| " 'JP', 'US', 'US', 'UK', 'GR', 'US', 'UK', 'JP', 'JP', 'JP', 'UK',\n", | |
| " 'US', 'US', 'GR', 'US', 'GR', 'GR', 'JP', 'JP', 'GR', 'UK', 'US',\n", | |
| " 'JP', 'GR', 'JP', 'UK', 'JP', 'US', 'GR', 'GR', 'UK', 'JP', 'GR',\n", | |
| " 'UK', 'JP', 'GR', 'GR', 'UK', 'UK', 'US', 'JP', 'UK', 'GR', 'US',\n", | |
| " 'GR', 'UK', 'UK', 'GR', 'GR', 'JP', 'US', 'JP', 'JP', 'US', 'US',\n", | |
| " 'US', 'GR', 'JP', 'GR', 'UK', 'GR', 'UK', 'GR', 'US', 'US', 'UK',\n", | |
| " 'UK', 'GR', 'GR', 'GR', 'JP', 'US', 'JP', 'UK', 'US', 'UK', 'US',\n", | |
| " 'JP', 'JP', 'US', 'UK', 'US', 'JP', 'GR', 'JP', 'UK', 'UK', 'US',\n", | |
| " 'GR', 'JP', 'US', 'UK', 'GR', 'JP', 'US', 'JP', 'US', 'US', 'US',\n", | |
| " 'US', 'JP', 'GR', 'GR', 'US', 'GR', 'GR', 'JP', 'US', 'JP', 'GR',\n", | |
| " 'UK', 'GR', 'GR', 'GR', 'UK', 'US', 'US', 'UK', 'UK', 'JP', 'JP',\n", | |
| " 'GR', 'UK', 'JP', 'UK', 'US', 'US', 'GR', 'GR', 'UK', 'US', 'UK',\n", | |
| " 'US', 'US', 'JP', 'GR', 'UK', 'UK', 'GR', 'GR', 'UK', 'GR', 'UK',\n", | |
| " 'UK', 'UK', 'GR', 'UK', 'US', 'GR', 'US', 'GR', 'US', 'UK', 'GR',\n", | |
| " 'UK', 'JP', 'JP', 'JP', 'UK', 'GR', 'GR', 'US', 'US', 'US', 'US',\n", | |
| " 'JP', 'US', 'GR', 'UK', 'US', 'GR', 'US', 'UK', 'UK', 'GR', 'GR',\n", | |
| " 'UK', 'GR', 'JP', 'UK', 'UK', 'US', 'US', 'GR', 'UK', 'JP', 'GR',\n", | |
| " 'JP', 'US', 'US', 'UK', 'JP', 'GR', 'US', 'GR', 'JP', 'GR'],\n", | |
| " dtype='<U2')" | |
| ] | |
| }, | |
| "execution_count": 72, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "key" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 85, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "\n", | |
| "A = pd.DataFrame(np.random.random_sample(1000))\n", | |
| "B = pd.DataFrame(np.random.random_sample(1000))\n", | |
| "C = pd.DataFrame(np.random.random_sample(1000))\n", | |
| " \n", | |
| "\n", | |
| "data_df = pd.concat([A,B,C], axis=1)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 86, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "data_df.columns = ['A','B','C']" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 87, | |
| "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>A</th>\n", | |
| " <th>B</th>\n", | |
| " <th>C</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>0.351094</td>\n", | |
| " <td>0.133608</td>\n", | |
| " <td>0.628969</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>0.138634</td>\n", | |
| " <td>0.004522</td>\n", | |
| " <td>0.465160</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>0.054474</td>\n", | |
| " <td>0.453759</td>\n", | |
| " <td>0.923444</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>0.916781</td>\n", | |
| " <td>0.118076</td>\n", | |
| " <td>0.548352</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>0.778188</td>\n", | |
| " <td>0.839567</td>\n", | |
| " <td>0.451133</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>...</th>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>995</th>\n", | |
| " <td>0.554736</td>\n", | |
| " <td>0.398509</td>\n", | |
| " <td>0.548543</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>996</th>\n", | |
| " <td>0.872723</td>\n", | |
| " <td>0.527732</td>\n", | |
| " <td>0.098492</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>997</th>\n", | |
| " <td>0.028831</td>\n", | |
| " <td>0.669984</td>\n", | |
| " <td>0.002225</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>998</th>\n", | |
| " <td>0.407136</td>\n", | |
| " <td>0.425719</td>\n", | |
| " <td>0.100232</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>999</th>\n", | |
| " <td>0.092504</td>\n", | |
| " <td>0.047740</td>\n", | |
| " <td>0.847473</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "<p>1000 rows × 3 columns</p>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " A B C\n", | |
| "0 0.351094 0.133608 0.628969\n", | |
| "1 0.138634 0.004522 0.465160\n", | |
| "2 0.054474 0.453759 0.923444\n", | |
| "3 0.916781 0.118076 0.548352\n", | |
| "4 0.778188 0.839567 0.451133\n", | |
| ".. ... ... ...\n", | |
| "995 0.554736 0.398509 0.548543\n", | |
| "996 0.872723 0.527732 0.098492\n", | |
| "997 0.028831 0.669984 0.002225\n", | |
| "998 0.407136 0.425719 0.100232\n", | |
| "999 0.092504 0.047740 0.847473\n", | |
| "\n", | |
| "[1000 rows x 3 columns]" | |
| ] | |
| }, | |
| "execution_count": 87, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "data_df" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 88, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "countries = np.array(['US','UK','GR','JP']) #in this case we are assigining o to us 1 to uk 2 to germany and three to japan\n", | |
| "key = countries[np.random.randint(0,4,1000)]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "raw", | |
| "metadata": {}, | |
| "source": [ | |
| "grouped = data_df.groupby(key)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 89, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "grouped = data_df.groupby(key)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 90, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "GR\n", | |
| " A B C\n", | |
| "4 0.778188 0.839567 0.451133\n", | |
| "9 0.082148 0.148114 0.976333\n", | |
| "14 0.690438 0.024288 0.476117\n", | |
| "16 0.425069 0.985017 0.326654\n", | |
| "19 0.212796 0.299330 0.072867\n", | |
| ".. ... ... ...\n", | |
| "984 0.834708 0.815853 0.669714\n", | |
| "985 0.702559 0.315849 0.802399\n", | |
| "989 0.577904 0.337447 0.222615\n", | |
| "991 0.705838 0.504381 0.667801\n", | |
| "992 0.248608 0.562126 0.022650\n", | |
| "\n", | |
| "[260 rows x 3 columns]\n", | |
| "JP\n", | |
| " A B C\n", | |
| "5 0.332766 0.716401 0.711193\n", | |
| "8 0.674980 0.961938 0.547730\n", | |
| "12 0.124541 0.692677 0.237986\n", | |
| "20 0.959239 0.117974 0.487286\n", | |
| "21 0.698805 0.278752 0.197454\n", | |
| ".. ... ... ...\n", | |
| "969 0.485863 0.493198 0.458967\n", | |
| "971 0.313397 0.101021 0.168328\n", | |
| "975 0.246298 0.490399 0.308183\n", | |
| "983 0.006420 0.046642 0.945925\n", | |
| "993 0.112008 0.809384 0.114151\n", | |
| "\n", | |
| "[249 rows x 3 columns]\n", | |
| "UK\n", | |
| " A B C\n", | |
| "1 0.138634 0.004522 0.465160\n", | |
| "7 0.404905 0.773223 0.720845\n", | |
| "11 0.238578 0.027857 0.287067\n", | |
| "13 0.605820 0.518708 0.185625\n", | |
| "15 0.789736 0.825019 0.582432\n", | |
| ".. ... ... ...\n", | |
| "990 0.670403 0.540493 0.840878\n", | |
| "996 0.872723 0.527732 0.098492\n", | |
| "997 0.028831 0.669984 0.002225\n", | |
| "998 0.407136 0.425719 0.100232\n", | |
| "999 0.092504 0.047740 0.847473\n", | |
| "\n", | |
| "[256 rows x 3 columns]\n", | |
| "US\n", | |
| " A B C\n", | |
| "0 0.351094 0.133608 0.628969\n", | |
| "2 0.054474 0.453759 0.923444\n", | |
| "3 0.916781 0.118076 0.548352\n", | |
| "6 0.822617 0.897122 0.043410\n", | |
| "10 0.515989 0.705154 0.108364\n", | |
| ".. ... ... ...\n", | |
| "981 0.473041 0.009584 0.610663\n", | |
| "986 0.024601 0.642822 0.824041\n", | |
| "988 0.616746 0.699632 0.697873\n", | |
| "994 0.597579 0.206435 0.070892\n", | |
| "995 0.554736 0.398509 0.548543\n", | |
| "\n", | |
| "[235 rows x 3 columns]\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "for val1,val2 in grouped:\n", | |
| " print(val1)\n", | |
| " print(val2)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 91, | |
| "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", | |
| "</style>\n", | |
| "<table border=\"1\" class=\"dataframe\">\n", | |
| " <thead>\n", | |
| " <tr>\n", | |
| " <th></th>\n", | |
| " <th colspan=\"8\" halign=\"left\">A</th>\n", | |
| " <th colspan=\"5\" halign=\"left\">B</th>\n", | |
| " <th colspan=\"8\" halign=\"left\">C</th>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th></th>\n", | |
| " <th>count</th>\n", | |
| " <th>mean</th>\n", | |
| " <th>std</th>\n", | |
| " <th>min</th>\n", | |
| " <th>25%</th>\n", | |
| " <th>50%</th>\n", | |
| " <th>75%</th>\n", | |
| " <th>max</th>\n", | |
| " <th>count</th>\n", | |
| " <th>mean</th>\n", | |
| " <th>...</th>\n", | |
| " <th>75%</th>\n", | |
| " <th>max</th>\n", | |
| " <th>count</th>\n", | |
| " <th>mean</th>\n", | |
| " <th>std</th>\n", | |
| " <th>min</th>\n", | |
| " <th>25%</th>\n", | |
| " <th>50%</th>\n", | |
| " <th>75%</th>\n", | |
| " <th>max</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>GR</th>\n", | |
| " <td>260.0</td>\n", | |
| " <td>0.501613</td>\n", | |
| " <td>0.286194</td>\n", | |
| " <td>0.004168</td>\n", | |
| " <td>0.249077</td>\n", | |
| " <td>0.525631</td>\n", | |
| " <td>0.739737</td>\n", | |
| " <td>0.997800</td>\n", | |
| " <td>260.0</td>\n", | |
| " <td>0.469976</td>\n", | |
| " <td>...</td>\n", | |
| " <td>0.724621</td>\n", | |
| " <td>0.997653</td>\n", | |
| " <td>260.0</td>\n", | |
| " <td>0.488605</td>\n", | |
| " <td>0.303010</td>\n", | |
| " <td>0.004641</td>\n", | |
| " <td>0.240337</td>\n", | |
| " <td>0.465719</td>\n", | |
| " <td>0.752129</td>\n", | |
| " <td>0.996096</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>JP</th>\n", | |
| " <td>249.0</td>\n", | |
| " <td>0.463581</td>\n", | |
| " <td>0.287510</td>\n", | |
| " <td>0.001089</td>\n", | |
| " <td>0.216904</td>\n", | |
| " <td>0.452370</td>\n", | |
| " <td>0.691688</td>\n", | |
| " <td>0.999814</td>\n", | |
| " <td>249.0</td>\n", | |
| " <td>0.512401</td>\n", | |
| " <td>...</td>\n", | |
| " <td>0.766266</td>\n", | |
| " <td>0.994668</td>\n", | |
| " <td>249.0</td>\n", | |
| " <td>0.470945</td>\n", | |
| " <td>0.278738</td>\n", | |
| " <td>0.001526</td>\n", | |
| " <td>0.235368</td>\n", | |
| " <td>0.459010</td>\n", | |
| " <td>0.693987</td>\n", | |
| " <td>0.995621</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>UK</th>\n", | |
| " <td>256.0</td>\n", | |
| " <td>0.504142</td>\n", | |
| " <td>0.278185</td>\n", | |
| " <td>0.010296</td>\n", | |
| " <td>0.281667</td>\n", | |
| " <td>0.518882</td>\n", | |
| " <td>0.726152</td>\n", | |
| " <td>0.995354</td>\n", | |
| " <td>256.0</td>\n", | |
| " <td>0.506324</td>\n", | |
| " <td>...</td>\n", | |
| " <td>0.754830</td>\n", | |
| " <td>0.997009</td>\n", | |
| " <td>256.0</td>\n", | |
| " <td>0.512455</td>\n", | |
| " <td>0.286757</td>\n", | |
| " <td>0.002225</td>\n", | |
| " <td>0.277093</td>\n", | |
| " <td>0.526414</td>\n", | |
| " <td>0.771597</td>\n", | |
| " <td>0.989361</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>US</th>\n", | |
| " <td>235.0</td>\n", | |
| " <td>0.503820</td>\n", | |
| " <td>0.278329</td>\n", | |
| " <td>0.000069</td>\n", | |
| " <td>0.272953</td>\n", | |
| " <td>0.489618</td>\n", | |
| " <td>0.732865</td>\n", | |
| " <td>0.999619</td>\n", | |
| " <td>235.0</td>\n", | |
| " <td>0.508358</td>\n", | |
| " <td>...</td>\n", | |
| " <td>0.769544</td>\n", | |
| " <td>0.999496</td>\n", | |
| " <td>235.0</td>\n", | |
| " <td>0.468767</td>\n", | |
| " <td>0.303705</td>\n", | |
| " <td>0.000714</td>\n", | |
| " <td>0.189819</td>\n", | |
| " <td>0.460860</td>\n", | |
| " <td>0.714089</td>\n", | |
| " <td>0.994728</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "<p>4 rows × 24 columns</p>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " A \\\n", | |
| " count mean std min 25% 50% 75% \n", | |
| "GR 260.0 0.501613 0.286194 0.004168 0.249077 0.525631 0.739737 \n", | |
| "JP 249.0 0.463581 0.287510 0.001089 0.216904 0.452370 0.691688 \n", | |
| "UK 256.0 0.504142 0.278185 0.010296 0.281667 0.518882 0.726152 \n", | |
| "US 235.0 0.503820 0.278329 0.000069 0.272953 0.489618 0.732865 \n", | |
| "\n", | |
| " B ... C \\\n", | |
| " max count mean ... 75% max count mean \n", | |
| "GR 0.997800 260.0 0.469976 ... 0.724621 0.997653 260.0 0.488605 \n", | |
| "JP 0.999814 249.0 0.512401 ... 0.766266 0.994668 249.0 0.470945 \n", | |
| "UK 0.995354 256.0 0.506324 ... 0.754830 0.997009 256.0 0.512455 \n", | |
| "US 0.999619 235.0 0.508358 ... 0.769544 0.999496 235.0 0.468767 \n", | |
| "\n", | |
| " \n", | |
| " std min 25% 50% 75% max \n", | |
| "GR 0.303010 0.004641 0.240337 0.465719 0.752129 0.996096 \n", | |
| "JP 0.278738 0.001526 0.235368 0.459010 0.693987 0.995621 \n", | |
| "UK 0.286757 0.002225 0.277093 0.526414 0.771597 0.989361 \n", | |
| "US 0.303705 0.000714 0.189819 0.460860 0.714089 0.994728 \n", | |
| "\n", | |
| "[4 rows x 24 columns]" | |
| ] | |
| }, | |
| "execution_count": 91, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "grouped.describe()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 92, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "transformed = grouped.transform(lambda x : x.max() - x.min())" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 94, | |
| "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>A</th>\n", | |
| " <th>B</th>\n", | |
| " <th>C</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>count</th>\n", | |
| " <td>1000.000000</td>\n", | |
| " <td>1000.000000</td>\n", | |
| " <td>1000.000000</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>mean</th>\n", | |
| " <td>0.994096</td>\n", | |
| " <td>0.995691</td>\n", | |
| " <td>0.991608</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>std</th>\n", | |
| " <td>0.005773</td>\n", | |
| " <td>0.001091</td>\n", | |
| " <td>0.002835</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>min</th>\n", | |
| " <td>0.985058</td>\n", | |
| " <td>0.994477</td>\n", | |
| " <td>0.987136</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>25%</th>\n", | |
| " <td>0.985058</td>\n", | |
| " <td>0.995138</td>\n", | |
| " <td>0.987136</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>50%</th>\n", | |
| " <td>0.993632</td>\n", | |
| " <td>0.995138</td>\n", | |
| " <td>0.991455</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>75%</th>\n", | |
| " <td>0.998725</td>\n", | |
| " <td>0.995791</td>\n", | |
| " <td>0.994014</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>max</th>\n", | |
| " <td>0.999550</td>\n", | |
| " <td>0.997468</td>\n", | |
| " <td>0.994095</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " A B C\n", | |
| "count 1000.000000 1000.000000 1000.000000\n", | |
| "mean 0.994096 0.995691 0.991608\n", | |
| "std 0.005773 0.001091 0.002835\n", | |
| "min 0.985058 0.994477 0.987136\n", | |
| "25% 0.985058 0.995138 0.987136\n", | |
| "50% 0.993632 0.995138 0.991455\n", | |
| "75% 0.998725 0.995791 0.994014\n", | |
| "max 0.999550 0.997468 0.994095" | |
| ] | |
| }, | |
| "execution_count": 94, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "transformed.describe()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 95, | |
| "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>A</th>\n", | |
| " <th>B</th>\n", | |
| " <th>C</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>GR</th>\n", | |
| " <td>0.501613</td>\n", | |
| " <td>0.469976</td>\n", | |
| " <td>0.488605</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>JP</th>\n", | |
| " <td>0.463581</td>\n", | |
| " <td>0.512401</td>\n", | |
| " <td>0.470945</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>UK</th>\n", | |
| " <td>0.504142</td>\n", | |
| " <td>0.506324</td>\n", | |
| " <td>0.512455</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>US</th>\n", | |
| " <td>0.503820</td>\n", | |
| " <td>0.508358</td>\n", | |
| " <td>0.468767</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " A B C\n", | |
| "GR 0.501613 0.469976 0.488605\n", | |
| "JP 0.463581 0.512401 0.470945\n", | |
| "UK 0.504142 0.506324 0.512455\n", | |
| "US 0.503820 0.508358 0.468767" | |
| ] | |
| }, | |
| "execution_count": 95, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "grouped.mean()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 96, | |
| "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>A</th>\n", | |
| " <th>B</th>\n", | |
| " <th>C</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>GR</th>\n", | |
| " <td>260</td>\n", | |
| " <td>260</td>\n", | |
| " <td>260</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>JP</th>\n", | |
| " <td>249</td>\n", | |
| " <td>249</td>\n", | |
| " <td>249</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>UK</th>\n", | |
| " <td>256</td>\n", | |
| " <td>256</td>\n", | |
| " <td>256</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>US</th>\n", | |
| " <td>235</td>\n", | |
| " <td>235</td>\n", | |
| " <td>235</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " A B C\n", | |
| "GR 260 260 260\n", | |
| "JP 249 249 249\n", | |
| "UK 256 256 256\n", | |
| "US 235 235 235" | |
| ] | |
| }, | |
| "execution_count": 96, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "grouped.count()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 97, | |
| "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>A</th>\n", | |
| " <th>B</th>\n", | |
| " <th>C</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>GR</th>\n", | |
| " <td>260</td>\n", | |
| " <td>260</td>\n", | |
| " <td>260</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>JP</th>\n", | |
| " <td>249</td>\n", | |
| " <td>249</td>\n", | |
| " <td>249</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>UK</th>\n", | |
| " <td>256</td>\n", | |
| " <td>256</td>\n", | |
| " <td>256</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>US</th>\n", | |
| " <td>235</td>\n", | |
| " <td>235</td>\n", | |
| " <td>235</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " A B C\n", | |
| "GR 260 260 260\n", | |
| "JP 249 249 249\n", | |
| "UK 256 256 256\n", | |
| "US 235 235 235" | |
| ] | |
| }, | |
| "execution_count": 97, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "grouped.count()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 3, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "dff = pd.DataFrame({'A': np.arange(8), 'B': list('aabbbbcc')})\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "dff.groupby('B')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 4, | |
| "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>A</th>\n", | |
| " <th>B</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>0</td>\n", | |
| " <td>a</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>1</td>\n", | |
| " <td>a</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>2</td>\n", | |
| " <td>b</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>3</td>\n", | |
| " <td>b</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>4</td>\n", | |
| " <td>b</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>5</th>\n", | |
| " <td>5</td>\n", | |
| " <td>b</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>6</th>\n", | |
| " <td>6</td>\n", | |
| " <td>c</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>7</th>\n", | |
| " <td>7</td>\n", | |
| " <td>c</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " A B\n", | |
| "0 0 a\n", | |
| "1 1 a\n", | |
| "2 2 b\n", | |
| "3 3 b\n", | |
| "4 4 b\n", | |
| "5 5 b\n", | |
| "6 6 c\n", | |
| "7 7 c" | |
| ] | |
| }, | |
| "execution_count": 4, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "dff\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 5, | |
| "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>A</th>\n", | |
| " <th>B</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>2</td>\n", | |
| " <td>b</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>3</td>\n", | |
| " <td>b</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>4</td>\n", | |
| " <td>b</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>5</th>\n", | |
| " <td>5</td>\n", | |
| " <td>b</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " A B\n", | |
| "2 2 b\n", | |
| "3 3 b\n", | |
| "4 4 b\n", | |
| "5 5 b" | |
| ] | |
| }, | |
| "execution_count": 5, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "dff.groupby('B').filter(lambda x : len(x) > 2)" | |
| ] | |
| }, | |
| { | |
| "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>A</th>\n", | |
| " <th>B</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>NaN</td>\n", | |
| " <td>NaN</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>NaN</td>\n", | |
| " <td>NaN</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>2.0</td>\n", | |
| " <td>b</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>3.0</td>\n", | |
| " <td>b</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>4.0</td>\n", | |
| " <td>b</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>5</th>\n", | |
| " <td>5.0</td>\n", | |
| " <td>b</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>6</th>\n", | |
| " <td>NaN</td>\n", | |
| " <td>NaN</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>7</th>\n", | |
| " <td>NaN</td>\n", | |
| " <td>NaN</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " A B\n", | |
| "0 NaN NaN\n", | |
| "1 NaN NaN\n", | |
| "2 2.0 b\n", | |
| "3 3.0 b\n", | |
| "4 4.0 b\n", | |
| "5 5.0 b\n", | |
| "6 NaN NaN\n", | |
| "7 NaN NaN" | |
| ] | |
| }, | |
| "execution_count": 6, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "dff.groupby('B').filter(lambda x : len(x) > 2,dropna=False)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 8, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "dff['C'] = np.arange(8)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 10, | |
| "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>A</th>\n", | |
| " <th>B</th>\n", | |
| " <th>C</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>2</td>\n", | |
| " <td>b</td>\n", | |
| " <td>2</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>3</td>\n", | |
| " <td>b</td>\n", | |
| " <td>3</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>4</td>\n", | |
| " <td>b</td>\n", | |
| " <td>4</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>5</th>\n", | |
| " <td>5</td>\n", | |
| " <td>b</td>\n", | |
| " <td>5</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " A B C\n", | |
| "2 2 b 2\n", | |
| "3 3 b 3\n", | |
| "4 4 b 4\n", | |
| "5 5 b 5" | |
| ] | |
| }, | |
| "execution_count": 10, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "dff.groupby('B').filter(lambda x : len(x['C']) > 2)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 11, | |
| "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>A</th>\n", | |
| " <th>B</th>\n", | |
| " <th>C</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>0</td>\n", | |
| " <td>a</td>\n", | |
| " <td>0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>1</td>\n", | |
| " <td>a</td>\n", | |
| " <td>1</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>2</td>\n", | |
| " <td>b</td>\n", | |
| " <td>2</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>3</td>\n", | |
| " <td>b</td>\n", | |
| " <td>3</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>4</td>\n", | |
| " <td>b</td>\n", | |
| " <td>4</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>5</th>\n", | |
| " <td>5</td>\n", | |
| " <td>b</td>\n", | |
| " <td>5</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>6</th>\n", | |
| " <td>6</td>\n", | |
| " <td>c</td>\n", | |
| " <td>6</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>7</th>\n", | |
| " <td>7</td>\n", | |
| " <td>c</td>\n", | |
| " <td>7</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " A B C\n", | |
| "0 0 a 0\n", | |
| "1 1 a 1\n", | |
| "2 2 b 2\n", | |
| "3 3 b 3\n", | |
| "4 4 b 4\n", | |
| "5 5 b 5\n", | |
| "6 6 c 6\n", | |
| "7 7 c 7" | |
| ] | |
| }, | |
| "execution_count": 11, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "dff" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 12, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "a\n", | |
| " A B C\n", | |
| "0 0 a 0\n", | |
| "1 1 a 1\n", | |
| "b\n", | |
| " A B C\n", | |
| "2 2 b 2\n", | |
| "3 3 b 3\n", | |
| "4 4 b 4\n", | |
| "5 5 b 5\n", | |
| "c\n", | |
| " A B C\n", | |
| "6 6 c 6\n", | |
| "7 7 c 7\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "for val1,val2 in dff.groupby('B'):\n", | |
| " print(val1)\n", | |
| " print(val2)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 13, | |
| "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>A</th>\n", | |
| " <th>B</th>\n", | |
| " <th>C</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>2</td>\n", | |
| " <td>b</td>\n", | |
| " <td>2</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>3</td>\n", | |
| " <td>b</td>\n", | |
| " <td>3</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>4</td>\n", | |
| " <td>b</td>\n", | |
| " <td>4</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>5</th>\n", | |
| " <td>5</td>\n", | |
| " <td>b</td>\n", | |
| " <td>5</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " A B C\n", | |
| "2 2 b 2\n", | |
| "3 3 b 3\n", | |
| "4 4 b 4\n", | |
| "5 5 b 5" | |
| ] | |
| }, | |
| "execution_count": 13, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "dff.groupby('B').filter(lambda x : len(x['C']) > 2)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 15, | |
| "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>C</th>\n", | |
| " <th>D</th>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>A</th>\n", | |
| " <th></th>\n", | |
| " <th></th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>bar</th>\n", | |
| " <td>0.931039</td>\n", | |
| " <td>1.774422</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>foo</th>\n", | |
| " <td>0.981862</td>\n", | |
| " <td>0.683811</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " C D\n", | |
| "A \n", | |
| "bar 0.931039 1.774422\n", | |
| "foo 0.981862 0.683811" | |
| ] | |
| }, | |
| "execution_count": 15, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "grouped = df.groupby('A')\n", | |
| "grouped.agg(lambda x : x.std())" | |
| ] | |
| }, | |
| { | |
| "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>C</th>\n", | |
| " <th>D</th>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>A</th>\n", | |
| " <th></th>\n", | |
| " <th></th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>bar</th>\n", | |
| " <td>0.931039</td>\n", | |
| " <td>1.774422</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>foo</th>\n", | |
| " <td>0.981862</td>\n", | |
| " <td>0.683811</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " C D\n", | |
| "A \n", | |
| "bar 0.931039 1.774422\n", | |
| "foo 0.981862 0.683811" | |
| ] | |
| }, | |
| "execution_count": 16, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "grouped.std()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 17, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "tsdf = pd.DataFrame(np.random.randn(1000, 3),\n", | |
| " .....: index=pd.date_range('1/1/2000', periods=1000),\n", | |
| " .....: columns=['A', 'B', 'C'])\n", | |
| " .....: " | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 19, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "tsdf.iloc[::2] = np.nan" | |
| ] | |
| }, | |
| { | |
| "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>A</th>\n", | |
| " <th>B</th>\n", | |
| " <th>C</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>2000-01-01</th>\n", | |
| " <td>NaN</td>\n", | |
| " <td>NaN</td>\n", | |
| " <td>NaN</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2000-01-02</th>\n", | |
| " <td>-0.549587</td>\n", | |
| " <td>-1.442563</td>\n", | |
| " <td>-0.903433</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2000-01-03</th>\n", | |
| " <td>NaN</td>\n", | |
| " <td>NaN</td>\n", | |
| " <td>NaN</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2000-01-04</th>\n", | |
| " <td>-0.599674</td>\n", | |
| " <td>0.435284</td>\n", | |
| " <td>2.046338</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2000-01-05</th>\n", | |
| " <td>NaN</td>\n", | |
| " <td>NaN</td>\n", | |
| " <td>NaN</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>...</th>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2002-09-22</th>\n", | |
| " <td>0.275869</td>\n", | |
| " <td>1.661154</td>\n", | |
| " <td>-0.954975</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2002-09-23</th>\n", | |
| " <td>NaN</td>\n", | |
| " <td>NaN</td>\n", | |
| " <td>NaN</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2002-09-24</th>\n", | |
| " <td>0.286868</td>\n", | |
| " <td>1.551668</td>\n", | |
| " <td>-0.345894</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2002-09-25</th>\n", | |
| " <td>NaN</td>\n", | |
| " <td>NaN</td>\n", | |
| " <td>NaN</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2002-09-26</th>\n", | |
| " <td>-0.151801</td>\n", | |
| " <td>0.674740</td>\n", | |
| " <td>-0.847611</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "<p>1000 rows × 3 columns</p>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " A B C\n", | |
| "2000-01-01 NaN NaN NaN\n", | |
| "2000-01-02 -0.549587 -1.442563 -0.903433\n", | |
| "2000-01-03 NaN NaN NaN\n", | |
| "2000-01-04 -0.599674 0.435284 2.046338\n", | |
| "2000-01-05 NaN NaN NaN\n", | |
| "... ... ... ...\n", | |
| "2002-09-22 0.275869 1.661154 -0.954975\n", | |
| "2002-09-23 NaN NaN NaN\n", | |
| "2002-09-24 0.286868 1.551668 -0.345894\n", | |
| "2002-09-25 NaN NaN NaN\n", | |
| "2002-09-26 -0.151801 0.674740 -0.847611\n", | |
| "\n", | |
| "[1000 rows x 3 columns]" | |
| ] | |
| }, | |
| "execution_count": 20, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "tsdf" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 21, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "grouped = tsdf.groupby(lambda x : x.year)" | |
| ] | |
| }, | |
| { | |
| "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>A</th>\n", | |
| " <th>B</th>\n", | |
| " <th>C</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>2000-01-01</th>\n", | |
| " <td>NaN</td>\n", | |
| " <td>NaN</td>\n", | |
| " <td>NaN</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2000-01-02</th>\n", | |
| " <td>-0.549587</td>\n", | |
| " <td>-1.442563</td>\n", | |
| " <td>-0.903433</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2000-01-03</th>\n", | |
| " <td>-0.549587</td>\n", | |
| " <td>-1.442563</td>\n", | |
| " <td>-0.903433</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2000-01-04</th>\n", | |
| " <td>-0.599674</td>\n", | |
| " <td>0.435284</td>\n", | |
| " <td>2.046338</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2000-01-05</th>\n", | |
| " <td>-0.599674</td>\n", | |
| " <td>0.435284</td>\n", | |
| " <td>2.046338</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>...</th>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2002-09-22</th>\n", | |
| " <td>0.275869</td>\n", | |
| " <td>1.661154</td>\n", | |
| " <td>-0.954975</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2002-09-23</th>\n", | |
| " <td>0.275869</td>\n", | |
| " <td>1.661154</td>\n", | |
| " <td>-0.954975</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2002-09-24</th>\n", | |
| " <td>0.286868</td>\n", | |
| " <td>1.551668</td>\n", | |
| " <td>-0.345894</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2002-09-25</th>\n", | |
| " <td>0.286868</td>\n", | |
| " <td>1.551668</td>\n", | |
| " <td>-0.345894</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2002-09-26</th>\n", | |
| " <td>-0.151801</td>\n", | |
| " <td>0.674740</td>\n", | |
| " <td>-0.847611</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "<p>1000 rows × 3 columns</p>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " A B C\n", | |
| "2000-01-01 NaN NaN NaN\n", | |
| "2000-01-02 -0.549587 -1.442563 -0.903433\n", | |
| "2000-01-03 -0.549587 -1.442563 -0.903433\n", | |
| "2000-01-04 -0.599674 0.435284 2.046338\n", | |
| "2000-01-05 -0.599674 0.435284 2.046338\n", | |
| "... ... ... ...\n", | |
| "2002-09-22 0.275869 1.661154 -0.954975\n", | |
| "2002-09-23 0.275869 1.661154 -0.954975\n", | |
| "2002-09-24 0.286868 1.551668 -0.345894\n", | |
| "2002-09-25 0.286868 1.551668 -0.345894\n", | |
| "2002-09-26 -0.151801 0.674740 -0.847611\n", | |
| "\n", | |
| "[1000 rows x 3 columns]" | |
| ] | |
| }, | |
| "execution_count": 22, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "grouped.fillna(method='pad')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 24, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "s = pd.Series([9, 8, 7, 5, 19, 1, 4.2, 3.3])\n", | |
| "\n", | |
| "g = pd.Series(list('abababab'))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 25, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "gb = s.groupby(g)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 26, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "a\n", | |
| "0 9.0\n", | |
| "2 7.0\n", | |
| "4 19.0\n", | |
| "6 4.2\n", | |
| "dtype: float64\n", | |
| "b\n", | |
| "1 8.0\n", | |
| "3 5.0\n", | |
| "5 1.0\n", | |
| "7 3.3\n", | |
| "dtype: float64\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "for val1,val2 in gb:\n", | |
| " print(val1)\n", | |
| " print(val2)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 27, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "a 4 19.0\n", | |
| " 0 9.0\n", | |
| " 2 7.0\n", | |
| "b 1 8.0\n", | |
| " 3 5.0\n", | |
| " 7 3.3\n", | |
| "dtype: float64" | |
| ] | |
| }, | |
| "execution_count": 27, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "gb.nlargest(3)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 28, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "a 6 4.2\n", | |
| " 2 7.0\n", | |
| " 0 9.0\n", | |
| "b 5 1.0\n", | |
| " 7 3.3\n", | |
| " 3 5.0\n", | |
| "dtype: float64" | |
| ] | |
| }, | |
| "execution_count": 28, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "gb.nsmallest(3)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 29, | |
| "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>A</th>\n", | |
| " <th>B</th>\n", | |
| " <th>C</th>\n", | |
| " <th>D</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>foo</td>\n", | |
| " <td>one</td>\n", | |
| " <td>-1.379714</td>\n", | |
| " <td>0.246156</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>bar</td>\n", | |
| " <td>one</td>\n", | |
| " <td>-1.061037</td>\n", | |
| " <td>0.286379</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>foo</td>\n", | |
| " <td>two</td>\n", | |
| " <td>-1.228099</td>\n", | |
| " <td>-0.465562</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>bar</td>\n", | |
| " <td>three</td>\n", | |
| " <td>0.245849</td>\n", | |
| " <td>2.453660</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>foo</td>\n", | |
| " <td>two</td>\n", | |
| " <td>-0.994241</td>\n", | |
| " <td>-0.845154</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>5</th>\n", | |
| " <td>bar</td>\n", | |
| " <td>two</td>\n", | |
| " <td>0.741118</td>\n", | |
| " <td>-1.063679</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>6</th>\n", | |
| " <td>foo</td>\n", | |
| " <td>one</td>\n", | |
| " <td>-1.357510</td>\n", | |
| " <td>0.868267</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>7</th>\n", | |
| " <td>foo</td>\n", | |
| " <td>three</td>\n", | |
| " <td>0.928733</td>\n", | |
| " <td>0.360970</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " A B C D\n", | |
| "0 foo one -1.379714 0.246156\n", | |
| "1 bar one -1.061037 0.286379\n", | |
| "2 foo two -1.228099 -0.465562\n", | |
| "3 bar three 0.245849 2.453660\n", | |
| "4 foo two -0.994241 -0.845154\n", | |
| "5 bar two 0.741118 -1.063679\n", | |
| "6 foo one -1.357510 0.868267\n", | |
| "7 foo three 0.928733 0.360970" | |
| ] | |
| }, | |
| "execution_count": 29, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "df" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 30, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "grouped = df.groupby('A')\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 31, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "bar\n", | |
| " A B C D\n", | |
| "1 bar one -1.061037 0.286379\n", | |
| "3 bar three 0.245849 2.453660\n", | |
| "5 bar two 0.741118 -1.063679\n", | |
| "foo\n", | |
| " A B C D\n", | |
| "0 foo one -1.379714 0.246156\n", | |
| "2 foo two -1.228099 -0.465562\n", | |
| "4 foo two -0.994241 -0.845154\n", | |
| "6 foo one -1.357510 0.868267\n", | |
| "7 foo three 0.928733 0.360970\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "for val1,val2 in grouped:\n", | |
| " print(val1)\n", | |
| " print(val2)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 32, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "A \n", | |
| "bar count 3.000000\n", | |
| " mean -0.024690\n", | |
| " std 0.931039\n", | |
| " min -1.061037\n", | |
| " 25% -0.407594\n", | |
| " 50% 0.245849\n", | |
| " 75% 0.493483\n", | |
| " max 0.741118\n", | |
| "foo count 5.000000\n", | |
| " mean -0.806166\n", | |
| " std 0.981862\n", | |
| " min -1.379714\n", | |
| " 25% -1.357510\n", | |
| " 50% -1.228099\n", | |
| " 75% -0.994241\n", | |
| " max 0.928733\n", | |
| "Name: C, dtype: float64" | |
| ] | |
| }, | |
| "execution_count": 32, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "grouped['C'].apply(lambda x : x.describe())" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 33, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "grouped = df.groupby('A')['C']" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 34, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "bar\n", | |
| "1 -1.061037\n", | |
| "3 0.245849\n", | |
| "5 0.741118\n", | |
| "Name: C, dtype: float64\n", | |
| "foo\n", | |
| "0 -1.379714\n", | |
| "2 -1.228099\n", | |
| "4 -0.994241\n", | |
| "6 -1.357510\n", | |
| "7 0.928733\n", | |
| "Name: C, dtype: float64\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "for val1,val2 in grouped:\n", | |
| " print(val1)\n", | |
| " print(val2)\n", | |
| " " | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 37, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "def f(group):\n", | |
| " return pd.DataFrame({'original':group,\n", | |
| " 'demeaned':group - group.mean()})" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 38, | |
| "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>original</th>\n", | |
| " <th>demeaned</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>-1.379714</td>\n", | |
| " <td>-0.573548</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>-1.061037</td>\n", | |
| " <td>-1.036347</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>-1.228099</td>\n", | |
| " <td>-0.421933</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>0.245849</td>\n", | |
| " <td>0.270539</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>-0.994241</td>\n", | |
| " <td>-0.188075</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>5</th>\n", | |
| " <td>0.741118</td>\n", | |
| " <td>0.765808</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>6</th>\n", | |
| " <td>-1.357510</td>\n", | |
| " <td>-0.551344</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>7</th>\n", | |
| " <td>0.928733</td>\n", | |
| " <td>1.734899</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " original demeaned\n", | |
| "0 -1.379714 -0.573548\n", | |
| "1 -1.061037 -1.036347\n", | |
| "2 -1.228099 -0.421933\n", | |
| "3 0.245849 0.270539\n", | |
| "4 -0.994241 -0.188075\n", | |
| "5 0.741118 0.765808\n", | |
| "6 -1.357510 -0.551344\n", | |
| "7 0.928733 1.734899" | |
| ] | |
| }, | |
| "execution_count": 38, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "grouped.apply(f)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 43, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "def f(x):\n", | |
| " return pd.Series([x,x ** 2],index=['x','x^2'])" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 44, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "s = pd.Series(np.random.rand(5))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 45, | |
| "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>x</th>\n", | |
| " <th>x^2</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>0.962091</td>\n", | |
| " <td>0.925619</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>0.313070</td>\n", | |
| " <td>0.098013</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>0.084461</td>\n", | |
| " <td>0.007134</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>0.699455</td>\n", | |
| " <td>0.489238</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>0.423001</td>\n", | |
| " <td>0.178930</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " x x^2\n", | |
| "0 0.962091 0.925619\n", | |
| "1 0.313070 0.098013\n", | |
| "2 0.084461 0.007134\n", | |
| "3 0.699455 0.489238\n", | |
| "4 0.423001 0.178930" | |
| ] | |
| }, | |
| "execution_count": 45, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "s.apply(f)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 48, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "from decimal import Decimal\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 49, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "df_dec = pd.DataFrame(\n", | |
| " .....: {'id': [1, 2, 1, 2],\n", | |
| " .....: 'int_column': [1, 2, 3, 4],\n", | |
| " .....: 'dec_column': [Decimal('0.50'), Decimal('0.15'),\n", | |
| " .....: Decimal('0.25'), Decimal('0.40')]\n", | |
| " .....: }\n", | |
| " .....: )" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 50, | |
| "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>id</th>\n", | |
| " <th>int_column</th>\n", | |
| " <th>dec_column</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>1</td>\n", | |
| " <td>1</td>\n", | |
| " <td>0.50</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>2</td>\n", | |
| " <td>2</td>\n", | |
| " <td>0.15</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>1</td>\n", | |
| " <td>3</td>\n", | |
| " <td>0.25</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>2</td>\n", | |
| " <td>4</td>\n", | |
| " <td>0.40</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " id int_column dec_column\n", | |
| "0 1 1 0.50\n", | |
| "1 2 2 0.15\n", | |
| "2 1 3 0.25\n", | |
| "3 2 4 0.40" | |
| ] | |
| }, | |
| "execution_count": 50, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "df_dec" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 52, | |
| "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>dec_column</th>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>id</th>\n", | |
| " <th></th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>0.75</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>0.55</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " dec_column\n", | |
| "id \n", | |
| "1 0.75\n", | |
| "2 0.55" | |
| ] | |
| }, | |
| "execution_count": 52, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "df_dec.groupby(['id'])[['dec_column']].sum()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 53, | |
| "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>int_column</th>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>id</th>\n", | |
| " <th></th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>4</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>6</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " int_column\n", | |
| "id \n", | |
| "1 4\n", | |
| "2 6" | |
| ] | |
| }, | |
| "execution_count": 53, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "df_dec.groupby(['id'])[['int_column','dec_column']].sum()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 54, | |
| "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>int_column</th>\n", | |
| " <th>dec_column</th>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>id</th>\n", | |
| " <th></th>\n", | |
| " <th></th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>4</td>\n", | |
| " <td>0.75</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>6</td>\n", | |
| " <td>0.55</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " int_column dec_column\n", | |
| "id \n", | |
| "1 4 0.75\n", | |
| "2 6 0.55" | |
| ] | |
| }, | |
| "execution_count": 54, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "df_dec.groupby(['id']).agg({'int_column':'sum','dec_column':'sum'})" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 57, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "data = pd.Series(np.random.randn(100))\n", | |
| "factor = pd.qcut(data,[0,0.25,0.5,0.75,1])" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 59, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "(-3.203, -0.652] -1.300292\n", | |
| "(-0.652, -0.0123] -0.339787\n", | |
| "(-0.0123, 0.87] 0.477864\n", | |
| "(0.87, 2.47] 1.448905\n", | |
| "dtype: float64" | |
| ] | |
| }, | |
| "execution_count": 59, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "data.groupby(factor).mean()\n", | |
| " " | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 60, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "import datetime" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 61, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "df = pd.DataFrame({'Branch': 'A A A A A A A B'.split(),\n", | |
| " .....: 'Buyer': 'Carl Mark Carl Carl Joe Joe Joe Carl'.split(),\n", | |
| " .....: 'Quantity': [1, 3, 5, 1, 8, 1, 9, 3],\n", | |
| " .....: 'Date': [\n", | |
| " .....: datetime.datetime(2013, 1, 1, 13, 0),\n", | |
| " .....: datetime.datetime(2013, 1, 1, 13, 5),\n", | |
| " .....: datetime.datetime(2013, 10, 1, 20, 0),\n", | |
| " .....: datetime.datetime(2013, 10, 2, 10, 0),\n", | |
| " .....: datetime.datetime(2013, 10, 1, 20, 0),\n", | |
| " .....: datetime.datetime(2013, 10, 2, 10, 0),\n", | |
| " .....: datetime.datetime(2013, 12, 2, 12, 0),\n", | |
| " .....: datetime.datetime(2013, 12, 2, 14, 0)]\n", | |
| " .....: })\n", | |
| " .....: \n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 62, | |
| "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>Branch</th>\n", | |
| " <th>Buyer</th>\n", | |
| " <th>Quantity</th>\n", | |
| " <th>Date</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>A</td>\n", | |
| " <td>Carl</td>\n", | |
| " <td>1</td>\n", | |
| " <td>2013-01-01 13:00:00</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>A</td>\n", | |
| " <td>Mark</td>\n", | |
| " <td>3</td>\n", | |
| " <td>2013-01-01 13:05:00</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>A</td>\n", | |
| " <td>Carl</td>\n", | |
| " <td>5</td>\n", | |
| " <td>2013-10-01 20:00:00</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>A</td>\n", | |
| " <td>Carl</td>\n", | |
| " <td>1</td>\n", | |
| " <td>2013-10-02 10:00:00</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>A</td>\n", | |
| " <td>Joe</td>\n", | |
| " <td>8</td>\n", | |
| " <td>2013-10-01 20:00:00</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>5</th>\n", | |
| " <td>A</td>\n", | |
| " <td>Joe</td>\n", | |
| " <td>1</td>\n", | |
| " <td>2013-10-02 10:00:00</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>6</th>\n", | |
| " <td>A</td>\n", | |
| " <td>Joe</td>\n", | |
| " <td>9</td>\n", | |
| " <td>2013-12-02 12:00:00</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>7</th>\n", | |
| " <td>B</td>\n", | |
| " <td>Carl</td>\n", | |
| " <td>3</td>\n", | |
| " <td>2013-12-02 14:00:00</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " Branch Buyer Quantity Date\n", | |
| "0 A Carl 1 2013-01-01 13:00:00\n", | |
| "1 A Mark 3 2013-01-01 13:05:00\n", | |
| "2 A Carl 5 2013-10-01 20:00:00\n", | |
| "3 A Carl 1 2013-10-02 10:00:00\n", | |
| "4 A Joe 8 2013-10-01 20:00:00\n", | |
| "5 A Joe 1 2013-10-02 10:00:00\n", | |
| "6 A Joe 9 2013-12-02 12:00:00\n", | |
| "7 B Carl 3 2013-12-02 14:00:00" | |
| ] | |
| }, | |
| "execution_count": 62, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "df" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "Python", | |
| "language": "python", | |
| "name": "conda-env-python-py" | |
| }, | |
| "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.7" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 4 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment