Commits

david  committed cc752fc

added excel

  • Participants
  • Parent commits bf0fddd

Comments (0)

Files changed (6)

 Cheat Sheets
 ---------
 
+* [Pandas for Excel Developers](http://nbviewer.ipython.org/urls/bitbucket.org/hrojas/learn-pandas/raw/master/lessons/Pandas%20for%20Excel%20Developers.ipynb)
 * [Pandas for SQL Developers](http://nbviewer.ipython.org/urls/bitbucket.org/hrojas/learn-pandas/raw/master/lessons/Pandas%20for%20SQL%20Developers.ipynb)
 * [Dates](https://squareup.com/market/david-rojas-llc/data-analysis-dates)
 * [Plotting in Pandas](https://squareup.com/market/david-rojas-llc/data-analysis-plotting-in-pandas)

File lessons/01 - Exercise.ipynb

      "cell_type": "markdown",
      "metadata": {},
      "source": [
-      " # This is the data frame you are given"
+      "# This is the data frame you are given"
      ]
     },
     {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
-      " # This is the data frame you have to replicate"
+      "# This is the data frame you have to replicate"
      ]
     },
     {

File lessons/02 - Exercise.ipynb

      "cell_type": "markdown",
      "metadata": {},
      "source": [
-      " # This is the data frame you are given"
+      "# This is the data frame you are given"
      ]
     },
     {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
-      " # This is the data frame you have to replicate  \n",
+      "# This is the data frame you have to replicate  \n",
       " \n",
       " * Create a sum column  \n",
       " * The values are equal to the row sum  \n",

File lessons/03 - Exercise.ipynb

      "cell_type": "markdown",
      "metadata": {},
      "source": [
-      " # This is the data frame you are given"
+      "# This is the data frame you are given"
      ]
     },
     {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
-      " # This is the data frame you have to replicate  \n",
+      "# This is the data frame you have to replicate  \n",
       " \n",
       " * Change the column name  \n",
       " * Change the index name  "

File lessons/04 - Exercise.ipynb

      "cell_type": "markdown",
      "metadata": {},
      "source": [
-      " # This is the data frame you have to replicate  \n",
+      "# This is the data frame you have to replicate  \n",
       " \n",
       " * Add a new row   "
      ]

File lessons/Pandas for Excel Developers.ipynb

+{
+ "metadata": {
+  "name": ""
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+  {
+   "cells": [
+    {
+     "cell_type": "markdown",
+     "metadata": {},
+     "source": [
+      "# Pandas set up"
+     ]
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "# Import libraries\n",
+      "from pandas import DataFrame\n",
+      "import pandas as pd\n",
+      "import datetime\n",
+      "%matplotlib inline\n",
+      "\n",
+      "print 'Pandas version: ' + pd.__version__"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "output_type": "stream",
+       "stream": "stdout",
+       "text": [
+        "Pandas version: 0.12.0\n"
+       ]
+      }
+     ],
+     "prompt_number": 1
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "# Create dummy data for examples\n",
+      "sample = DataFrame(data = {'Date':[pd.datetime(2013,1,1), pd.datetime(2014,1,1), pd.datetime(2015,1,1), pd.datetime(2016,1,1)],\n",
+      "                           'Quarter 1':[100,200,300,400],\n",
+      "                           'Quarter 2':[20,30,40,50],\n",
+      "                           'Quarter 3':[15,20,25,30],\n",
+      "                           'Quarter 4':[80,90,100,110]})\n",
+      "\n",
+      "sample"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "html": [
+        "<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n",
+        "<table border=\"1\" class=\"dataframe\">\n",
+        "  <thead>\n",
+        "    <tr style=\"text-align: right;\">\n",
+        "      <th></th>\n",
+        "      <th>Date</th>\n",
+        "      <th>Quarter 1</th>\n",
+        "      <th>Quarter 2</th>\n",
+        "      <th>Quarter 3</th>\n",
+        "      <th>Quarter 4</th>\n",
+        "    </tr>\n",
+        "  </thead>\n",
+        "  <tbody>\n",
+        "    <tr>\n",
+        "      <th>0</th>\n",
+        "      <td>2013-01-01 00:00:00</td>\n",
+        "      <td> 100</td>\n",
+        "      <td> 20</td>\n",
+        "      <td> 15</td>\n",
+        "      <td>  80</td>\n",
+        "    </tr>\n",
+        "    <tr>\n",
+        "      <th>1</th>\n",
+        "      <td>2014-01-01 00:00:00</td>\n",
+        "      <td> 200</td>\n",
+        "      <td> 30</td>\n",
+        "      <td> 20</td>\n",
+        "      <td>  90</td>\n",
+        "    </tr>\n",
+        "    <tr>\n",
+        "      <th>2</th>\n",
+        "      <td>2015-01-01 00:00:00</td>\n",
+        "      <td> 300</td>\n",
+        "      <td> 40</td>\n",
+        "      <td> 25</td>\n",
+        "      <td> 100</td>\n",
+        "    </tr>\n",
+        "    <tr>\n",
+        "      <th>3</th>\n",
+        "      <td>2016-01-01 00:00:00</td>\n",
+        "      <td> 400</td>\n",
+        "      <td> 50</td>\n",
+        "      <td> 30</td>\n",
+        "      <td> 110</td>\n",
+        "    </tr>\n",
+        "  </tbody>\n",
+        "</table>\n",
+        "</div>"
+       ],
+       "metadata": {},
+       "output_type": "pyout",
+       "prompt_number": 2,
+       "text": [
+        "                 Date  Quarter 1  Quarter 2  Quarter 3  Quarter 4\n",
+        "0 2013-01-01 00:00:00        100         20         15         80\n",
+        "1 2014-01-01 00:00:00        200         30         20         90\n",
+        "2 2015-01-01 00:00:00        300         40         25        100\n",
+        "3 2016-01-01 00:00:00        400         50         30        110"
+       ]
+      }
+     ],
+     "prompt_number": 2
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "# How to add a column and sum horizontally\n",
+      "# How to add a column and compute the average\n",
+      "# How to add a column and compute the percentage of Total Sales\n",
+      "# How to sort by a column\n",
+      "# How to filter by a value\n",
+      "# How to create a column chart\n",
+      "# How to create a pivot table\n",
+      "# How to perform a vlookup\n",
+      "# How to perform an IF/THEN statement"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [],
+     "prompt_number": 3
+    },
+    {
+     "cell_type": "markdown",
+     "metadata": {},
+     "source": [
+      "# How to add a column and sum horizontally"
+     ]
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "# Make a copy of our test data\n",
+      "df = sample.copy(deep=True)\n",
+      "\n",
+      "df['Total Yearly Sales'] = df.sum(axis=1)\n",
+      "df"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "html": [
+        "<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n",
+        "<table border=\"1\" class=\"dataframe\">\n",
+        "  <thead>\n",
+        "    <tr style=\"text-align: right;\">\n",
+        "      <th></th>\n",
+        "      <th>Date</th>\n",
+        "      <th>Quarter 1</th>\n",
+        "      <th>Quarter 2</th>\n",
+        "      <th>Quarter 3</th>\n",
+        "      <th>Quarter 4</th>\n",
+        "      <th>Total Yearly Sales</th>\n",
+        "    </tr>\n",
+        "  </thead>\n",
+        "  <tbody>\n",
+        "    <tr>\n",
+        "      <th>0</th>\n",
+        "      <td>2013-01-01 00:00:00</td>\n",
+        "      <td> 100</td>\n",
+        "      <td> 20</td>\n",
+        "      <td> 15</td>\n",
+        "      <td>  80</td>\n",
+        "      <td> 215</td>\n",
+        "    </tr>\n",
+        "    <tr>\n",
+        "      <th>1</th>\n",
+        "      <td>2014-01-01 00:00:00</td>\n",
+        "      <td> 200</td>\n",
+        "      <td> 30</td>\n",
+        "      <td> 20</td>\n",
+        "      <td>  90</td>\n",
+        "      <td> 340</td>\n",
+        "    </tr>\n",
+        "    <tr>\n",
+        "      <th>2</th>\n",
+        "      <td>2015-01-01 00:00:00</td>\n",
+        "      <td> 300</td>\n",
+        "      <td> 40</td>\n",
+        "      <td> 25</td>\n",
+        "      <td> 100</td>\n",
+        "      <td> 465</td>\n",
+        "    </tr>\n",
+        "    <tr>\n",
+        "      <th>3</th>\n",
+        "      <td>2016-01-01 00:00:00</td>\n",
+        "      <td> 400</td>\n",
+        "      <td> 50</td>\n",
+        "      <td> 30</td>\n",
+        "      <td> 110</td>\n",
+        "      <td> 590</td>\n",
+        "    </tr>\n",
+        "  </tbody>\n",
+        "</table>\n",
+        "</div>"
+       ],
+       "metadata": {},
+       "output_type": "pyout",
+       "prompt_number": 4,
+       "text": [
+        "                 Date  Quarter 1  Quarter 2  Quarter 3  Quarter 4  \\\n",
+        "0 2013-01-01 00:00:00        100         20         15         80   \n",
+        "1 2014-01-01 00:00:00        200         30         20         90   \n",
+        "2 2015-01-01 00:00:00        300         40         25        100   \n",
+        "3 2016-01-01 00:00:00        400         50         30        110   \n",
+        "\n",
+        "   Total Yearly Sales  \n",
+        "0                 215  \n",
+        "1                 340  \n",
+        "2                 465  \n",
+        "3                 590  "
+       ]
+      }
+     ],
+     "prompt_number": 4
+    },
+    {
+     "cell_type": "markdown",
+     "metadata": {},
+     "source": [
+      "# How to add a column and compute the average"
+     ]
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "# Columns we are interested in\n",
+      "cols = ['Quarter 1','Quarter 2','Quarter 3','Quarter 4']\n",
+      "\n",
+      "df['Average'] = df[cols].mean(axis=1)\n",
+      "df"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "html": [
+        "<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n",
+        "<table border=\"1\" class=\"dataframe\">\n",
+        "  <thead>\n",
+        "    <tr style=\"text-align: right;\">\n",
+        "      <th></th>\n",
+        "      <th>Date</th>\n",
+        "      <th>Quarter 1</th>\n",
+        "      <th>Quarter 2</th>\n",
+        "      <th>Quarter 3</th>\n",
+        "      <th>Quarter 4</th>\n",
+        "      <th>Total Yearly Sales</th>\n",
+        "      <th>Average</th>\n",
+        "    </tr>\n",
+        "  </thead>\n",
+        "  <tbody>\n",
+        "    <tr>\n",
+        "      <th>0</th>\n",
+        "      <td>2013-01-01 00:00:00</td>\n",
+        "      <td> 100</td>\n",
+        "      <td> 20</td>\n",
+        "      <td> 15</td>\n",
+        "      <td>  80</td>\n",
+        "      <td> 215</td>\n",
+        "      <td>  53.75</td>\n",
+        "    </tr>\n",
+        "    <tr>\n",
+        "      <th>1</th>\n",
+        "      <td>2014-01-01 00:00:00</td>\n",
+        "      <td> 200</td>\n",
+        "      <td> 30</td>\n",
+        "      <td> 20</td>\n",
+        "      <td>  90</td>\n",
+        "      <td> 340</td>\n",
+        "      <td>  85.00</td>\n",
+        "    </tr>\n",
+        "    <tr>\n",
+        "      <th>2</th>\n",
+        "      <td>2015-01-01 00:00:00</td>\n",
+        "      <td> 300</td>\n",
+        "      <td> 40</td>\n",
+        "      <td> 25</td>\n",
+        "      <td> 100</td>\n",
+        "      <td> 465</td>\n",
+        "      <td> 116.25</td>\n",
+        "    </tr>\n",
+        "    <tr>\n",
+        "      <th>3</th>\n",
+        "      <td>2016-01-01 00:00:00</td>\n",
+        "      <td> 400</td>\n",
+        "      <td> 50</td>\n",
+        "      <td> 30</td>\n",
+        "      <td> 110</td>\n",
+        "      <td> 590</td>\n",
+        "      <td> 147.50</td>\n",
+        "    </tr>\n",
+        "  </tbody>\n",
+        "</table>\n",
+        "</div>"
+       ],
+       "metadata": {},
+       "output_type": "pyout",
+       "prompt_number": 5,
+       "text": [
+        "                 Date  Quarter 1  Quarter 2  Quarter 3  Quarter 4  \\\n",
+        "0 2013-01-01 00:00:00        100         20         15         80   \n",
+        "1 2014-01-01 00:00:00        200         30         20         90   \n",
+        "2 2015-01-01 00:00:00        300         40         25        100   \n",
+        "3 2016-01-01 00:00:00        400         50         30        110   \n",
+        "\n",
+        "   Total Yearly Sales  Average  \n",
+        "0                 215    53.75  \n",
+        "1                 340    85.00  \n",
+        "2                 465   116.25  \n",
+        "3                 590   147.50  "
+       ]
+      }
+     ],
+     "prompt_number": 5
+    },
+    {
+     "cell_type": "markdown",
+     "metadata": {},
+     "source": [
+      "# How to add a column and compute the percentage of Total Sales"
+     ]
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "TotalSales = df['Total Yearly Sales'].sum()\n",
+      "\n",
+      "df['Percentage of Sales'] = df['Total Yearly Sales'].apply(lambda x: 100.0*x/TotalSales)\n",
+      "df"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "html": [
+        "<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n",
+        "<table border=\"1\" class=\"dataframe\">\n",
+        "  <thead>\n",
+        "    <tr style=\"text-align: right;\">\n",
+        "      <th></th>\n",
+        "      <th>Date</th>\n",
+        "      <th>Quarter 1</th>\n",
+        "      <th>Quarter 2</th>\n",
+        "      <th>Quarter 3</th>\n",
+        "      <th>Quarter 4</th>\n",
+        "      <th>Total Yearly Sales</th>\n",
+        "      <th>Average</th>\n",
+        "      <th>Percentage of Sales</th>\n",
+        "    </tr>\n",
+        "  </thead>\n",
+        "  <tbody>\n",
+        "    <tr>\n",
+        "      <th>0</th>\n",
+        "      <td>2013-01-01 00:00:00</td>\n",
+        "      <td> 100</td>\n",
+        "      <td> 20</td>\n",
+        "      <td> 15</td>\n",
+        "      <td>  80</td>\n",
+        "      <td> 215</td>\n",
+        "      <td>  53.75</td>\n",
+        "      <td> 13.354037</td>\n",
+        "    </tr>\n",
+        "    <tr>\n",
+        "      <th>1</th>\n",
+        "      <td>2014-01-01 00:00:00</td>\n",
+        "      <td> 200</td>\n",
+        "      <td> 30</td>\n",
+        "      <td> 20</td>\n",
+        "      <td>  90</td>\n",
+        "      <td> 340</td>\n",
+        "      <td>  85.00</td>\n",
+        "      <td> 21.118012</td>\n",
+        "    </tr>\n",
+        "    <tr>\n",
+        "      <th>2</th>\n",
+        "      <td>2015-01-01 00:00:00</td>\n",
+        "      <td> 300</td>\n",
+        "      <td> 40</td>\n",
+        "      <td> 25</td>\n",
+        "      <td> 100</td>\n",
+        "      <td> 465</td>\n",
+        "      <td> 116.25</td>\n",
+        "      <td> 28.881988</td>\n",
+        "    </tr>\n",
+        "    <tr>\n",
+        "      <th>3</th>\n",
+        "      <td>2016-01-01 00:00:00</td>\n",
+        "      <td> 400</td>\n",
+        "      <td> 50</td>\n",
+        "      <td> 30</td>\n",
+        "      <td> 110</td>\n",
+        "      <td> 590</td>\n",
+        "      <td> 147.50</td>\n",
+        "      <td> 36.645963</td>\n",
+        "    </tr>\n",
+        "  </tbody>\n",
+        "</table>\n",
+        "</div>"
+       ],
+       "metadata": {},
+       "output_type": "pyout",
+       "prompt_number": 6,
+       "text": [
+        "                 Date  Quarter 1  Quarter 2  Quarter 3  Quarter 4  \\\n",
+        "0 2013-01-01 00:00:00        100         20         15         80   \n",
+        "1 2014-01-01 00:00:00        200         30         20         90   \n",
+        "2 2015-01-01 00:00:00        300         40         25        100   \n",
+        "3 2016-01-01 00:00:00        400         50         30        110   \n",
+        "\n",
+        "   Total Yearly Sales  Average  Percentage of Sales  \n",
+        "0                 215    53.75            13.354037  \n",
+        "1                 340    85.00            21.118012  \n",
+        "2                 465   116.25            28.881988  \n",
+        "3                 590   147.50            36.645963  "
+       ]
+      }
+     ],
+     "prompt_number": 6
+    },
+    {
+     "cell_type": "markdown",
+     "metadata": {},
+     "source": [
+      "# How to sort by a column"
+     ]
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "df.sort(columns = 'Quarter 1', ascending=False)"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "html": [
+        "<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n",
+        "<table border=\"1\" class=\"dataframe\">\n",
+        "  <thead>\n",
+        "    <tr style=\"text-align: right;\">\n",
+        "      <th></th>\n",
+        "      <th>Date</th>\n",
+        "      <th>Quarter 1</th>\n",
+        "      <th>Quarter 2</th>\n",
+        "      <th>Quarter 3</th>\n",
+        "      <th>Quarter 4</th>\n",
+        "      <th>Total Yearly Sales</th>\n",
+        "      <th>Average</th>\n",
+        "      <th>Percentage of Sales</th>\n",
+        "    </tr>\n",
+        "  </thead>\n",
+        "  <tbody>\n",
+        "    <tr>\n",
+        "      <th>3</th>\n",
+        "      <td>2016-01-01 00:00:00</td>\n",
+        "      <td> 400</td>\n",
+        "      <td> 50</td>\n",
+        "      <td> 30</td>\n",
+        "      <td> 110</td>\n",
+        "      <td> 590</td>\n",
+        "      <td> 147.50</td>\n",
+        "      <td> 36.645963</td>\n",
+        "    </tr>\n",
+        "    <tr>\n",
+        "      <th>2</th>\n",
+        "      <td>2015-01-01 00:00:00</td>\n",
+        "      <td> 300</td>\n",
+        "      <td> 40</td>\n",
+        "      <td> 25</td>\n",
+        "      <td> 100</td>\n",
+        "      <td> 465</td>\n",
+        "      <td> 116.25</td>\n",
+        "      <td> 28.881988</td>\n",
+        "    </tr>\n",
+        "    <tr>\n",
+        "      <th>1</th>\n",
+        "      <td>2014-01-01 00:00:00</td>\n",
+        "      <td> 200</td>\n",
+        "      <td> 30</td>\n",
+        "      <td> 20</td>\n",
+        "      <td>  90</td>\n",
+        "      <td> 340</td>\n",
+        "      <td>  85.00</td>\n",
+        "      <td> 21.118012</td>\n",
+        "    </tr>\n",
+        "    <tr>\n",
+        "      <th>0</th>\n",
+        "      <td>2013-01-01 00:00:00</td>\n",
+        "      <td> 100</td>\n",
+        "      <td> 20</td>\n",
+        "      <td> 15</td>\n",
+        "      <td>  80</td>\n",
+        "      <td> 215</td>\n",
+        "      <td>  53.75</td>\n",
+        "      <td> 13.354037</td>\n",
+        "    </tr>\n",
+        "  </tbody>\n",
+        "</table>\n",
+        "</div>"
+       ],
+       "metadata": {},
+       "output_type": "pyout",
+       "prompt_number": 7,
+       "text": [
+        "                 Date  Quarter 1  Quarter 2  Quarter 3  Quarter 4  \\\n",
+        "3 2016-01-01 00:00:00        400         50         30        110   \n",
+        "2 2015-01-01 00:00:00        300         40         25        100   \n",
+        "1 2014-01-01 00:00:00        200         30         20         90   \n",
+        "0 2013-01-01 00:00:00        100         20         15         80   \n",
+        "\n",
+        "   Total Yearly Sales  Average  Percentage of Sales  \n",
+        "3                 590   147.50            36.645963  \n",
+        "2                 465   116.25            28.881988  \n",
+        "1                 340    85.00            21.118012  \n",
+        "0                 215    53.75            13.354037  "
+       ]
+      }
+     ],
+     "prompt_number": 7
+    },
+    {
+     "cell_type": "markdown",
+     "metadata": {},
+     "source": [
+      "# How to filter by a value"
+     ]
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "mask = df['Average'] == 85\n",
+      "\n",
+      "# Filter where average is equal to 85\n",
+      "df[mask]"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "html": [
+        "<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n",
+        "<table border=\"1\" class=\"dataframe\">\n",
+        "  <thead>\n",
+        "    <tr style=\"text-align: right;\">\n",
+        "      <th></th>\n",
+        "      <th>Date</th>\n",
+        "      <th>Quarter 1</th>\n",
+        "      <th>Quarter 2</th>\n",
+        "      <th>Quarter 3</th>\n",
+        "      <th>Quarter 4</th>\n",
+        "      <th>Total Yearly Sales</th>\n",
+        "      <th>Average</th>\n",
+        "      <th>Percentage of Sales</th>\n",
+        "    </tr>\n",
+        "  </thead>\n",
+        "  <tbody>\n",
+        "    <tr>\n",
+        "      <th>1</th>\n",
+        "      <td>2014-01-01 00:00:00</td>\n",
+        "      <td> 200</td>\n",
+        "      <td> 30</td>\n",
+        "      <td> 20</td>\n",
+        "      <td> 90</td>\n",
+        "      <td> 340</td>\n",
+        "      <td> 85</td>\n",
+        "      <td> 21.118012</td>\n",
+        "    </tr>\n",
+        "  </tbody>\n",
+        "</table>\n",
+        "</div>"
+       ],
+       "metadata": {},
+       "output_type": "pyout",
+       "prompt_number": 8,
+       "text": [
+        "                 Date  Quarter 1  Quarter 2  Quarter 3  Quarter 4  \\\n",
+        "1 2014-01-01 00:00:00        200         30         20         90   \n",
+        "\n",
+        "   Total Yearly Sales  Average  Percentage of Sales  \n",
+        "1                 340       85            21.118012  "
+       ]
+      }
+     ],
+     "prompt_number": 8
+    },
+    {
+     "cell_type": "markdown",
+     "metadata": {},
+     "source": [
+      "# How to create a column chart"
+     ]
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "df[cols].plot(kind='bar');"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "metadata": {},
+       "output_type": "display_data",
+       "png": "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\n",
+       "text": [
+        "<matplotlib.figure.Figure at 0x8ec95c0>"
+       ]
+      }
+     ],
+     "prompt_number": 9
+    },
+    {
+     "cell_type": "markdown",
+     "metadata": {},
+     "source": [
+      "# How to create a pivot table"
+     ]
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "# Create dummy data for examples\n",
+      "sample2 = DataFrame(data = {'Date':[pd.datetime(2013,1,1), pd.datetime(2013,1,1), pd.datetime(2013,1,1), pd.datetime(2013,1,1)],\n",
+      "                            'Type':['A','A','B','B'],\n",
+      "                            'Amount':[80,90,100,110]})\n",
+      "\n",
+      "sample2"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "html": [
+        "<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n",
+        "<table border=\"1\" class=\"dataframe\">\n",
+        "  <thead>\n",
+        "    <tr style=\"text-align: right;\">\n",
+        "      <th></th>\n",
+        "      <th>Amount</th>\n",
+        "      <th>Date</th>\n",
+        "      <th>Type</th>\n",
+        "    </tr>\n",
+        "  </thead>\n",
+        "  <tbody>\n",
+        "    <tr>\n",
+        "      <th>0</th>\n",
+        "      <td>  80</td>\n",
+        "      <td>2013-01-01 00:00:00</td>\n",
+        "      <td> A</td>\n",
+        "    </tr>\n",
+        "    <tr>\n",
+        "      <th>1</th>\n",
+        "      <td>  90</td>\n",
+        "      <td>2013-01-01 00:00:00</td>\n",
+        "      <td> A</td>\n",
+        "    </tr>\n",
+        "    <tr>\n",
+        "      <th>2</th>\n",
+        "      <td> 100</td>\n",
+        "      <td>2013-01-01 00:00:00</td>\n",
+        "      <td> B</td>\n",
+        "    </tr>\n",
+        "    <tr>\n",
+        "      <th>3</th>\n",
+        "      <td> 110</td>\n",
+        "      <td>2013-01-01 00:00:00</td>\n",
+        "      <td> B</td>\n",
+        "    </tr>\n",
+        "  </tbody>\n",
+        "</table>\n",
+        "</div>"
+       ],
+       "metadata": {},
+       "output_type": "pyout",
+       "prompt_number": 10,
+       "text": [
+        "   Amount                Date Type\n",
+        "0      80 2013-01-01 00:00:00    A\n",
+        "1      90 2013-01-01 00:00:00    A\n",
+        "2     100 2013-01-01 00:00:00    B\n",
+        "3     110 2013-01-01 00:00:00    B"
+       ]
+      }
+     ],
+     "prompt_number": 10
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "# Make a copy of our test data\n",
+      "df2 = sample2.copy(deep=True)\n",
+      "\n",
+      "df2.pivot_table(values='Amount', rows='Date', cols='Type', aggfunc='sum')"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "html": [
+        "<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n",
+        "<table border=\"1\" class=\"dataframe\">\n",
+        "  <thead>\n",
+        "    <tr style=\"text-align: right;\">\n",
+        "      <th>Type</th>\n",
+        "      <th>A</th>\n",
+        "      <th>B</th>\n",
+        "    </tr>\n",
+        "    <tr>\n",
+        "      <th>Date</th>\n",
+        "      <th></th>\n",
+        "      <th></th>\n",
+        "    </tr>\n",
+        "  </thead>\n",
+        "  <tbody>\n",
+        "    <tr>\n",
+        "      <th>2013-01-01</th>\n",
+        "      <td> 170</td>\n",
+        "      <td> 210</td>\n",
+        "    </tr>\n",
+        "  </tbody>\n",
+        "</table>\n",
+        "</div>"
+       ],
+       "metadata": {},
+       "output_type": "pyout",
+       "prompt_number": 11,
+       "text": [
+        "Type          A    B\n",
+        "Date                \n",
+        "2013-01-01  170  210"
+       ]
+      }
+     ],
+     "prompt_number": 11
+    },
+    {
+     "cell_type": "markdown",
+     "metadata": {},
+     "source": [
+      "# How to perform a vlookup"
+     ]
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "# Create lookup table\n",
+      "tbl = pd.Series({'A':'letter A', \n",
+      "                 'B':'letter B'})\n",
+      "\n",
+      "\n",
+      "df2['Type'] = df2['Type'].map(tbl)\n",
+      "df2"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "html": [
+        "<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n",
+        "<table border=\"1\" class=\"dataframe\">\n",
+        "  <thead>\n",
+        "    <tr style=\"text-align: right;\">\n",
+        "      <th></th>\n",
+        "      <th>Amount</th>\n",
+        "      <th>Date</th>\n",
+        "      <th>Type</th>\n",
+        "    </tr>\n",
+        "  </thead>\n",
+        "  <tbody>\n",
+        "    <tr>\n",
+        "      <th>0</th>\n",
+        "      <td>  80</td>\n",
+        "      <td>2013-01-01 00:00:00</td>\n",
+        "      <td> letter A</td>\n",
+        "    </tr>\n",
+        "    <tr>\n",
+        "      <th>1</th>\n",
+        "      <td>  90</td>\n",
+        "      <td>2013-01-01 00:00:00</td>\n",
+        "      <td> letter A</td>\n",
+        "    </tr>\n",
+        "    <tr>\n",
+        "      <th>2</th>\n",
+        "      <td> 100</td>\n",
+        "      <td>2013-01-01 00:00:00</td>\n",
+        "      <td> letter B</td>\n",
+        "    </tr>\n",
+        "    <tr>\n",
+        "      <th>3</th>\n",
+        "      <td> 110</td>\n",
+        "      <td>2013-01-01 00:00:00</td>\n",
+        "      <td> letter B</td>\n",
+        "    </tr>\n",
+        "  </tbody>\n",
+        "</table>\n",
+        "</div>"
+       ],
+       "metadata": {},
+       "output_type": "pyout",
+       "prompt_number": 12,
+       "text": [
+        "   Amount                Date      Type\n",
+        "0      80 2013-01-01 00:00:00  letter A\n",
+        "1      90 2013-01-01 00:00:00  letter A\n",
+        "2     100 2013-01-01 00:00:00  letter B\n",
+        "3     110 2013-01-01 00:00:00  letter B"
+       ]
+      }
+     ],
+     "prompt_number": 12
+    },
+    {
+     "cell_type": "markdown",
+     "metadata": {},
+     "source": [
+      "# How to perform an IF/THEN statement"
+     ]
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "# =If(Amount >= 100, \"yes\", \"no\")\n",
+      "df2['yes/no'] = df2['Amount'].apply(lambda x: 'yes' if x >= 100 else 'no')\n",
+      "df2"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "html": [
+        "<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n",
+        "<table border=\"1\" class=\"dataframe\">\n",
+        "  <thead>\n",
+        "    <tr style=\"text-align: right;\">\n",
+        "      <th></th>\n",
+        "      <th>Amount</th>\n",
+        "      <th>Date</th>\n",
+        "      <th>Type</th>\n",
+        "      <th>yes/no</th>\n",
+        "    </tr>\n",
+        "  </thead>\n",
+        "  <tbody>\n",
+        "    <tr>\n",
+        "      <th>0</th>\n",
+        "      <td>  80</td>\n",
+        "      <td>2013-01-01 00:00:00</td>\n",
+        "      <td> letter A</td>\n",
+        "      <td>  no</td>\n",
+        "    </tr>\n",
+        "    <tr>\n",
+        "      <th>1</th>\n",
+        "      <td>  90</td>\n",
+        "      <td>2013-01-01 00:00:00</td>\n",
+        "      <td> letter A</td>\n",
+        "      <td>  no</td>\n",
+        "    </tr>\n",
+        "    <tr>\n",
+        "      <th>2</th>\n",
+        "      <td> 100</td>\n",
+        "      <td>2013-01-01 00:00:00</td>\n",
+        "      <td> letter B</td>\n",
+        "      <td> yes</td>\n",
+        "    </tr>\n",
+        "    <tr>\n",
+        "      <th>3</th>\n",
+        "      <td> 110</td>\n",
+        "      <td>2013-01-01 00:00:00</td>\n",
+        "      <td> letter B</td>\n",
+        "      <td> yes</td>\n",
+        "    </tr>\n",
+        "  </tbody>\n",
+        "</table>\n",
+        "</div>"
+       ],
+       "metadata": {},
+       "output_type": "pyout",
+       "prompt_number": 13,
+       "text": [
+        "   Amount                Date      Type yes/no\n",
+        "0      80 2013-01-01 00:00:00  letter A     no\n",
+        "1      90 2013-01-01 00:00:00  letter A     no\n",
+        "2     100 2013-01-01 00:00:00  letter B    yes\n",
+        "3     110 2013-01-01 00:00:00  letter B    yes"
+       ]
+      }
+     ],
+     "prompt_number": 13
+    },
+    {
+     "cell_type": "markdown",
+     "metadata": {},
+     "source": [
+      "**Author:** [David Rojas LLC](http://hdrojas.pythonanywhere.com/)  "
+     ]
+    }
+   ],
+   "metadata": {}
+  }
+ ]
+}