Skip to content

Instantly share code, notes, and snippets.

@mattharrison
Last active February 14, 2024 20:58
Show Gist options
  • Save mattharrison/ddbd73c13ad0e76ec638311c669bc96b to your computer and use it in GitHub Desktop.
Save mattharrison/ddbd73c13ad0e76ec638311c669bc96b to your computer and use it in GitHub Desktop.
Idiomatic Pandas: 5 tips for better pandas code
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Idiomatic Pandas\n",
"## 5 Tips for Better Pandas Code"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## About Matt Harrison @\\_\\_mharrison\\_\\_\n",
"\n",
"* Author of Pandas 1.x Cookbook, Machine Learning Pocket Reference, and Learning the Pandas Library.\n",
"* Corporate trainer at MetaSnake. Taught Pandas to 1000's of students."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<img src=\"https://d31ezp3r8jwmks.cloudfront.net/bqr8mz52iamflifihoc7086xc79c\"/>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Practice this on your data!\n",
"* 4 two hour sessions\n",
"* Coming soon!\n",
"* Follow on Twitter @\\_\\_mharrison\\_\\_"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Outline\n",
"\n",
"* Load Data\n",
"* Types\n",
"* Chaining\n",
"* Mutation\n",
"* Apply\n",
"* Aggregation"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Data"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"lines_to_next_cell": 2
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"from IPython.display import display\n",
"import numpy as np\n",
"import pandas as pd"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'1.3.2'"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.__version__"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"pd.options.display.min_rows = 20"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/matt/envs/menv/lib/python3.8/site-packages/IPython/core/interactiveshell.py:3418: DtypeWarning: Columns (68,70,71,72,73,74,76,79) have mixed types.Specify dtype option on import or set low_memory=False.\n",
" exec(code_obj, self.user_global_ns, self.user_ns)\n"
]
}
],
"source": [
"autos = pd.read_csv('https://github.com/mattharrison/datasets/raw/master/data/vehicles.csv.zip')"
]
},
{
"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>barrels08</th>\n",
" <th>barrelsA08</th>\n",
" <th>charge120</th>\n",
" <th>charge240</th>\n",
" <th>city08</th>\n",
" <th>city08U</th>\n",
" <th>cityA08</th>\n",
" <th>cityA08U</th>\n",
" <th>cityCD</th>\n",
" <th>cityE</th>\n",
" <th>...</th>\n",
" <th>mfrCode</th>\n",
" <th>c240Dscr</th>\n",
" <th>charge240b</th>\n",
" <th>c240bDscr</th>\n",
" <th>createdOn</th>\n",
" <th>modifiedOn</th>\n",
" <th>startStop</th>\n",
" <th>phevCity</th>\n",
" <th>phevHwy</th>\n",
" <th>phevComb</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>15.695714</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>19</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0.0</td>\n",
" <td>NaN</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>29.964545</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>9</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0.0</td>\n",
" <td>NaN</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>12.207778</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>23</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0.0</td>\n",
" <td>NaN</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>29.964545</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>10</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0.0</td>\n",
" <td>NaN</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>17.347895</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>17</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0.0</td>\n",
" <td>NaN</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>14.982273</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>21</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0.0</td>\n",
" <td>NaN</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>13.184400</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>22</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0.0</td>\n",
" <td>NaN</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>13.733750</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>23</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0.0</td>\n",
" <td>NaN</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>12.677308</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>23</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0.0</td>\n",
" <td>NaN</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>13.184400</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>23</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0.0</td>\n",
" <td>NaN</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41134</th>\n",
" <td>16.480500</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>18</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0.0</td>\n",
" <td>NaN</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41135</th>\n",
" <td>12.677308</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>23</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0.0</td>\n",
" <td>NaN</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41136</th>\n",
" <td>13.733750</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>21</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0.0</td>\n",
" <td>NaN</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41137</th>\n",
" <td>11.771786</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>24</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0.0</td>\n",
" <td>NaN</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41138</th>\n",
" <td>13.184400</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>21</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0.0</td>\n",
" <td>NaN</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41139</th>\n",
" <td>14.982273</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>19</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0.0</td>\n",
" <td>NaN</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41140</th>\n",
" <td>14.330870</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>20</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0.0</td>\n",
" <td>NaN</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41141</th>\n",
" <td>15.695714</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>18</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0.0</td>\n",
" <td>NaN</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41142</th>\n",
" <td>15.695714</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>18</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0.0</td>\n",
" <td>NaN</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41143</th>\n",
" <td>18.311667</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>16</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0.0</td>\n",
" <td>NaN</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>41144 rows × 83 columns</p>\n",
"</div>"
],
"text/plain": [
" barrels08 barrelsA08 charge120 charge240 city08 city08U cityA08 \\\n",
"0 15.695714 0.0 0.0 0.0 19 0.0 0 \n",
"1 29.964545 0.0 0.0 0.0 9 0.0 0 \n",
"2 12.207778 0.0 0.0 0.0 23 0.0 0 \n",
"3 29.964545 0.0 0.0 0.0 10 0.0 0 \n",
"4 17.347895 0.0 0.0 0.0 17 0.0 0 \n",
"5 14.982273 0.0 0.0 0.0 21 0.0 0 \n",
"6 13.184400 0.0 0.0 0.0 22 0.0 0 \n",
"7 13.733750 0.0 0.0 0.0 23 0.0 0 \n",
"8 12.677308 0.0 0.0 0.0 23 0.0 0 \n",
"9 13.184400 0.0 0.0 0.0 23 0.0 0 \n",
"... ... ... ... ... ... ... ... \n",
"41134 16.480500 0.0 0.0 0.0 18 0.0 0 \n",
"41135 12.677308 0.0 0.0 0.0 23 0.0 0 \n",
"41136 13.733750 0.0 0.0 0.0 21 0.0 0 \n",
"41137 11.771786 0.0 0.0 0.0 24 0.0 0 \n",
"41138 13.184400 0.0 0.0 0.0 21 0.0 0 \n",
"41139 14.982273 0.0 0.0 0.0 19 0.0 0 \n",
"41140 14.330870 0.0 0.0 0.0 20 0.0 0 \n",
"41141 15.695714 0.0 0.0 0.0 18 0.0 0 \n",
"41142 15.695714 0.0 0.0 0.0 18 0.0 0 \n",
"41143 18.311667 0.0 0.0 0.0 16 0.0 0 \n",
"\n",
" cityA08U cityCD cityE ... mfrCode c240Dscr charge240b c240bDscr \\\n",
"0 0.0 0.0 0.0 ... NaN NaN 0.0 NaN \n",
"1 0.0 0.0 0.0 ... NaN NaN 0.0 NaN \n",
"2 0.0 0.0 0.0 ... NaN NaN 0.0 NaN \n",
"3 0.0 0.0 0.0 ... NaN NaN 0.0 NaN \n",
"4 0.0 0.0 0.0 ... NaN NaN 0.0 NaN \n",
"5 0.0 0.0 0.0 ... NaN NaN 0.0 NaN \n",
"6 0.0 0.0 0.0 ... NaN NaN 0.0 NaN \n",
"7 0.0 0.0 0.0 ... NaN NaN 0.0 NaN \n",
"8 0.0 0.0 0.0 ... NaN NaN 0.0 NaN \n",
"9 0.0 0.0 0.0 ... NaN NaN 0.0 NaN \n",
"... ... ... ... ... ... ... ... ... \n",
"41134 0.0 0.0 0.0 ... NaN NaN 0.0 NaN \n",
"41135 0.0 0.0 0.0 ... NaN NaN 0.0 NaN \n",
"41136 0.0 0.0 0.0 ... NaN NaN 0.0 NaN \n",
"41137 0.0 0.0 0.0 ... NaN NaN 0.0 NaN \n",
"41138 0.0 0.0 0.0 ... NaN NaN 0.0 NaN \n",
"41139 0.0 0.0 0.0 ... NaN NaN 0.0 NaN \n",
"41140 0.0 0.0 0.0 ... NaN NaN 0.0 NaN \n",
"41141 0.0 0.0 0.0 ... NaN NaN 0.0 NaN \n",
"41142 0.0 0.0 0.0 ... NaN NaN 0.0 NaN \n",
"41143 0.0 0.0 0.0 ... NaN NaN 0.0 NaN \n",
"\n",
" createdOn modifiedOn startStop \\\n",
"0 Tue Jan 01 00:00:00 EST 2013 Tue Jan 01 00:00:00 EST 2013 NaN \n",
"1 Tue Jan 01 00:00:00 EST 2013 Tue Jan 01 00:00:00 EST 2013 NaN \n",
"2 Tue Jan 01 00:00:00 EST 2013 Tue Jan 01 00:00:00 EST 2013 NaN \n",
"3 Tue Jan 01 00:00:00 EST 2013 Tue Jan 01 00:00:00 EST 2013 NaN \n",
"4 Tue Jan 01 00:00:00 EST 2013 Tue Jan 01 00:00:00 EST 2013 NaN \n",
"5 Tue Jan 01 00:00:00 EST 2013 Tue Jan 01 00:00:00 EST 2013 NaN \n",
"6 Tue Jan 01 00:00:00 EST 2013 Tue Jan 01 00:00:00 EST 2013 NaN \n",
"7 Tue Jan 01 00:00:00 EST 2013 Tue Jan 01 00:00:00 EST 2013 NaN \n",
"8 Tue Jan 01 00:00:00 EST 2013 Tue Jan 01 00:00:00 EST 2013 NaN \n",
"9 Tue Jan 01 00:00:00 EST 2013 Tue Jan 01 00:00:00 EST 2013 NaN \n",
"... ... ... ... \n",
"41134 Tue Jan 01 00:00:00 EST 2013 Tue Jan 01 00:00:00 EST 2013 NaN \n",
"41135 Tue Jan 01 00:00:00 EST 2013 Tue Jan 01 00:00:00 EST 2013 NaN \n",
"41136 Tue Jan 01 00:00:00 EST 2013 Tue Jan 01 00:00:00 EST 2013 NaN \n",
"41137 Tue Jan 01 00:00:00 EST 2013 Tue Jan 01 00:00:00 EST 2013 NaN \n",
"41138 Tue Jan 01 00:00:00 EST 2013 Tue Jan 01 00:00:00 EST 2013 NaN \n",
"41139 Tue Jan 01 00:00:00 EST 2013 Tue Jan 01 00:00:00 EST 2013 NaN \n",
"41140 Tue Jan 01 00:00:00 EST 2013 Tue Jan 01 00:00:00 EST 2013 NaN \n",
"41141 Tue Jan 01 00:00:00 EST 2013 Tue Jan 01 00:00:00 EST 2013 NaN \n",
"41142 Tue Jan 01 00:00:00 EST 2013 Tue Jan 01 00:00:00 EST 2013 NaN \n",
"41143 Tue Jan 01 00:00:00 EST 2013 Tue Jan 01 00:00:00 EST 2013 NaN \n",
"\n",
" phevCity phevHwy phevComb \n",
"0 0 0 0 \n",
"1 0 0 0 \n",
"2 0 0 0 \n",
"3 0 0 0 \n",
"4 0 0 0 \n",
"5 0 0 0 \n",
"6 0 0 0 \n",
"7 0 0 0 \n",
"8 0 0 0 \n",
"9 0 0 0 \n",
"... ... ... ... \n",
"41134 0 0 0 \n",
"41135 0 0 0 \n",
"41136 0 0 0 \n",
"41137 0 0 0 \n",
"41138 0 0 0 \n",
"41139 0 0 0 \n",
"41140 0 0 0 \n",
"41141 0 0 0 \n",
"41142 0 0 0 \n",
"41143 0 0 0 \n",
"\n",
"[41144 rows x 83 columns]"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"autos"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['barrels08', 'barrelsA08', 'charge120', 'charge240', 'city08',\n",
" 'city08U', 'cityA08', 'cityA08U', 'cityCD', 'cityE', 'cityUF', 'co2',\n",
" 'co2A', 'co2TailpipeAGpm', 'co2TailpipeGpm', 'comb08', 'comb08U',\n",
" 'combA08', 'combA08U', 'combE', 'combinedCD', 'combinedUF', 'cylinders',\n",
" 'displ', 'drive', 'engId', 'eng_dscr', 'feScore', 'fuelCost08',\n",
" 'fuelCostA08', 'fuelType', 'fuelType1', 'ghgScore', 'ghgScoreA',\n",
" 'highway08', 'highway08U', 'highwayA08', 'highwayA08U', 'highwayCD',\n",
" 'highwayE', 'highwayUF', 'hlv', 'hpv', 'id', 'lv2', 'lv4', 'make',\n",
" 'model', 'mpgData', 'phevBlended', 'pv2', 'pv4', 'range', 'rangeCity',\n",
" 'rangeCityA', 'rangeHwy', 'rangeHwyA', 'trany', 'UCity', 'UCityA',\n",
" 'UHighway', 'UHighwayA', 'VClass', 'year', 'youSaveSpend', 'guzzler',\n",
" 'trans_dscr', 'tCharger', 'sCharger', 'atvType', 'fuelType2', 'rangeA',\n",
" 'evMotor', 'mfrCode', 'c240Dscr', 'charge240b', 'c240bDscr',\n",
" 'createdOn', 'modifiedOn', 'startStop', 'phevCity', 'phevHwy',\n",
" 'phevComb'],\n",
" dtype='object')"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"autos.columns"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Types\n",
"Getting the right types will enable analysis and correctness."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"cols = ['city08', 'comb08', 'highway08', 'cylinders', 'displ', 'drive', 'eng_dscr', \n",
" 'fuelCost08', 'make', 'model', 'trany', 'range', 'createdOn', 'year']"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"city08 int64\n",
"comb08 int64\n",
"highway08 int64\n",
"cylinders float64\n",
"displ float64\n",
"drive object\n",
"eng_dscr object\n",
"fuelCost08 int64\n",
"make object\n",
"model object\n",
"trany object\n",
"range int64\n",
"createdOn object\n",
"year int64\n",
"dtype: object"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"autos[cols].dtypes"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index 128\n",
"city08 329152\n",
"comb08 329152\n",
"highway08 329152\n",
"cylinders 329152\n",
"displ 329152\n",
"drive 3028369\n",
"eng_dscr 2135693\n",
"fuelCost08 329152\n",
"make 2606267\n",
"model 2813134\n",
"trany 2933276\n",
"range 329152\n",
"createdOn 3497240\n",
"year 329152\n",
"dtype: int64"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"autos[cols].memory_usage(deep=True)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"19647323"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"autos[cols].memory_usage(deep=True).sum()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Ints"
]
},
{
"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>city08</th>\n",
" <th>comb08</th>\n",
" <th>highway08</th>\n",
" <th>fuelCost08</th>\n",
" <th>range</th>\n",
" <th>year</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>18.369045</td>\n",
" <td>20.616396</td>\n",
" <td>24.504667</td>\n",
" <td>2362.335942</td>\n",
" <td>0.793506</td>\n",
" <td>2001.535266</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>7.905886</td>\n",
" <td>7.674535</td>\n",
" <td>7.730364</td>\n",
" <td>654.981925</td>\n",
" <td>13.041592</td>\n",
" <td>11.142414</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>6.000000</td>\n",
" <td>7.000000</td>\n",
" <td>9.000000</td>\n",
" <td>500.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1984.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>15.000000</td>\n",
" <td>17.000000</td>\n",
" <td>20.000000</td>\n",
" <td>1900.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1991.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>17.000000</td>\n",
" <td>20.000000</td>\n",
" <td>24.000000</td>\n",
" <td>2350.000000</td>\n",
" <td>0.000000</td>\n",
" <td>2002.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>20.000000</td>\n",
" <td>23.000000</td>\n",
" <td>28.000000</td>\n",
" <td>2700.000000</td>\n",
" <td>0.000000</td>\n",
" <td>2011.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>150.000000</td>\n",
" <td>136.000000</td>\n",
" <td>124.000000</td>\n",
" <td>7400.000000</td>\n",
" <td>370.000000</td>\n",
" <td>2020.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" city08 comb08 highway08 fuelCost08 range \\\n",
"count 41144.000000 41144.000000 41144.000000 41144.000000 41144.000000 \n",
"mean 18.369045 20.616396 24.504667 2362.335942 0.793506 \n",
"std 7.905886 7.674535 7.730364 654.981925 13.041592 \n",
"min 6.000000 7.000000 9.000000 500.000000 0.000000 \n",
"25% 15.000000 17.000000 20.000000 1900.000000 0.000000 \n",
"50% 17.000000 20.000000 24.000000 2350.000000 0.000000 \n",
"75% 20.000000 23.000000 28.000000 2700.000000 0.000000 \n",
"max 150.000000 136.000000 124.000000 7400.000000 370.000000 \n",
"\n",
" year \n",
"count 41144.000000 \n",
"mean 2001.535266 \n",
"std 11.142414 \n",
"min 1984.000000 \n",
"25% 1991.000000 \n",
"50% 2002.000000 \n",
"75% 2011.000000 \n",
"max 2020.000000 "
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"autos[cols].select_dtypes(int).describe()"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"scrolled": true
},
"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>city08</th>\n",
" <th>comb08</th>\n",
" <th>highway08</th>\n",
" <th>fuelCost08</th>\n",
" <th>range</th>\n",
" <th>year</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>18.369045</td>\n",
" <td>20.616396</td>\n",
" <td>24.504667</td>\n",
" <td>2362.335942</td>\n",
" <td>0.793506</td>\n",
" <td>2001.535266</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>7.905886</td>\n",
" <td>7.674535</td>\n",
" <td>7.730364</td>\n",
" <td>654.981925</td>\n",
" <td>13.041592</td>\n",
" <td>11.142414</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>6.000000</td>\n",
" <td>7.000000</td>\n",
" <td>9.000000</td>\n",
" <td>500.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1984.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>15.000000</td>\n",
" <td>17.000000</td>\n",
" <td>20.000000</td>\n",
" <td>1900.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1991.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>17.000000</td>\n",
" <td>20.000000</td>\n",
" <td>24.000000</td>\n",
" <td>2350.000000</td>\n",
" <td>0.000000</td>\n",
" <td>2002.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>20.000000</td>\n",
" <td>23.000000</td>\n",
" <td>28.000000</td>\n",
" <td>2700.000000</td>\n",
" <td>0.000000</td>\n",
" <td>2011.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>150.000000</td>\n",
" <td>136.000000</td>\n",
" <td>124.000000</td>\n",
" <td>7400.000000</td>\n",
" <td>370.000000</td>\n",
" <td>2020.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" city08 comb08 highway08 fuelCost08 range \\\n",
"count 41144.000000 41144.000000 41144.000000 41144.000000 41144.000000 \n",
"mean 18.369045 20.616396 24.504667 2362.335942 0.793506 \n",
"std 7.905886 7.674535 7.730364 654.981925 13.041592 \n",
"min 6.000000 7.000000 9.000000 500.000000 0.000000 \n",
"25% 15.000000 17.000000 20.000000 1900.000000 0.000000 \n",
"50% 17.000000 20.000000 24.000000 2350.000000 0.000000 \n",
"75% 20.000000 23.000000 28.000000 2700.000000 0.000000 \n",
"max 150.000000 136.000000 124.000000 7400.000000 370.000000 \n",
"\n",
" year \n",
"count 41144.000000 \n",
"mean 2001.535266 \n",
"std 11.142414 \n",
"min 1984.000000 \n",
"25% 1991.000000 \n",
"50% 2002.000000 \n",
"75% 2011.000000 \n",
"max 2020.000000 "
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# chaining\n",
"(autos\n",
" [cols]\n",
" .select_dtypes(int)\n",
" .describe()\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"iinfo(min=-128, max=127, dtype=int8)"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# can comb08 be and int8?\n",
"np.iinfo(np.int8)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"iinfo(min=-32768, max=32767, dtype=int16)"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.iinfo(np.int16)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"scrolled": true
},
"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>highway08</th>\n",
" <th>fuelCost08</th>\n",
" <th>range</th>\n",
" <th>year</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>24.504667</td>\n",
" <td>2362.335942</td>\n",
" <td>0.793506</td>\n",
" <td>2001.535266</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>7.730364</td>\n",
" <td>654.981925</td>\n",
" <td>13.041592</td>\n",
" <td>11.142414</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>9.000000</td>\n",
" <td>500.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1984.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>20.000000</td>\n",
" <td>1900.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1991.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>24.000000</td>\n",
" <td>2350.000000</td>\n",
" <td>0.000000</td>\n",
" <td>2002.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>28.000000</td>\n",
" <td>2700.000000</td>\n",
" <td>0.000000</td>\n",
" <td>2011.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>124.000000</td>\n",
" <td>7400.000000</td>\n",
" <td>370.000000</td>\n",
" <td>2020.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" highway08 fuelCost08 range year\n",
"count 41144.000000 41144.000000 41144.000000 41144.000000\n",
"mean 24.504667 2362.335942 0.793506 2001.535266\n",
"std 7.730364 654.981925 13.041592 11.142414\n",
"min 9.000000 500.000000 0.000000 1984.000000\n",
"25% 20.000000 1900.000000 0.000000 1991.000000\n",
"50% 24.000000 2350.000000 0.000000 2002.000000\n",
"75% 28.000000 2700.000000 0.000000 2011.000000\n",
"max 124.000000 7400.000000 370.000000 2020.000000"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# chaining\n",
"(autos\n",
" [cols]\n",
" .astype({'highway08': 'int8', 'city08': 'int16', 'comb08': 'int16' })\n",
" .select_dtypes([int, 'int8'])\n",
" .describe()\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"scrolled": true
},
"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>city08</th>\n",
" <th>comb08</th>\n",
" <th>highway08</th>\n",
" <th>fuelCost08</th>\n",
" <th>range</th>\n",
" <th>year</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>18.369045</td>\n",
" <td>20.616396</td>\n",
" <td>24.504667</td>\n",
" <td>2362.335942</td>\n",
" <td>0.793506</td>\n",
" <td>2001.535266</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>7.905886</td>\n",
" <td>7.674535</td>\n",
" <td>7.730364</td>\n",
" <td>654.981925</td>\n",
" <td>13.041592</td>\n",
" <td>11.142414</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>6.000000</td>\n",
" <td>7.000000</td>\n",
" <td>9.000000</td>\n",
" <td>500.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1984.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>15.000000</td>\n",
" <td>17.000000</td>\n",
" <td>20.000000</td>\n",
" <td>1900.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1991.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>17.000000</td>\n",
" <td>20.000000</td>\n",
" <td>24.000000</td>\n",
" <td>2350.000000</td>\n",
" <td>0.000000</td>\n",
" <td>2002.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>20.000000</td>\n",
" <td>23.000000</td>\n",
" <td>28.000000</td>\n",
" <td>2700.000000</td>\n",
" <td>0.000000</td>\n",
" <td>2011.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>150.000000</td>\n",
" <td>136.000000</td>\n",
" <td>124.000000</td>\n",
" <td>7400.000000</td>\n",
" <td>370.000000</td>\n",
" <td>2020.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" city08 comb08 highway08 fuelCost08 range \\\n",
"count 41144.000000 41144.000000 41144.000000 41144.000000 41144.000000 \n",
"mean 18.369045 20.616396 24.504667 2362.335942 0.793506 \n",
"std 7.905886 7.674535 7.730364 654.981925 13.041592 \n",
"min 6.000000 7.000000 9.000000 500.000000 0.000000 \n",
"25% 15.000000 17.000000 20.000000 1900.000000 0.000000 \n",
"50% 17.000000 20.000000 24.000000 2350.000000 0.000000 \n",
"75% 20.000000 23.000000 28.000000 2700.000000 0.000000 \n",
"max 150.000000 136.000000 124.000000 7400.000000 370.000000 \n",
"\n",
" year \n",
"count 41144.000000 \n",
"mean 2001.535266 \n",
"std 11.142414 \n",
"min 1984.000000 \n",
"25% 1991.000000 \n",
"50% 2002.000000 \n",
"75% 2011.000000 \n",
"max 2020.000000 "
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# chaining\n",
"# use 'integer' so see all int-like columns\n",
"(autos\n",
" [cols]\n",
" .astype({'highway08': 'int8', 'city08': 'int16', 'comb08': 'int16', 'fuelCost08': 'int16', \n",
" 'range': 'int16', 'year': 'int16'})\n",
" .select_dtypes(['integer']) # see https://numpy.org/doc/stable/reference/arrays.scalars.html\n",
" .describe()\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"18124995"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# chaining\n",
"(autos\n",
" [cols]\n",
" .astype({'highway08': 'int8', 'city08': 'int16', 'comb08': 'int16', 'fuelCost08': 'int16', \n",
" 'range': 'int16', 'year': 'int16'})\n",
" .memory_usage(deep=True)\n",
" .sum() # was 19,647,323\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Floats"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"scrolled": true
},
"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>cylinders</th>\n",
" <th>displ</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>4.0</td>\n",
" <td>2.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>12.0</td>\n",
" <td>4.9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>4.0</td>\n",
" <td>2.2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>8.0</td>\n",
" <td>5.2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>4.0</td>\n",
" <td>2.2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>4.0</td>\n",
" <td>1.8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>4.0</td>\n",
" <td>1.8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>4.0</td>\n",
" <td>1.6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>4.0</td>\n",
" <td>1.6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>4.0</td>\n",
" <td>1.8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41134</th>\n",
" <td>4.0</td>\n",
" <td>2.1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41135</th>\n",
" <td>4.0</td>\n",
" <td>1.9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41136</th>\n",
" <td>4.0</td>\n",
" <td>1.9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41137</th>\n",
" <td>4.0</td>\n",
" <td>1.9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41138</th>\n",
" <td>4.0</td>\n",
" <td>1.9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41139</th>\n",
" <td>4.0</td>\n",
" <td>2.2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41140</th>\n",
" <td>4.0</td>\n",
" <td>2.2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41141</th>\n",
" <td>4.0</td>\n",
" <td>2.2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41142</th>\n",
" <td>4.0</td>\n",
" <td>2.2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41143</th>\n",
" <td>4.0</td>\n",
" <td>2.2</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>41144 rows × 2 columns</p>\n",
"</div>"
],
"text/plain": [
" cylinders displ\n",
"0 4.0 2.0\n",
"1 12.0 4.9\n",
"2 4.0 2.2\n",
"3 8.0 5.2\n",
"4 4.0 2.2\n",
"5 4.0 1.8\n",
"6 4.0 1.8\n",
"7 4.0 1.6\n",
"8 4.0 1.6\n",
"9 4.0 1.8\n",
"... ... ...\n",
"41134 4.0 2.1\n",
"41135 4.0 1.9\n",
"41136 4.0 1.9\n",
"41137 4.0 1.9\n",
"41138 4.0 1.9\n",
"41139 4.0 2.2\n",
"41140 4.0 2.2\n",
"41141 4.0 2.2\n",
"41142 4.0 2.2\n",
"41143 4.0 2.2\n",
"\n",
"[41144 rows x 2 columns]"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(autos\n",
"[cols]\n",
".select_dtypes('float'))"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"count 40938.000000\n",
"mean 5.717084\n",
"std 1.755517\n",
"min 2.000000\n",
"25% 4.000000\n",
"50% 6.000000\n",
"75% 6.000000\n",
"max 16.000000\n",
"Name: cylinders, dtype: float64"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# surprise! cylinders looks int-like\n",
"autos.cylinders.describe()"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"4.0 15938\n",
"6.0 14284\n",
"8.0 8801\n",
"5.0 771\n",
"12.0 626\n",
"3.0 279\n",
"NaN 206\n",
"10.0 170\n",
"2.0 59\n",
"16.0 10\n",
"Name: cylinders, dtype: int64"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# opps! missing values\n",
"autos.cylinders.value_counts(dropna=False)"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"scrolled": true
},
"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>city08</th>\n",
" <th>comb08</th>\n",
" <th>highway08</th>\n",
" <th>cylinders</th>\n",
" <th>displ</th>\n",
" <th>drive</th>\n",
" <th>eng_dscr</th>\n",
" <th>fuelCost08</th>\n",
" <th>make</th>\n",
" <th>model</th>\n",
" <th>trany</th>\n",
" <th>range</th>\n",
" <th>createdOn</th>\n",
" <th>year</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>7138</th>\n",
" <td>81</td>\n",
" <td>85</td>\n",
" <td>91</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>800</td>\n",
" <td>Nissan</td>\n",
" <td>Altra EV</td>\n",
" <td>NaN</td>\n",
" <td>90</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>2000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7139</th>\n",
" <td>81</td>\n",
" <td>72</td>\n",
" <td>64</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>2-Wheel Drive</td>\n",
" <td>NaN</td>\n",
" <td>900</td>\n",
" <td>Toyota</td>\n",
" <td>RAV4 EV</td>\n",
" <td>NaN</td>\n",
" <td>88</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>2000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8143</th>\n",
" <td>81</td>\n",
" <td>72</td>\n",
" <td>64</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>2-Wheel Drive</td>\n",
" <td>NaN</td>\n",
" <td>900</td>\n",
" <td>Toyota</td>\n",
" <td>RAV4 EV</td>\n",
" <td>NaN</td>\n",
" <td>88</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>2001</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8144</th>\n",
" <td>74</td>\n",
" <td>65</td>\n",
" <td>58</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>1000</td>\n",
" <td>Ford</td>\n",
" <td>Th!nk</td>\n",
" <td>NaN</td>\n",
" <td>29</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>2001</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8146</th>\n",
" <td>45</td>\n",
" <td>39</td>\n",
" <td>33</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>2-Wheel Drive</td>\n",
" <td>NaN</td>\n",
" <td>1700</td>\n",
" <td>Ford</td>\n",
" <td>Explorer USPS Electric</td>\n",
" <td>NaN</td>\n",
" <td>38</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>2001</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8147</th>\n",
" <td>84</td>\n",
" <td>75</td>\n",
" <td>66</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>900</td>\n",
" <td>Nissan</td>\n",
" <td>Hyper-Mini</td>\n",
" <td>NaN</td>\n",
" <td>33</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>2001</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9212</th>\n",
" <td>87</td>\n",
" <td>78</td>\n",
" <td>69</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>2-Wheel Drive</td>\n",
" <td>NaN</td>\n",
" <td>850</td>\n",
" <td>Toyota</td>\n",
" <td>RAV4 EV</td>\n",
" <td>NaN</td>\n",
" <td>95</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>2002</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9213</th>\n",
" <td>45</td>\n",
" <td>39</td>\n",
" <td>33</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>2-Wheel Drive</td>\n",
" <td>NaN</td>\n",
" <td>1700</td>\n",
" <td>Ford</td>\n",
" <td>Explorer USPS Electric</td>\n",
" <td>NaN</td>\n",
" <td>38</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>2002</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10329</th>\n",
" <td>87</td>\n",
" <td>78</td>\n",
" <td>69</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>2-Wheel Drive</td>\n",
" <td>NaN</td>\n",
" <td>850</td>\n",
" <td>Toyota</td>\n",
" <td>RAV4 EV</td>\n",
" <td>NaN</td>\n",
" <td>95</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>2003</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21413</th>\n",
" <td>22</td>\n",
" <td>24</td>\n",
" <td>28</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>4-Wheel Drive</td>\n",
" <td>NaN</td>\n",
" <td>1750</td>\n",
" <td>Subaru</td>\n",
" <td>RX Turbo</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1985</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34407</th>\n",
" <td>73</td>\n",
" <td>72</td>\n",
" <td>71</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>NaN</td>\n",
" <td>900</td>\n",
" <td>BYD</td>\n",
" <td>e6</td>\n",
" <td>Automatic (A1)</td>\n",
" <td>187</td>\n",
" <td>Wed Mar 13 00:00:00 EDT 2019</td>\n",
" <td>2019</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34408</th>\n",
" <td>118</td>\n",
" <td>108</td>\n",
" <td>97</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>NaN</td>\n",
" <td>600</td>\n",
" <td>Nissan</td>\n",
" <td>Leaf (62 kW-hr battery pack)</td>\n",
" <td>Automatic (A1)</td>\n",
" <td>226</td>\n",
" <td>Wed Mar 13 00:00:00 EDT 2019</td>\n",
" <td>2019</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34409</th>\n",
" <td>114</td>\n",
" <td>104</td>\n",
" <td>94</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>NaN</td>\n",
" <td>650</td>\n",
" <td>Nissan</td>\n",
" <td>Leaf SV/SL (62 kW-hr battery pack)</td>\n",
" <td>Automatic (A1)</td>\n",
" <td>215</td>\n",
" <td>Wed Mar 13 00:00:00 EDT 2019</td>\n",
" <td>2019</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34538</th>\n",
" <td>74</td>\n",
" <td>74</td>\n",
" <td>73</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>All-Wheel Drive</td>\n",
" <td>NaN</td>\n",
" <td>900</td>\n",
" <td>Audi</td>\n",
" <td>e-tron</td>\n",
" <td>Automatic (A1)</td>\n",
" <td>204</td>\n",
" <td>Tue Apr 16 00:00:00 EDT 2019</td>\n",
" <td>2019</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34561</th>\n",
" <td>80</td>\n",
" <td>76</td>\n",
" <td>72</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>4-Wheel Drive</td>\n",
" <td>NaN</td>\n",
" <td>850</td>\n",
" <td>Jaguar</td>\n",
" <td>I-Pace</td>\n",
" <td>Automatic (A1)</td>\n",
" <td>234</td>\n",
" <td>Thu May 02 00:00:00 EDT 2019</td>\n",
" <td>2020</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34563</th>\n",
" <td>138</td>\n",
" <td>131</td>\n",
" <td>124</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>Rear-Wheel Drive</td>\n",
" <td>NaN</td>\n",
" <td>500</td>\n",
" <td>Tesla</td>\n",
" <td>Model 3 Standard Range</td>\n",
" <td>Automatic (A1)</td>\n",
" <td>220</td>\n",
" <td>Thu May 02 00:00:00 EDT 2019</td>\n",
" <td>2019</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34564</th>\n",
" <td>140</td>\n",
" <td>133</td>\n",
" <td>124</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>Rear-Wheel Drive</td>\n",
" <td>NaN</td>\n",
" <td>500</td>\n",
" <td>Tesla</td>\n",
" <td>Model 3 Standard Range Plus</td>\n",
" <td>Automatic (A1)</td>\n",
" <td>240</td>\n",
" <td>Thu May 02 00:00:00 EDT 2019</td>\n",
" <td>2019</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34565</th>\n",
" <td>115</td>\n",
" <td>111</td>\n",
" <td>107</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>All-Wheel Drive</td>\n",
" <td>NaN</td>\n",
" <td>600</td>\n",
" <td>Tesla</td>\n",
" <td>Model S Long Range</td>\n",
" <td>Automatic (A1)</td>\n",
" <td>370</td>\n",
" <td>Thu May 02 00:00:00 EDT 2019</td>\n",
" <td>2019</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34566</th>\n",
" <td>104</td>\n",
" <td>104</td>\n",
" <td>104</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>All-Wheel Drive</td>\n",
" <td>NaN</td>\n",
" <td>650</td>\n",
" <td>Tesla</td>\n",
" <td>Model S Performance (19\" Wheels)</td>\n",
" <td>Automatic (A1)</td>\n",
" <td>345</td>\n",
" <td>Thu May 02 00:00:00 EDT 2019</td>\n",
" <td>2019</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34567</th>\n",
" <td>98</td>\n",
" <td>97</td>\n",
" <td>96</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>All-Wheel Drive</td>\n",
" <td>NaN</td>\n",
" <td>700</td>\n",
" <td>Tesla</td>\n",
" <td>Model S Performance (21\" Wheels)</td>\n",
" <td>Automatic (A1)</td>\n",
" <td>325</td>\n",
" <td>Thu May 02 00:00:00 EDT 2019</td>\n",
" <td>2019</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>206 rows × 14 columns</p>\n",
"</div>"
],
"text/plain": [
" city08 comb08 highway08 cylinders displ drive \\\n",
"7138 81 85 91 NaN NaN NaN \n",
"7139 81 72 64 NaN NaN 2-Wheel Drive \n",
"8143 81 72 64 NaN NaN 2-Wheel Drive \n",
"8144 74 65 58 NaN NaN NaN \n",
"8146 45 39 33 NaN NaN 2-Wheel Drive \n",
"8147 84 75 66 NaN NaN NaN \n",
"9212 87 78 69 NaN NaN 2-Wheel Drive \n",
"9213 45 39 33 NaN NaN 2-Wheel Drive \n",
"10329 87 78 69 NaN NaN 2-Wheel Drive \n",
"21413 22 24 28 NaN NaN 4-Wheel Drive \n",
"... ... ... ... ... ... ... \n",
"34407 73 72 71 NaN NaN Front-Wheel Drive \n",
"34408 118 108 97 NaN NaN Front-Wheel Drive \n",
"34409 114 104 94 NaN NaN Front-Wheel Drive \n",
"34538 74 74 73 NaN NaN All-Wheel Drive \n",
"34561 80 76 72 NaN NaN 4-Wheel Drive \n",
"34563 138 131 124 NaN NaN Rear-Wheel Drive \n",
"34564 140 133 124 NaN NaN Rear-Wheel Drive \n",
"34565 115 111 107 NaN NaN All-Wheel Drive \n",
"34566 104 104 104 NaN NaN All-Wheel Drive \n",
"34567 98 97 96 NaN NaN All-Wheel Drive \n",
"\n",
" eng_dscr fuelCost08 make model \\\n",
"7138 NaN 800 Nissan Altra EV \n",
"7139 NaN 900 Toyota RAV4 EV \n",
"8143 NaN 900 Toyota RAV4 EV \n",
"8144 NaN 1000 Ford Th!nk \n",
"8146 NaN 1700 Ford Explorer USPS Electric \n",
"8147 NaN 900 Nissan Hyper-Mini \n",
"9212 NaN 850 Toyota RAV4 EV \n",
"9213 NaN 1700 Ford Explorer USPS Electric \n",
"10329 NaN 850 Toyota RAV4 EV \n",
"21413 NaN 1750 Subaru RX Turbo \n",
"... ... ... ... ... \n",
"34407 NaN 900 BYD e6 \n",
"34408 NaN 600 Nissan Leaf (62 kW-hr battery pack) \n",
"34409 NaN 650 Nissan Leaf SV/SL (62 kW-hr battery pack) \n",
"34538 NaN 900 Audi e-tron \n",
"34561 NaN 850 Jaguar I-Pace \n",
"34563 NaN 500 Tesla Model 3 Standard Range \n",
"34564 NaN 500 Tesla Model 3 Standard Range Plus \n",
"34565 NaN 600 Tesla Model S Long Range \n",
"34566 NaN 650 Tesla Model S Performance (19\" Wheels) \n",
"34567 NaN 700 Tesla Model S Performance (21\" Wheels) \n",
"\n",
" trany range createdOn year \n",
"7138 NaN 90 Tue Jan 01 00:00:00 EST 2013 2000 \n",
"7139 NaN 88 Tue Jan 01 00:00:00 EST 2013 2000 \n",
"8143 NaN 88 Tue Jan 01 00:00:00 EST 2013 2001 \n",
"8144 NaN 29 Tue Jan 01 00:00:00 EST 2013 2001 \n",
"8146 NaN 38 Tue Jan 01 00:00:00 EST 2013 2001 \n",
"8147 NaN 33 Tue Jan 01 00:00:00 EST 2013 2001 \n",
"9212 NaN 95 Tue Jan 01 00:00:00 EST 2013 2002 \n",
"9213 NaN 38 Tue Jan 01 00:00:00 EST 2013 2002 \n",
"10329 NaN 95 Tue Jan 01 00:00:00 EST 2013 2003 \n",
"21413 Manual 5-spd 0 Tue Jan 01 00:00:00 EST 2013 1985 \n",
"... ... ... ... ... \n",
"34407 Automatic (A1) 187 Wed Mar 13 00:00:00 EDT 2019 2019 \n",
"34408 Automatic (A1) 226 Wed Mar 13 00:00:00 EDT 2019 2019 \n",
"34409 Automatic (A1) 215 Wed Mar 13 00:00:00 EDT 2019 2019 \n",
"34538 Automatic (A1) 204 Tue Apr 16 00:00:00 EDT 2019 2019 \n",
"34561 Automatic (A1) 234 Thu May 02 00:00:00 EDT 2019 2020 \n",
"34563 Automatic (A1) 220 Thu May 02 00:00:00 EDT 2019 2019 \n",
"34564 Automatic (A1) 240 Thu May 02 00:00:00 EDT 2019 2019 \n",
"34565 Automatic (A1) 370 Thu May 02 00:00:00 EDT 2019 2019 \n",
"34566 Automatic (A1) 345 Thu May 02 00:00:00 EDT 2019 2019 \n",
"34567 Automatic (A1) 325 Thu May 02 00:00:00 EDT 2019 2019 \n",
"\n",
"[206 rows x 14 columns]"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# where are they missing?\n",
"(autos\n",
" [cols]\n",
" .query('cylinders.isna()')\n",
")"
]
},
{
"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>city08</th>\n",
" <th>comb08</th>\n",
" <th>highway08</th>\n",
" <th>cylinders</th>\n",
" <th>displ</th>\n",
" <th>fuelCost08</th>\n",
" <th>range</th>\n",
" <th>year</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>18.369045</td>\n",
" <td>20.616396</td>\n",
" <td>24.504667</td>\n",
" <td>5.688460</td>\n",
" <td>3.277904</td>\n",
" <td>2362.335942</td>\n",
" <td>0.793506</td>\n",
" <td>2001.535266</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>7.905886</td>\n",
" <td>7.674535</td>\n",
" <td>7.730364</td>\n",
" <td>1.797009</td>\n",
" <td>1.373415</td>\n",
" <td>654.981925</td>\n",
" <td>13.041592</td>\n",
" <td>11.142414</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>6.000000</td>\n",
" <td>7.000000</td>\n",
" <td>9.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>500.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1984.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>15.000000</td>\n",
" <td>17.000000</td>\n",
" <td>20.000000</td>\n",
" <td>4.000000</td>\n",
" <td>2.200000</td>\n",
" <td>1900.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1991.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>17.000000</td>\n",
" <td>20.000000</td>\n",
" <td>24.000000</td>\n",
" <td>6.000000</td>\n",
" <td>3.000000</td>\n",
" <td>2350.000000</td>\n",
" <td>0.000000</td>\n",
" <td>2002.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>20.000000</td>\n",
" <td>23.000000</td>\n",
" <td>28.000000</td>\n",
" <td>6.000000</td>\n",
" <td>4.300000</td>\n",
" <td>2700.000000</td>\n",
" <td>0.000000</td>\n",
" <td>2011.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>150.000000</td>\n",
" <td>136.000000</td>\n",
" <td>124.000000</td>\n",
" <td>16.000000</td>\n",
" <td>8.400000</td>\n",
" <td>7400.000000</td>\n",
" <td>370.000000</td>\n",
" <td>2020.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" city08 comb08 highway08 cylinders displ \\\n",
"count 41144.000000 41144.000000 41144.000000 41144.000000 41144.000000 \n",
"mean 18.369045 20.616396 24.504667 5.688460 3.277904 \n",
"std 7.905886 7.674535 7.730364 1.797009 1.373415 \n",
"min 6.000000 7.000000 9.000000 0.000000 0.000000 \n",
"25% 15.000000 17.000000 20.000000 4.000000 2.200000 \n",
"50% 17.000000 20.000000 24.000000 6.000000 3.000000 \n",
"75% 20.000000 23.000000 28.000000 6.000000 4.300000 \n",
"max 150.000000 136.000000 124.000000 16.000000 8.400000 \n",
"\n",
" fuelCost08 range year \n",
"count 41144.000000 41144.000000 41144.000000 \n",
"mean 2362.335942 0.793506 2001.535266 \n",
"std 654.981925 13.041592 11.142414 \n",
"min 500.000000 0.000000 1984.000000 \n",
"25% 1900.000000 0.000000 1991.000000 \n",
"50% 2350.000000 0.000000 2002.000000 \n",
"75% 2700.000000 0.000000 2011.000000 \n",
"max 7400.000000 370.000000 2020.000000 "
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# chaining - add cylinders and displ columns\n",
"(autos\n",
" [cols]\n",
" .assign(cylinders=autos.cylinders.fillna(0).astype('int8'),\n",
" displ=autos.displ.fillna(0))\n",
" .astype({'highway08': 'int8', 'city08': 'int16', 'comb08': 'int16', \n",
" 'fuelCost08': 'int16', 'range': 'int16', 'year': 'int16', })\n",
" .describe()\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 23,
"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>city08</th>\n",
" <th>comb08</th>\n",
" <th>highway08</th>\n",
" <th>cylinders</th>\n",
" <th>displ</th>\n",
" <th>fuelCost08</th>\n",
" <th>range</th>\n",
" <th>year</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>40938.000000</td>\n",
" <td>40940.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" <td>41144.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>18.369045</td>\n",
" <td>20.616396</td>\n",
" <td>24.504667</td>\n",
" <td>5.717084</td>\n",
" <td>3.294238</td>\n",
" <td>2362.335942</td>\n",
" <td>0.793506</td>\n",
" <td>2001.535266</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>7.905886</td>\n",
" <td>7.674535</td>\n",
" <td>7.730364</td>\n",
" <td>1.755517</td>\n",
" <td>1.357151</td>\n",
" <td>654.981925</td>\n",
" <td>13.041592</td>\n",
" <td>11.142414</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>6.000000</td>\n",
" <td>7.000000</td>\n",
" <td>9.000000</td>\n",
" <td>2.000000</td>\n",
" <td>0.000000</td>\n",
" <td>500.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1984.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>15.000000</td>\n",
" <td>17.000000</td>\n",
" <td>20.000000</td>\n",
" <td>4.000000</td>\n",
" <td>2.200000</td>\n",
" <td>1900.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1991.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>17.000000</td>\n",
" <td>20.000000</td>\n",
" <td>24.000000</td>\n",
" <td>6.000000</td>\n",
" <td>3.000000</td>\n",
" <td>2350.000000</td>\n",
" <td>0.000000</td>\n",
" <td>2002.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>20.000000</td>\n",
" <td>23.000000</td>\n",
" <td>28.000000</td>\n",
" <td>6.000000</td>\n",
" <td>4.300000</td>\n",
" <td>2700.000000</td>\n",
" <td>0.000000</td>\n",
" <td>2011.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>150.000000</td>\n",
" <td>136.000000</td>\n",
" <td>124.000000</td>\n",
" <td>16.000000</td>\n",
" <td>8.400000</td>\n",
" <td>7400.000000</td>\n",
" <td>370.000000</td>\n",
" <td>2020.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" city08 comb08 highway08 cylinders displ \\\n",
"count 41144.000000 41144.000000 41144.000000 40938.000000 40940.000000 \n",
"mean 18.369045 20.616396 24.504667 5.717084 3.294238 \n",
"std 7.905886 7.674535 7.730364 1.755517 1.357151 \n",
"min 6.000000 7.000000 9.000000 2.000000 0.000000 \n",
"25% 15.000000 17.000000 20.000000 4.000000 2.200000 \n",
"50% 17.000000 20.000000 24.000000 6.000000 3.000000 \n",
"75% 20.000000 23.000000 28.000000 6.000000 4.300000 \n",
"max 150.000000 136.000000 124.000000 16.000000 8.400000 \n",
"\n",
" fuelCost08 range year \n",
"count 41144.000000 41144.000000 41144.000000 \n",
"mean 2362.335942 0.793506 2001.535266 \n",
"std 654.981925 13.041592 11.142414 \n",
"min 500.000000 0.000000 1984.000000 \n",
"25% 1900.000000 0.000000 1991.000000 \n",
"50% 2350.000000 0.000000 2002.000000 \n",
"75% 2700.000000 0.000000 2011.000000 \n",
"max 7400.000000 370.000000 2020.000000 "
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"autos[cols].describe()"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"finfo(resolution=0.001, min=-6.55040e+04, max=6.55040e+04, dtype=float16)"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# use this to inspect float sizes\n",
"np.finfo(np.float16)"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"scrolled": true
},
"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>city08</th>\n",
" <th>comb08</th>\n",
" <th>highway08</th>\n",
" <th>cylinders</th>\n",
" <th>displ</th>\n",
" <th>drive</th>\n",
" <th>eng_dscr</th>\n",
" <th>fuelCost08</th>\n",
" <th>make</th>\n",
" <th>model</th>\n",
" <th>trany</th>\n",
" <th>range</th>\n",
" <th>createdOn</th>\n",
" <th>year</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>19</td>\n",
" <td>21</td>\n",
" <td>25</td>\n",
" <td>4</td>\n",
" <td>2.000000</td>\n",
" <td>Rear-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>2000</td>\n",
" <td>Alfa Romeo</td>\n",
" <td>Spider Veloce 2000</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1985</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>9</td>\n",
" <td>11</td>\n",
" <td>14</td>\n",
" <td>12</td>\n",
" <td>4.898438</td>\n",
" <td>Rear-Wheel Drive</td>\n",
" <td>(GUZZLER)</td>\n",
" <td>3850</td>\n",
" <td>Ferrari</td>\n",
" <td>Testarossa</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1985</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>23</td>\n",
" <td>27</td>\n",
" <td>33</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>1550</td>\n",
" <td>Dodge</td>\n",
" <td>Charger</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1985</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>10</td>\n",
" <td>11</td>\n",
" <td>12</td>\n",
" <td>8</td>\n",
" <td>5.199219</td>\n",
" <td>Rear-Wheel Drive</td>\n",
" <td>NaN</td>\n",
" <td>3850</td>\n",
" <td>Dodge</td>\n",
" <td>B150/B250 Wagon 2WD</td>\n",
" <td>Automatic 3-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1985</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>17</td>\n",
" <td>19</td>\n",
" <td>23</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>4-Wheel or All-Wheel Drive</td>\n",
" <td>(FFS,TRBO)</td>\n",
" <td>2700</td>\n",
" <td>Subaru</td>\n",
" <td>Legacy AWD Turbo</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1993</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>21</td>\n",
" <td>22</td>\n",
" <td>24</td>\n",
" <td>4</td>\n",
" <td>1.799805</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>1900</td>\n",
" <td>Subaru</td>\n",
" <td>Loyale</td>\n",
" <td>Automatic 3-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1993</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>22</td>\n",
" <td>25</td>\n",
" <td>29</td>\n",
" <td>4</td>\n",
" <td>1.799805</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>1700</td>\n",
" <td>Subaru</td>\n",
" <td>Loyale</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1993</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>23</td>\n",
" <td>24</td>\n",
" <td>26</td>\n",
" <td>4</td>\n",
" <td>1.599609</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>1750</td>\n",
" <td>Toyota</td>\n",
" <td>Corolla</td>\n",
" <td>Automatic 3-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1993</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>23</td>\n",
" <td>26</td>\n",
" <td>31</td>\n",
" <td>4</td>\n",
" <td>1.599609</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>1600</td>\n",
" <td>Toyota</td>\n",
" <td>Corolla</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1993</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>23</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>4</td>\n",
" <td>1.799805</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>1700</td>\n",
" <td>Toyota</td>\n",
" <td>Corolla</td>\n",
" <td>Automatic 4-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1993</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41134</th>\n",
" <td>18</td>\n",
" <td>20</td>\n",
" <td>24</td>\n",
" <td>4</td>\n",
" <td>2.099609</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>2100</td>\n",
" <td>Saab</td>\n",
" <td>900</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1993</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41135</th>\n",
" <td>23</td>\n",
" <td>26</td>\n",
" <td>33</td>\n",
" <td>4</td>\n",
" <td>1.900391</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(TBI) (FFS)</td>\n",
" <td>1600</td>\n",
" <td>Saturn</td>\n",
" <td>SL</td>\n",
" <td>Automatic 4-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1993</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41136</th>\n",
" <td>21</td>\n",
" <td>24</td>\n",
" <td>30</td>\n",
" <td>4</td>\n",
" <td>1.900391</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(MFI) (FFS)</td>\n",
" <td>1750</td>\n",
" <td>Saturn</td>\n",
" <td>SL</td>\n",
" <td>Automatic 4-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1993</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41137</th>\n",
" <td>24</td>\n",
" <td>28</td>\n",
" <td>33</td>\n",
" <td>4</td>\n",
" <td>1.900391</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(TBI) (FFS)</td>\n",
" <td>1500</td>\n",
" <td>Saturn</td>\n",
" <td>SL</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1993</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41138</th>\n",
" <td>21</td>\n",
" <td>25</td>\n",
" <td>32</td>\n",
" <td>4</td>\n",
" <td>1.900391</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(MFI) (FFS)</td>\n",
" <td>1700</td>\n",
" <td>Saturn</td>\n",
" <td>SL</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1993</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41139</th>\n",
" <td>19</td>\n",
" <td>22</td>\n",
" <td>26</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>1900</td>\n",
" <td>Subaru</td>\n",
" <td>Legacy</td>\n",
" <td>Automatic 4-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1993</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41140</th>\n",
" <td>20</td>\n",
" <td>23</td>\n",
" <td>28</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>1850</td>\n",
" <td>Subaru</td>\n",
" <td>Legacy</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1993</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41141</th>\n",
" <td>18</td>\n",
" <td>21</td>\n",
" <td>24</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>4-Wheel or All-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>2000</td>\n",
" <td>Subaru</td>\n",
" <td>Legacy AWD</td>\n",
" <td>Automatic 4-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1993</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41142</th>\n",
" <td>18</td>\n",
" <td>21</td>\n",
" <td>24</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>4-Wheel or All-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>2000</td>\n",
" <td>Subaru</td>\n",
" <td>Legacy AWD</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1993</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41143</th>\n",
" <td>16</td>\n",
" <td>18</td>\n",
" <td>21</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>4-Wheel or All-Wheel Drive</td>\n",
" <td>(FFS,TRBO)</td>\n",
" <td>2900</td>\n",
" <td>Subaru</td>\n",
" <td>Legacy AWD Turbo</td>\n",
" <td>Automatic 4-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1993</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>41144 rows × 14 columns</p>\n",
"</div>"
],
"text/plain": [
" city08 comb08 highway08 cylinders displ \\\n",
"0 19 21 25 4 2.000000 \n",
"1 9 11 14 12 4.898438 \n",
"2 23 27 33 4 2.199219 \n",
"3 10 11 12 8 5.199219 \n",
"4 17 19 23 4 2.199219 \n",
"5 21 22 24 4 1.799805 \n",
"6 22 25 29 4 1.799805 \n",
"7 23 24 26 4 1.599609 \n",
"8 23 26 31 4 1.599609 \n",
"9 23 25 30 4 1.799805 \n",
"... ... ... ... ... ... \n",
"41134 18 20 24 4 2.099609 \n",
"41135 23 26 33 4 1.900391 \n",
"41136 21 24 30 4 1.900391 \n",
"41137 24 28 33 4 1.900391 \n",
"41138 21 25 32 4 1.900391 \n",
"41139 19 22 26 4 2.199219 \n",
"41140 20 23 28 4 2.199219 \n",
"41141 18 21 24 4 2.199219 \n",
"41142 18 21 24 4 2.199219 \n",
"41143 16 18 21 4 2.199219 \n",
"\n",
" drive eng_dscr fuelCost08 make \\\n",
"0 Rear-Wheel Drive (FFS) 2000 Alfa Romeo \n",
"1 Rear-Wheel Drive (GUZZLER) 3850 Ferrari \n",
"2 Front-Wheel Drive (FFS) 1550 Dodge \n",
"3 Rear-Wheel Drive NaN 3850 Dodge \n",
"4 4-Wheel or All-Wheel Drive (FFS,TRBO) 2700 Subaru \n",
"5 Front-Wheel Drive (FFS) 1900 Subaru \n",
"6 Front-Wheel Drive (FFS) 1700 Subaru \n",
"7 Front-Wheel Drive (FFS) 1750 Toyota \n",
"8 Front-Wheel Drive (FFS) 1600 Toyota \n",
"9 Front-Wheel Drive (FFS) 1700 Toyota \n",
"... ... ... ... ... \n",
"41134 Front-Wheel Drive (FFS) 2100 Saab \n",
"41135 Front-Wheel Drive (TBI) (FFS) 1600 Saturn \n",
"41136 Front-Wheel Drive (MFI) (FFS) 1750 Saturn \n",
"41137 Front-Wheel Drive (TBI) (FFS) 1500 Saturn \n",
"41138 Front-Wheel Drive (MFI) (FFS) 1700 Saturn \n",
"41139 Front-Wheel Drive (FFS) 1900 Subaru \n",
"41140 Front-Wheel Drive (FFS) 1850 Subaru \n",
"41141 4-Wheel or All-Wheel Drive (FFS) 2000 Subaru \n",
"41142 4-Wheel or All-Wheel Drive (FFS) 2000 Subaru \n",
"41143 4-Wheel or All-Wheel Drive (FFS,TRBO) 2900 Subaru \n",
"\n",
" model trany range \\\n",
"0 Spider Veloce 2000 Manual 5-spd 0 \n",
"1 Testarossa Manual 5-spd 0 \n",
"2 Charger Manual 5-spd 0 \n",
"3 B150/B250 Wagon 2WD Automatic 3-spd 0 \n",
"4 Legacy AWD Turbo Manual 5-spd 0 \n",
"5 Loyale Automatic 3-spd 0 \n",
"6 Loyale Manual 5-spd 0 \n",
"7 Corolla Automatic 3-spd 0 \n",
"8 Corolla Manual 5-spd 0 \n",
"9 Corolla Automatic 4-spd 0 \n",
"... ... ... ... \n",
"41134 900 Manual 5-spd 0 \n",
"41135 SL Automatic 4-spd 0 \n",
"41136 SL Automatic 4-spd 0 \n",
"41137 SL Manual 5-spd 0 \n",
"41138 SL Manual 5-spd 0 \n",
"41139 Legacy Automatic 4-spd 0 \n",
"41140 Legacy Manual 5-spd 0 \n",
"41141 Legacy AWD Automatic 4-spd 0 \n",
"41142 Legacy AWD Manual 5-spd 0 \n",
"41143 Legacy AWD Turbo Automatic 4-spd 0 \n",
"\n",
" createdOn year \n",
"0 Tue Jan 01 00:00:00 EST 2013 1985 \n",
"1 Tue Jan 01 00:00:00 EST 2013 1985 \n",
"2 Tue Jan 01 00:00:00 EST 2013 1985 \n",
"3 Tue Jan 01 00:00:00 EST 2013 1985 \n",
"4 Tue Jan 01 00:00:00 EST 2013 1993 \n",
"5 Tue Jan 01 00:00:00 EST 2013 1993 \n",
"6 Tue Jan 01 00:00:00 EST 2013 1993 \n",
"7 Tue Jan 01 00:00:00 EST 2013 1993 \n",
"8 Tue Jan 01 00:00:00 EST 2013 1993 \n",
"9 Tue Jan 01 00:00:00 EST 2013 1993 \n",
"... ... ... \n",
"41134 Tue Jan 01 00:00:00 EST 2013 1993 \n",
"41135 Tue Jan 01 00:00:00 EST 2013 1993 \n",
"41136 Tue Jan 01 00:00:00 EST 2013 1993 \n",
"41137 Tue Jan 01 00:00:00 EST 2013 1993 \n",
"41138 Tue Jan 01 00:00:00 EST 2013 1993 \n",
"41139 Tue Jan 01 00:00:00 EST 2013 1993 \n",
"41140 Tue Jan 01 00:00:00 EST 2013 1993 \n",
"41141 Tue Jan 01 00:00:00 EST 2013 1993 \n",
"41142 Tue Jan 01 00:00:00 EST 2013 1993 \n",
"41143 Tue Jan 01 00:00:00 EST 2013 1993 \n",
"\n",
"[41144 rows x 14 columns]"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# chaining - convert displ to float16\n",
"(autos\n",
" [cols]\n",
" .assign(cylinders=autos.cylinders.fillna(0).astype('int8'),\n",
" displ=autos.displ.fillna(0).astype('float16'))\n",
" .astype({'highway08': 'int8', 'city08': 'int16', 'comb08': 'int16', 'fuelCost08': 'int16', \n",
" 'range': 'int16', 'year': 'int16'})\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/plain": [
"17590123"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# new memory usage\n",
"(autos\n",
" .loc[:, cols]\n",
" .assign(cylinders=autos.cylinders.fillna(0).astype('int8'),\n",
" displ=autos.displ.fillna(0).astype('float16'))\n",
" .astype({'highway08': 'int8', 'city08': 'int16', 'comb08': 'int16', 'fuelCost08': 'int16', \n",
" 'range': 'int16', 'year': 'int16'})\n",
" .memory_usage(deep=True)\n",
" .sum() # was 19,647,323\n",
")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Objects"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"scrolled": true
},
"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>drive</th>\n",
" <th>eng_dscr</th>\n",
" <th>make</th>\n",
" <th>model</th>\n",
" <th>trany</th>\n",
" <th>createdOn</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Rear-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>Alfa Romeo</td>\n",
" <td>Spider Veloce 2000</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Rear-Wheel Drive</td>\n",
" <td>(GUZZLER)</td>\n",
" <td>Ferrari</td>\n",
" <td>Testarossa</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>Dodge</td>\n",
" <td>Charger</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Rear-Wheel Drive</td>\n",
" <td>NaN</td>\n",
" <td>Dodge</td>\n",
" <td>B150/B250 Wagon 2WD</td>\n",
" <td>Automatic 3-spd</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>4-Wheel or All-Wheel Drive</td>\n",
" <td>(FFS,TRBO)</td>\n",
" <td>Subaru</td>\n",
" <td>Legacy AWD Turbo</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>Subaru</td>\n",
" <td>Loyale</td>\n",
" <td>Automatic 3-spd</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>Subaru</td>\n",
" <td>Loyale</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>Toyota</td>\n",
" <td>Corolla</td>\n",
" <td>Automatic 3-spd</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>Toyota</td>\n",
" <td>Corolla</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>Toyota</td>\n",
" <td>Corolla</td>\n",
" <td>Automatic 4-spd</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41134</th>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>Saab</td>\n",
" <td>900</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41135</th>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(TBI) (FFS)</td>\n",
" <td>Saturn</td>\n",
" <td>SL</td>\n",
" <td>Automatic 4-spd</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41136</th>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(MFI) (FFS)</td>\n",
" <td>Saturn</td>\n",
" <td>SL</td>\n",
" <td>Automatic 4-spd</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41137</th>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(TBI) (FFS)</td>\n",
" <td>Saturn</td>\n",
" <td>SL</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41138</th>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(MFI) (FFS)</td>\n",
" <td>Saturn</td>\n",
" <td>SL</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41139</th>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>Subaru</td>\n",
" <td>Legacy</td>\n",
" <td>Automatic 4-spd</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41140</th>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>Subaru</td>\n",
" <td>Legacy</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41141</th>\n",
" <td>4-Wheel or All-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>Subaru</td>\n",
" <td>Legacy AWD</td>\n",
" <td>Automatic 4-spd</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41142</th>\n",
" <td>4-Wheel or All-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>Subaru</td>\n",
" <td>Legacy AWD</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41143</th>\n",
" <td>4-Wheel or All-Wheel Drive</td>\n",
" <td>(FFS,TRBO)</td>\n",
" <td>Subaru</td>\n",
" <td>Legacy AWD Turbo</td>\n",
" <td>Automatic 4-spd</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>41144 rows × 6 columns</p>\n",
"</div>"
],
"text/plain": [
" drive eng_dscr make \\\n",
"0 Rear-Wheel Drive (FFS) Alfa Romeo \n",
"1 Rear-Wheel Drive (GUZZLER) Ferrari \n",
"2 Front-Wheel Drive (FFS) Dodge \n",
"3 Rear-Wheel Drive NaN Dodge \n",
"4 4-Wheel or All-Wheel Drive (FFS,TRBO) Subaru \n",
"5 Front-Wheel Drive (FFS) Subaru \n",
"6 Front-Wheel Drive (FFS) Subaru \n",
"7 Front-Wheel Drive (FFS) Toyota \n",
"8 Front-Wheel Drive (FFS) Toyota \n",
"9 Front-Wheel Drive (FFS) Toyota \n",
"... ... ... ... \n",
"41134 Front-Wheel Drive (FFS) Saab \n",
"41135 Front-Wheel Drive (TBI) (FFS) Saturn \n",
"41136 Front-Wheel Drive (MFI) (FFS) Saturn \n",
"41137 Front-Wheel Drive (TBI) (FFS) Saturn \n",
"41138 Front-Wheel Drive (MFI) (FFS) Saturn \n",
"41139 Front-Wheel Drive (FFS) Subaru \n",
"41140 Front-Wheel Drive (FFS) Subaru \n",
"41141 4-Wheel or All-Wheel Drive (FFS) Subaru \n",
"41142 4-Wheel or All-Wheel Drive (FFS) Subaru \n",
"41143 4-Wheel or All-Wheel Drive (FFS,TRBO) Subaru \n",
"\n",
" model trany createdOn \n",
"0 Spider Veloce 2000 Manual 5-spd Tue Jan 01 00:00:00 EST 2013 \n",
"1 Testarossa Manual 5-spd Tue Jan 01 00:00:00 EST 2013 \n",
"2 Charger Manual 5-spd Tue Jan 01 00:00:00 EST 2013 \n",
"3 B150/B250 Wagon 2WD Automatic 3-spd Tue Jan 01 00:00:00 EST 2013 \n",
"4 Legacy AWD Turbo Manual 5-spd Tue Jan 01 00:00:00 EST 2013 \n",
"5 Loyale Automatic 3-spd Tue Jan 01 00:00:00 EST 2013 \n",
"6 Loyale Manual 5-spd Tue Jan 01 00:00:00 EST 2013 \n",
"7 Corolla Automatic 3-spd Tue Jan 01 00:00:00 EST 2013 \n",
"8 Corolla Manual 5-spd Tue Jan 01 00:00:00 EST 2013 \n",
"9 Corolla Automatic 4-spd Tue Jan 01 00:00:00 EST 2013 \n",
"... ... ... ... \n",
"41134 900 Manual 5-spd Tue Jan 01 00:00:00 EST 2013 \n",
"41135 SL Automatic 4-spd Tue Jan 01 00:00:00 EST 2013 \n",
"41136 SL Automatic 4-spd Tue Jan 01 00:00:00 EST 2013 \n",
"41137 SL Manual 5-spd Tue Jan 01 00:00:00 EST 2013 \n",
"41138 SL Manual 5-spd Tue Jan 01 00:00:00 EST 2013 \n",
"41139 Legacy Automatic 4-spd Tue Jan 01 00:00:00 EST 2013 \n",
"41140 Legacy Manual 5-spd Tue Jan 01 00:00:00 EST 2013 \n",
"41141 Legacy AWD Automatic 4-spd Tue Jan 01 00:00:00 EST 2013 \n",
"41142 Legacy AWD Manual 5-spd Tue Jan 01 00:00:00 EST 2013 \n",
"41143 Legacy AWD Turbo Automatic 4-spd Tue Jan 01 00:00:00 EST 2013 \n",
"\n",
"[41144 rows x 6 columns]"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(autos\n",
" [cols]\n",
" .select_dtypes(object)\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"Front-Wheel Drive 14236\n",
"Rear-Wheel Drive 13831\n",
"4-Wheel or All-Wheel Drive 6648\n",
"All-Wheel Drive 3015\n",
"4-Wheel Drive 1460\n",
"NaN 1189\n",
"2-Wheel Drive 507\n",
"Part-time 4-Wheel Drive 258\n",
"Name: drive, dtype: int64"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# looks categorical\n",
"(autos.drive.value_counts(dropna=False))"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"scrolled": true
},
"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>city08</th>\n",
" <th>comb08</th>\n",
" <th>highway08</th>\n",
" <th>cylinders</th>\n",
" <th>displ</th>\n",
" <th>drive</th>\n",
" <th>eng_dscr</th>\n",
" <th>fuelCost08</th>\n",
" <th>make</th>\n",
" <th>model</th>\n",
" <th>trany</th>\n",
" <th>range</th>\n",
" <th>createdOn</th>\n",
" <th>year</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>7138</th>\n",
" <td>81</td>\n",
" <td>85</td>\n",
" <td>91</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>800</td>\n",
" <td>Nissan</td>\n",
" <td>Altra EV</td>\n",
" <td>NaN</td>\n",
" <td>90</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>2000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8144</th>\n",
" <td>74</td>\n",
" <td>65</td>\n",
" <td>58</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>1000</td>\n",
" <td>Ford</td>\n",
" <td>Th!nk</td>\n",
" <td>NaN</td>\n",
" <td>29</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>2001</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8147</th>\n",
" <td>84</td>\n",
" <td>75</td>\n",
" <td>66</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>900</td>\n",
" <td>Nissan</td>\n",
" <td>Hyper-Mini</td>\n",
" <td>NaN</td>\n",
" <td>33</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>2001</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18217</th>\n",
" <td>18</td>\n",
" <td>21</td>\n",
" <td>25</td>\n",
" <td>4.0</td>\n",
" <td>2.0</td>\n",
" <td>NaN</td>\n",
" <td>(FFS)</td>\n",
" <td>2000</td>\n",
" <td>Alfa Romeo</td>\n",
" <td>Spider Veloce 2000</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1984</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18218</th>\n",
" <td>20</td>\n",
" <td>22</td>\n",
" <td>26</td>\n",
" <td>4.0</td>\n",
" <td>1.5</td>\n",
" <td>NaN</td>\n",
" <td>(FFS)</td>\n",
" <td>1900</td>\n",
" <td>Bertone</td>\n",
" <td>X1/9</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1984</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18219</th>\n",
" <td>13</td>\n",
" <td>15</td>\n",
" <td>20</td>\n",
" <td>8.0</td>\n",
" <td>5.7</td>\n",
" <td>NaN</td>\n",
" <td>(350 V8) (FFS)</td>\n",
" <td>2800</td>\n",
" <td>Chevrolet</td>\n",
" <td>Corvette</td>\n",
" <td>Automatic 4-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1984</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18220</th>\n",
" <td>13</td>\n",
" <td>15</td>\n",
" <td>20</td>\n",
" <td>8.0</td>\n",
" <td>5.7</td>\n",
" <td>NaN</td>\n",
" <td>(350 V8) (FFS)</td>\n",
" <td>2800</td>\n",
" <td>Chevrolet</td>\n",
" <td>Corvette</td>\n",
" <td>Manual 4-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1984</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18221</th>\n",
" <td>15</td>\n",
" <td>17</td>\n",
" <td>20</td>\n",
" <td>6.0</td>\n",
" <td>3.0</td>\n",
" <td>NaN</td>\n",
" <td>(FFS,TRBO)</td>\n",
" <td>2500</td>\n",
" <td>Nissan</td>\n",
" <td>300ZX</td>\n",
" <td>Automatic 4-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1984</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18222</th>\n",
" <td>16</td>\n",
" <td>18</td>\n",
" <td>20</td>\n",
" <td>6.0</td>\n",
" <td>3.0</td>\n",
" <td>NaN</td>\n",
" <td>(FFS)</td>\n",
" <td>2350</td>\n",
" <td>Nissan</td>\n",
" <td>300ZX</td>\n",
" <td>Automatic 4-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1984</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18223</th>\n",
" <td>16</td>\n",
" <td>18</td>\n",
" <td>22</td>\n",
" <td>6.0</td>\n",
" <td>3.0</td>\n",
" <td>NaN</td>\n",
" <td>(FFS,TRBO)</td>\n",
" <td>2350</td>\n",
" <td>Nissan</td>\n",
" <td>300ZX</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1984</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20063</th>\n",
" <td>13</td>\n",
" <td>15</td>\n",
" <td>19</td>\n",
" <td>8.0</td>\n",
" <td>5.0</td>\n",
" <td>NaN</td>\n",
" <td>(FFS) CA model</td>\n",
" <td>2800</td>\n",
" <td>Mercury</td>\n",
" <td>Grand Marquis Wagon</td>\n",
" <td>Automatic 4-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1984</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20064</th>\n",
" <td>13</td>\n",
" <td>15</td>\n",
" <td>20</td>\n",
" <td>8.0</td>\n",
" <td>5.0</td>\n",
" <td>NaN</td>\n",
" <td>(GM-OLDS) CA model</td>\n",
" <td>2800</td>\n",
" <td>Oldsmobile</td>\n",
" <td>Custom Cruiser Wagon</td>\n",
" <td>Automatic 4-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1984</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20065</th>\n",
" <td>14</td>\n",
" <td>16</td>\n",
" <td>19</td>\n",
" <td>8.0</td>\n",
" <td>5.0</td>\n",
" <td>NaN</td>\n",
" <td>(GM-CHEV) CA model</td>\n",
" <td>2650</td>\n",
" <td>Pontiac</td>\n",
" <td>Parisienne Wagon</td>\n",
" <td>Automatic 4-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1984</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20387</th>\n",
" <td>14</td>\n",
" <td>14</td>\n",
" <td>15</td>\n",
" <td>4.0</td>\n",
" <td>2.4</td>\n",
" <td>NaN</td>\n",
" <td>(FFS) CA model</td>\n",
" <td>3000</td>\n",
" <td>Nissan</td>\n",
" <td>Pickup Cab Chassis</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1984</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21129</th>\n",
" <td>14</td>\n",
" <td>16</td>\n",
" <td>21</td>\n",
" <td>8.0</td>\n",
" <td>3.5</td>\n",
" <td>NaN</td>\n",
" <td>GUZZLER FFS,TURBO</td>\n",
" <td>3250</td>\n",
" <td>Lotus</td>\n",
" <td>Esprit V8</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>2002</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23029</th>\n",
" <td>79</td>\n",
" <td>85</td>\n",
" <td>94</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>Lead Acid</td>\n",
" <td>800</td>\n",
" <td>GMC</td>\n",
" <td>EV1</td>\n",
" <td>Automatic (A1)</td>\n",
" <td>55</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1999</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23030</th>\n",
" <td>35</td>\n",
" <td>37</td>\n",
" <td>39</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NiMH</td>\n",
" <td>1750</td>\n",
" <td>GMC</td>\n",
" <td>EV1</td>\n",
" <td>Automatic (A1)</td>\n",
" <td>105</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1999</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23032</th>\n",
" <td>49</td>\n",
" <td>48</td>\n",
" <td>46</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>1400</td>\n",
" <td>Honda</td>\n",
" <td>EV Plus</td>\n",
" <td>Automatic (A1)</td>\n",
" <td>81</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1999</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23037</th>\n",
" <td>49</td>\n",
" <td>48</td>\n",
" <td>46</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>1400</td>\n",
" <td>Honda</td>\n",
" <td>EV Plus</td>\n",
" <td>Automatic (A1)</td>\n",
" <td>81</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1998</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23040</th>\n",
" <td>102</td>\n",
" <td>98</td>\n",
" <td>94</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>650</td>\n",
" <td>MINI</td>\n",
" <td>MiniE</td>\n",
" <td>Automatic (A1)</td>\n",
" <td>100</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>2008</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>1189 rows × 14 columns</p>\n",
"</div>"
],
"text/plain": [
" city08 comb08 highway08 cylinders displ drive eng_dscr \\\n",
"7138 81 85 91 NaN NaN NaN NaN \n",
"8144 74 65 58 NaN NaN NaN NaN \n",
"8147 84 75 66 NaN NaN NaN NaN \n",
"18217 18 21 25 4.0 2.0 NaN (FFS) \n",
"18218 20 22 26 4.0 1.5 NaN (FFS) \n",
"18219 13 15 20 8.0 5.7 NaN (350 V8) (FFS) \n",
"18220 13 15 20 8.0 5.7 NaN (350 V8) (FFS) \n",
"18221 15 17 20 6.0 3.0 NaN (FFS,TRBO) \n",
"18222 16 18 20 6.0 3.0 NaN (FFS) \n",
"18223 16 18 22 6.0 3.0 NaN (FFS,TRBO) \n",
"... ... ... ... ... ... ... ... \n",
"20063 13 15 19 8.0 5.0 NaN (FFS) CA model \n",
"20064 13 15 20 8.0 5.0 NaN (GM-OLDS) CA model \n",
"20065 14 16 19 8.0 5.0 NaN (GM-CHEV) CA model \n",
"20387 14 14 15 4.0 2.4 NaN (FFS) CA model \n",
"21129 14 16 21 8.0 3.5 NaN GUZZLER FFS,TURBO \n",
"23029 79 85 94 NaN NaN NaN Lead Acid \n",
"23030 35 37 39 NaN NaN NaN NiMH \n",
"23032 49 48 46 NaN NaN NaN NaN \n",
"23037 49 48 46 NaN NaN NaN NaN \n",
"23040 102 98 94 NaN NaN NaN NaN \n",
"\n",
" fuelCost08 make model trany range \\\n",
"7138 800 Nissan Altra EV NaN 90 \n",
"8144 1000 Ford Th!nk NaN 29 \n",
"8147 900 Nissan Hyper-Mini NaN 33 \n",
"18217 2000 Alfa Romeo Spider Veloce 2000 Manual 5-spd 0 \n",
"18218 1900 Bertone X1/9 Manual 5-spd 0 \n",
"18219 2800 Chevrolet Corvette Automatic 4-spd 0 \n",
"18220 2800 Chevrolet Corvette Manual 4-spd 0 \n",
"18221 2500 Nissan 300ZX Automatic 4-spd 0 \n",
"18222 2350 Nissan 300ZX Automatic 4-spd 0 \n",
"18223 2350 Nissan 300ZX Manual 5-spd 0 \n",
"... ... ... ... ... ... \n",
"20063 2800 Mercury Grand Marquis Wagon Automatic 4-spd 0 \n",
"20064 2800 Oldsmobile Custom Cruiser Wagon Automatic 4-spd 0 \n",
"20065 2650 Pontiac Parisienne Wagon Automatic 4-spd 0 \n",
"20387 3000 Nissan Pickup Cab Chassis Manual 5-spd 0 \n",
"21129 3250 Lotus Esprit V8 Manual 5-spd 0 \n",
"23029 800 GMC EV1 Automatic (A1) 55 \n",
"23030 1750 GMC EV1 Automatic (A1) 105 \n",
"23032 1400 Honda EV Plus Automatic (A1) 81 \n",
"23037 1400 Honda EV Plus Automatic (A1) 81 \n",
"23040 650 MINI MiniE Automatic (A1) 100 \n",
"\n",
" createdOn year \n",
"7138 Tue Jan 01 00:00:00 EST 2013 2000 \n",
"8144 Tue Jan 01 00:00:00 EST 2013 2001 \n",
"8147 Tue Jan 01 00:00:00 EST 2013 2001 \n",
"18217 Tue Jan 01 00:00:00 EST 2013 1984 \n",
"18218 Tue Jan 01 00:00:00 EST 2013 1984 \n",
"18219 Tue Jan 01 00:00:00 EST 2013 1984 \n",
"18220 Tue Jan 01 00:00:00 EST 2013 1984 \n",
"18221 Tue Jan 01 00:00:00 EST 2013 1984 \n",
"18222 Tue Jan 01 00:00:00 EST 2013 1984 \n",
"18223 Tue Jan 01 00:00:00 EST 2013 1984 \n",
"... ... ... \n",
"20063 Tue Jan 01 00:00:00 EST 2013 1984 \n",
"20064 Tue Jan 01 00:00:00 EST 2013 1984 \n",
"20065 Tue Jan 01 00:00:00 EST 2013 1984 \n",
"20387 Tue Jan 01 00:00:00 EST 2013 1984 \n",
"21129 Tue Jan 01 00:00:00 EST 2013 2002 \n",
"23029 Tue Jan 01 00:00:00 EST 2013 1999 \n",
"23030 Tue Jan 01 00:00:00 EST 2013 1999 \n",
"23032 Tue Jan 01 00:00:00 EST 2013 1999 \n",
"23037 Tue Jan 01 00:00:00 EST 2013 1998 \n",
"23040 Tue Jan 01 00:00:00 EST 2013 2008 \n",
"\n",
"[1189 rows x 14 columns]"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# where are the values missing for drive?\n",
"(autos\n",
" [cols]\n",
" .query('drive.isna()'))"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/plain": [
"12093275"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# drive and make (in .astype) to category\n",
"(autos\n",
" [cols]\n",
" .assign(cylinders=autos.cylinders.fillna(0).astype('int8'),\n",
" displ=autos.displ.fillna(0).astype('float16'),\n",
" drive=autos.drive.fillna('Other').astype('category')\n",
" )\n",
" .astype({'highway08': 'int8', 'city08': 'int16', 'comb08': 'int16', 'fuelCost08': 'int16', \n",
" 'range': 'int16', 'year': 'int16', 'make': 'category'})\n",
" .memory_usage(deep=True)\n",
" .sum() # was 19,647,323\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"Automatic 4-spd 11047\n",
"Manual 5-spd 8361\n",
"Automatic 3-spd 3151\n",
"Automatic (S6) 3106\n",
"Manual 6-spd 2757\n",
"Automatic 5-spd 2203\n",
"Automatic (S8) 1665\n",
"Automatic 6-spd 1619\n",
"Manual 4-spd 1483\n",
"Automatic (S5) 833\n",
"Automatic (variable gear ratios) 826\n",
"Automatic 7-spd 724\n",
"Automatic 8-spd 433\n",
"Automatic (AM-S7) 424\n",
"Automatic (S7) 327\n",
"Automatic 9-spd 293\n",
"Automatic (AM7) 245\n",
"Automatic (S4) 233\n",
"Automatic (AV-S6) 208\n",
"Automatic (A1) 201\n",
"Automatic (AM6) 151\n",
"Automatic (AV-S7) 139\n",
"Automatic (S10) 124\n",
"Automatic (AM-S6) 116\n",
"Manual 7-spd 114\n",
"Automatic (S9) 86\n",
"Manual 3-spd 77\n",
"Automatic (AM-S8) 60\n",
"Automatic (AV-S8) 47\n",
"Automatic 10-spd 25\n",
"Manual 4-spd Doubled 17\n",
"Automatic (AM5) 14\n",
"NaN 11\n",
"Automatic (AV-S10) 11\n",
"Automatic (AM8) 6\n",
"Automatic (AM-S9) 3\n",
"Automatic (L3) 2\n",
"Automatic (L4) 2\n",
"Name: trany, dtype: int64"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# let's inspect trany\n",
"# looks like it has two pieces of information embedded in column\n",
"(autos.trany.value_counts(dropna=False))"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/plain": [
"10631047"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# add automatic, speeds from trany, then drop trany\n",
"(autos\n",
" [cols]\n",
" .assign(cylinders=autos.cylinders.fillna(0).astype('int8'),\n",
" displ=autos.displ.fillna(0).astype('float16'),\n",
" drive=autos.drive.fillna('Other').astype('category'),\n",
" automatic=autos.trany.str.contains('Auto'),\n",
" speeds=autos.trany.str.extract(r'(\\d)+').fillna('20').astype('int8')\n",
" )\n",
" .astype({'highway08': 'int8', 'city08': 'int16', 'comb08': 'int16', 'fuelCost08': 'int16', \n",
" 'range': 'int16', 'year': 'int16', 'make': 'category'})\n",
" .drop(columns=['trany'])\n",
" .memory_usage(deep=True)\n",
" .sum() # was 19,647,323\n",
")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Dates"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"scrolled": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/matt/envs/menv/lib/python3.8/site-packages/dateutil/parser/_parser.py:1213: UnknownTimezoneWarning: tzname EST identified but not understood. Pass `tzinfos` argument in order to correctly return a timezone-aware datetime. In a future version, this will raise an exception.\n",
" warnings.warn(\"tzname {tzname} identified but not understood. \"\n",
"/home/matt/envs/menv/lib/python3.8/site-packages/dateutil/parser/_parser.py:1213: UnknownTimezoneWarning: tzname EDT identified but not understood. Pass `tzinfos` argument in order to correctly return a timezone-aware datetime. In a future version, this will raise an exception.\n",
" warnings.warn(\"tzname {tzname} identified but not understood. \"\n"
]
},
{
"data": {
"text/plain": [
"7462959"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# add createdOn\n",
"(autos\n",
" [cols]\n",
" .assign(cylinders=autos.cylinders.fillna(0).astype('int8'),\n",
" displ=autos.displ.fillna(0).astype('float16'),\n",
" drive=autos.drive.fillna('Other').astype('category'),\n",
" automatic=autos.trany.str.contains('Auto'),\n",
" speeds=autos.trany.str.extract(r'(\\d)+').fillna('20').astype('int8'),\n",
" createdOn=pd.to_datetime(autos.createdOn).dt.tz_localize('America/New_York')\n",
" )\n",
" .astype({'highway08': 'int8', 'city08': 'int16', 'comb08': 'int16', 'fuelCost08': 'int16', \n",
" 'range': 'int16', 'year': 'int16', 'make': 'category'})\n",
" .drop(columns=['trany'])\n",
" .memory_usage(deep=True)\n",
" .sum() # was 19,647,323\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"0 Tue Jan 01 00:00:00 EST 2013\n",
"1 Tue Jan 01 00:00:00 EST 2013\n",
"2 Tue Jan 01 00:00:00 EST 2013\n",
"3 Tue Jan 01 00:00:00 EST 2013\n",
"4 Tue Jan 01 00:00:00 EST 2013\n",
"5 Tue Jan 01 00:00:00 EST 2013\n",
"6 Tue Jan 01 00:00:00 EST 2013\n",
"7 Tue Jan 01 00:00:00 EST 2013\n",
"8 Tue Jan 01 00:00:00 EST 2013\n",
"9 Tue Jan 01 00:00:00 EST 2013\n",
" ... \n",
"41134 Tue Jan 01 00:00:00 EST 2013\n",
"41135 Tue Jan 01 00:00:00 EST 2013\n",
"41136 Tue Jan 01 00:00:00 EST 2013\n",
"41137 Tue Jan 01 00:00:00 EST 2013\n",
"41138 Tue Jan 01 00:00:00 EST 2013\n",
"41139 Tue Jan 01 00:00:00 EST 2013\n",
"41140 Tue Jan 01 00:00:00 EST 2013\n",
"41141 Tue Jan 01 00:00:00 EST 2013\n",
"41142 Tue Jan 01 00:00:00 EST 2013\n",
"41143 Tue Jan 01 00:00:00 EST 2013\n",
"Name: createdOn, Length: 41144, dtype: object"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Python doesn't like EST/EDT\n",
"autos[cols].createdOn"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/plain": [
"NaN 16153\n",
"(FFS) 8827\n",
"SIDI 5526\n",
"(FFS) CA model 926\n",
"(FFS) (MPFI) 734\n",
"FFV 701\n",
"(FFS,TRBO) 666\n",
"(350 V8) (FFS) 411\n",
"(GUZZLER) (FFS) 366\n",
"SOHC 354\n",
" ... \n",
"B234L/R4 (FFS,TRBO) 1\n",
"GUZZLER V8 FFS,TURBO 1\n",
"4.6M FFS MPFI 1\n",
"CNG FFS 1\n",
"POLICE FFS MPFI 1\n",
"B308E5 FFS,TURBO 1\n",
"5.4E-R FFS MPFI 1\n",
"V-6 FFS 1\n",
"(GUZZLER) (FFS) (S-CHARGE) 1\n",
"R-ENG (FFS,TRBO) 1\n",
"Name: eng_dscr, Length: 558, dtype: int64"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Fix date warnings - move on to eng_dscr\n",
"# http://www.fueleconomy.gov/feg/findacarhelp.shtml#trany\n",
"(autos\n",
" [cols]\n",
" .assign(cylinders=autos.cylinders.fillna(0).astype('int8'),\n",
" displ=autos.displ.fillna(0).astype('float16'),\n",
" drive=autos.drive.fillna('Other').astype('category'),\n",
" automatic=autos.trany.str.contains('Auto'),\n",
" speeds=autos.trany.str.extract(r'(\\d)+').fillna('20').astype('int8'),\n",
" createdOn=pd.to_datetime(autos.createdOn.replace({' EDT': '-04:00',\n",
" ' EST': '-05:00'}, regex=True), utc=True).dt.tz_convert('America/New_York')\n",
" )\n",
" .astype({'highway08': 'int8', 'city08': 'int16', 'comb08': 'int16', 'fuelCost08': 'int16', \n",
" 'range': 'int16', 'year': 'int16', 'make': 'category'})\n",
" .drop(columns=['trany'])\n",
" .eng_dscr\n",
" .value_counts(dropna=False)\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/plain": [
"6701302"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# add ffs (Feedback fuel system), drop eng_descr\n",
"(autos\n",
" [cols]\n",
" .assign(cylinders=autos.cylinders.fillna(0).astype('int8'),\n",
" displ=autos.displ.fillna(0).astype('float16'),\n",
" drive=autos.drive.fillna('Other').astype('category'),\n",
" automatic=autos.trany.str.contains('Auto'),\n",
" speeds=autos.trany.str.extract(r'(\\d)+').fillna('20').astype('int8'),\n",
" createdOn=pd.to_datetime(autos.createdOn.replace({' EDT': '-04:00',\n",
" ' EST': '-05:00'}, regex=True), utc=True).dt.tz_convert('America/New_York'),\n",
" ffs=autos.eng_dscr.str.contains('FFS')\n",
" )\n",
" .astype({'highway08': 'int8', 'city08': 'int16', 'comb08': 'int16', 'fuelCost08': 'int16', \n",
" 'range': 'int16', 'year': 'int16', 'make': 'category'})\n",
" .drop(columns=['trany', 'eng_dscr'])\n",
" .memory_usage(deep=True)\n",
" .sum() # was 19,647,323\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"lines_to_next_cell": 0,
"scrolled": true
},
"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>city08</th>\n",
" <th>comb08</th>\n",
" <th>highway08</th>\n",
" <th>cylinders</th>\n",
" <th>displ</th>\n",
" <th>drive</th>\n",
" <th>fuelCost08</th>\n",
" <th>make</th>\n",
" <th>model</th>\n",
" <th>range</th>\n",
" <th>createdOn</th>\n",
" <th>year</th>\n",
" <th>automatic</th>\n",
" <th>speeds</th>\n",
" <th>ffs</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>19</td>\n",
" <td>21</td>\n",
" <td>25</td>\n",
" <td>4</td>\n",
" <td>2.000000</td>\n",
" <td>Rear-Wheel Drive</td>\n",
" <td>2000</td>\n",
" <td>Alfa Romeo</td>\n",
" <td>Spider Veloce 2000</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1985</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>9</td>\n",
" <td>11</td>\n",
" <td>14</td>\n",
" <td>12</td>\n",
" <td>4.898438</td>\n",
" <td>Rear-Wheel Drive</td>\n",
" <td>3850</td>\n",
" <td>Ferrari</td>\n",
" <td>Testarossa</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1985</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>23</td>\n",
" <td>27</td>\n",
" <td>33</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1550</td>\n",
" <td>Dodge</td>\n",
" <td>Charger</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1985</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>10</td>\n",
" <td>11</td>\n",
" <td>12</td>\n",
" <td>8</td>\n",
" <td>5.199219</td>\n",
" <td>Rear-Wheel Drive</td>\n",
" <td>3850</td>\n",
" <td>Dodge</td>\n",
" <td>B150/B250 Wagon 2WD</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1985</td>\n",
" <td>True</td>\n",
" <td>3</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>17</td>\n",
" <td>19</td>\n",
" <td>23</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>4-Wheel or All-Wheel Drive</td>\n",
" <td>2700</td>\n",
" <td>Subaru</td>\n",
" <td>Legacy AWD Turbo</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>21</td>\n",
" <td>22</td>\n",
" <td>24</td>\n",
" <td>4</td>\n",
" <td>1.799805</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1900</td>\n",
" <td>Subaru</td>\n",
" <td>Loyale</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>True</td>\n",
" <td>3</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>22</td>\n",
" <td>25</td>\n",
" <td>29</td>\n",
" <td>4</td>\n",
" <td>1.799805</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1700</td>\n",
" <td>Subaru</td>\n",
" <td>Loyale</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>23</td>\n",
" <td>24</td>\n",
" <td>26</td>\n",
" <td>4</td>\n",
" <td>1.599609</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1750</td>\n",
" <td>Toyota</td>\n",
" <td>Corolla</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>True</td>\n",
" <td>3</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>23</td>\n",
" <td>26</td>\n",
" <td>31</td>\n",
" <td>4</td>\n",
" <td>1.599609</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1600</td>\n",
" <td>Toyota</td>\n",
" <td>Corolla</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>23</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>4</td>\n",
" <td>1.799805</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1700</td>\n",
" <td>Toyota</td>\n",
" <td>Corolla</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>True</td>\n",
" <td>4</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41134</th>\n",
" <td>18</td>\n",
" <td>20</td>\n",
" <td>24</td>\n",
" <td>4</td>\n",
" <td>2.099609</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>2100</td>\n",
" <td>Saab</td>\n",
" <td>900</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41135</th>\n",
" <td>23</td>\n",
" <td>26</td>\n",
" <td>33</td>\n",
" <td>4</td>\n",
" <td>1.900391</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1600</td>\n",
" <td>Saturn</td>\n",
" <td>SL</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>True</td>\n",
" <td>4</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41136</th>\n",
" <td>21</td>\n",
" <td>24</td>\n",
" <td>30</td>\n",
" <td>4</td>\n",
" <td>1.900391</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1750</td>\n",
" <td>Saturn</td>\n",
" <td>SL</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>True</td>\n",
" <td>4</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41137</th>\n",
" <td>24</td>\n",
" <td>28</td>\n",
" <td>33</td>\n",
" <td>4</td>\n",
" <td>1.900391</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1500</td>\n",
" <td>Saturn</td>\n",
" <td>SL</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41138</th>\n",
" <td>21</td>\n",
" <td>25</td>\n",
" <td>32</td>\n",
" <td>4</td>\n",
" <td>1.900391</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1700</td>\n",
" <td>Saturn</td>\n",
" <td>SL</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41139</th>\n",
" <td>19</td>\n",
" <td>22</td>\n",
" <td>26</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1900</td>\n",
" <td>Subaru</td>\n",
" <td>Legacy</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>True</td>\n",
" <td>4</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41140</th>\n",
" <td>20</td>\n",
" <td>23</td>\n",
" <td>28</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1850</td>\n",
" <td>Subaru</td>\n",
" <td>Legacy</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41141</th>\n",
" <td>18</td>\n",
" <td>21</td>\n",
" <td>24</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>4-Wheel or All-Wheel Drive</td>\n",
" <td>2000</td>\n",
" <td>Subaru</td>\n",
" <td>Legacy AWD</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>True</td>\n",
" <td>4</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41142</th>\n",
" <td>18</td>\n",
" <td>21</td>\n",
" <td>24</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>4-Wheel or All-Wheel Drive</td>\n",
" <td>2000</td>\n",
" <td>Subaru</td>\n",
" <td>Legacy AWD</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41143</th>\n",
" <td>16</td>\n",
" <td>18</td>\n",
" <td>21</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>4-Wheel or All-Wheel Drive</td>\n",
" <td>2900</td>\n",
" <td>Subaru</td>\n",
" <td>Legacy AWD Turbo</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>True</td>\n",
" <td>4</td>\n",
" <td>True</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>41144 rows × 15 columns</p>\n",
"</div>"
],
"text/plain": [
" city08 comb08 highway08 cylinders displ \\\n",
"0 19 21 25 4 2.000000 \n",
"1 9 11 14 12 4.898438 \n",
"2 23 27 33 4 2.199219 \n",
"3 10 11 12 8 5.199219 \n",
"4 17 19 23 4 2.199219 \n",
"5 21 22 24 4 1.799805 \n",
"6 22 25 29 4 1.799805 \n",
"7 23 24 26 4 1.599609 \n",
"8 23 26 31 4 1.599609 \n",
"9 23 25 30 4 1.799805 \n",
"... ... ... ... ... ... \n",
"41134 18 20 24 4 2.099609 \n",
"41135 23 26 33 4 1.900391 \n",
"41136 21 24 30 4 1.900391 \n",
"41137 24 28 33 4 1.900391 \n",
"41138 21 25 32 4 1.900391 \n",
"41139 19 22 26 4 2.199219 \n",
"41140 20 23 28 4 2.199219 \n",
"41141 18 21 24 4 2.199219 \n",
"41142 18 21 24 4 2.199219 \n",
"41143 16 18 21 4 2.199219 \n",
"\n",
" drive fuelCost08 make \\\n",
"0 Rear-Wheel Drive 2000 Alfa Romeo \n",
"1 Rear-Wheel Drive 3850 Ferrari \n",
"2 Front-Wheel Drive 1550 Dodge \n",
"3 Rear-Wheel Drive 3850 Dodge \n",
"4 4-Wheel or All-Wheel Drive 2700 Subaru \n",
"5 Front-Wheel Drive 1900 Subaru \n",
"6 Front-Wheel Drive 1700 Subaru \n",
"7 Front-Wheel Drive 1750 Toyota \n",
"8 Front-Wheel Drive 1600 Toyota \n",
"9 Front-Wheel Drive 1700 Toyota \n",
"... ... ... ... \n",
"41134 Front-Wheel Drive 2100 Saab \n",
"41135 Front-Wheel Drive 1600 Saturn \n",
"41136 Front-Wheel Drive 1750 Saturn \n",
"41137 Front-Wheel Drive 1500 Saturn \n",
"41138 Front-Wheel Drive 1700 Saturn \n",
"41139 Front-Wheel Drive 1900 Subaru \n",
"41140 Front-Wheel Drive 1850 Subaru \n",
"41141 4-Wheel or All-Wheel Drive 2000 Subaru \n",
"41142 4-Wheel or All-Wheel Drive 2000 Subaru \n",
"41143 4-Wheel or All-Wheel Drive 2900 Subaru \n",
"\n",
" model range createdOn year automatic \\\n",
"0 Spider Veloce 2000 0 2013-01-01 00:00:00-05:00 1985 False \n",
"1 Testarossa 0 2013-01-01 00:00:00-05:00 1985 False \n",
"2 Charger 0 2013-01-01 00:00:00-05:00 1985 False \n",
"3 B150/B250 Wagon 2WD 0 2013-01-01 00:00:00-05:00 1985 True \n",
"4 Legacy AWD Turbo 0 2013-01-01 00:00:00-05:00 1993 False \n",
"5 Loyale 0 2013-01-01 00:00:00-05:00 1993 True \n",
"6 Loyale 0 2013-01-01 00:00:00-05:00 1993 False \n",
"7 Corolla 0 2013-01-01 00:00:00-05:00 1993 True \n",
"8 Corolla 0 2013-01-01 00:00:00-05:00 1993 False \n",
"9 Corolla 0 2013-01-01 00:00:00-05:00 1993 True \n",
"... ... ... ... ... ... \n",
"41134 900 0 2013-01-01 00:00:00-05:00 1993 False \n",
"41135 SL 0 2013-01-01 00:00:00-05:00 1993 True \n",
"41136 SL 0 2013-01-01 00:00:00-05:00 1993 True \n",
"41137 SL 0 2013-01-01 00:00:00-05:00 1993 False \n",
"41138 SL 0 2013-01-01 00:00:00-05:00 1993 False \n",
"41139 Legacy 0 2013-01-01 00:00:00-05:00 1993 True \n",
"41140 Legacy 0 2013-01-01 00:00:00-05:00 1993 False \n",
"41141 Legacy AWD 0 2013-01-01 00:00:00-05:00 1993 True \n",
"41142 Legacy AWD 0 2013-01-01 00:00:00-05:00 1993 False \n",
"41143 Legacy AWD Turbo 0 2013-01-01 00:00:00-05:00 1993 True \n",
"\n",
" speeds ffs \n",
"0 5 True \n",
"1 5 False \n",
"2 5 True \n",
"3 3 NaN \n",
"4 5 True \n",
"5 3 True \n",
"6 5 True \n",
"7 3 True \n",
"8 5 True \n",
"9 4 True \n",
"... ... ... \n",
"41134 5 True \n",
"41135 4 True \n",
"41136 4 True \n",
"41137 5 True \n",
"41138 5 True \n",
"41139 4 True \n",
"41140 5 True \n",
"41141 4 True \n",
"41142 5 True \n",
"41143 4 True \n",
"\n",
"[41144 rows x 15 columns]"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# a glorious function\n",
"def tweak_autos(autos):\n",
" cols = ['city08', 'comb08', 'highway08', 'cylinders', 'displ', 'drive', 'eng_dscr', \n",
" 'fuelCost08', 'make', 'model', 'trany', 'range', 'createdOn', 'year']\n",
" return (autos\n",
" [cols]\n",
" .assign(cylinders=autos.cylinders.fillna(0).astype('int8'),\n",
" displ=autos.displ.fillna(0).astype('float16'),\n",
" drive=autos.drive.fillna('Other').astype('category'),\n",
" automatic=autos.trany.str.contains('Auto'),\n",
" speeds=autos.trany.str.extract(r'(\\d)+').fillna('20').astype('int8'),\n",
" createdOn=pd.to_datetime(autos.createdOn.replace({' EDT': '-04:00',\n",
" ' EST': '-05:00'}, regex=True), utc=True).dt.tz_convert('America/New_York'),\n",
" ffs=autos.eng_dscr.str.contains('FFS')\n",
" )\n",
" .astype({'highway08': 'int8', 'city08': 'int16', 'comb08': 'int16', 'fuelCost08': 'int16',\n",
" 'range': 'int16', 'year': 'int16', 'make': 'category'})\n",
" .drop(columns=['trany', 'eng_dscr'])\n",
" )\n",
"\n",
"tweak_autos(autos)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"lines_to_next_cell": 2
},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Chain\n",
"\n",
"Chaining is also called \"flow\" programming. Rather than making intermediate variables, just leverage the fact that most operations return a new object and work on that.\n",
"\n",
"The chain should read like a recipe of ordered steps.\n",
"\n",
"(BTW, this is actually what we did above.)\n",
"\n",
"<div class='alert alert-warning'>\n",
" Hint: Leverage <tt>.pipe</tt> if you can't find a way to chain 😉🐼💪\n",
"</div>\n",
" \n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"scrolled": true
},
"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>city08</th>\n",
" <th>comb08</th>\n",
" <th>highway08</th>\n",
" <th>cylinders</th>\n",
" <th>displ</th>\n",
" <th>drive</th>\n",
" <th>fuelCost08</th>\n",
" <th>make</th>\n",
" <th>model</th>\n",
" <th>range</th>\n",
" <th>createdOn</th>\n",
" <th>year</th>\n",
" <th>automatic</th>\n",
" <th>speeds</th>\n",
" <th>ffs</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>19</td>\n",
" <td>21</td>\n",
" <td>25</td>\n",
" <td>4</td>\n",
" <td>2.000000</td>\n",
" <td>Rear-Wheel Drive</td>\n",
" <td>2000</td>\n",
" <td>Alfa Romeo</td>\n",
" <td>Spider Veloce 2000</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1985</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>9</td>\n",
" <td>11</td>\n",
" <td>14</td>\n",
" <td>12</td>\n",
" <td>4.898438</td>\n",
" <td>Rear-Wheel Drive</td>\n",
" <td>3850</td>\n",
" <td>Ferrari</td>\n",
" <td>Testarossa</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1985</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>23</td>\n",
" <td>27</td>\n",
" <td>33</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1550</td>\n",
" <td>Dodge</td>\n",
" <td>Charger</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1985</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>10</td>\n",
" <td>11</td>\n",
" <td>12</td>\n",
" <td>8</td>\n",
" <td>5.199219</td>\n",
" <td>Rear-Wheel Drive</td>\n",
" <td>3850</td>\n",
" <td>Dodge</td>\n",
" <td>B150/B250 Wagon 2WD</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1985</td>\n",
" <td>True</td>\n",
" <td>3</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>17</td>\n",
" <td>19</td>\n",
" <td>23</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>4-Wheel or All-Wheel Drive</td>\n",
" <td>2700</td>\n",
" <td>Subaru</td>\n",
" <td>Legacy AWD Turbo</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>21</td>\n",
" <td>22</td>\n",
" <td>24</td>\n",
" <td>4</td>\n",
" <td>1.799805</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1900</td>\n",
" <td>Subaru</td>\n",
" <td>Loyale</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>True</td>\n",
" <td>3</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>22</td>\n",
" <td>25</td>\n",
" <td>29</td>\n",
" <td>4</td>\n",
" <td>1.799805</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1700</td>\n",
" <td>Subaru</td>\n",
" <td>Loyale</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>23</td>\n",
" <td>24</td>\n",
" <td>26</td>\n",
" <td>4</td>\n",
" <td>1.599609</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1750</td>\n",
" <td>Toyota</td>\n",
" <td>Corolla</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>True</td>\n",
" <td>3</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>23</td>\n",
" <td>26</td>\n",
" <td>31</td>\n",
" <td>4</td>\n",
" <td>1.599609</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1600</td>\n",
" <td>Toyota</td>\n",
" <td>Corolla</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>23</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>4</td>\n",
" <td>1.799805</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1700</td>\n",
" <td>Toyota</td>\n",
" <td>Corolla</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>True</td>\n",
" <td>4</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41134</th>\n",
" <td>18</td>\n",
" <td>20</td>\n",
" <td>24</td>\n",
" <td>4</td>\n",
" <td>2.099609</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>2100</td>\n",
" <td>Saab</td>\n",
" <td>900</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41135</th>\n",
" <td>23</td>\n",
" <td>26</td>\n",
" <td>33</td>\n",
" <td>4</td>\n",
" <td>1.900391</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1600</td>\n",
" <td>Saturn</td>\n",
" <td>SL</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>True</td>\n",
" <td>4</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41136</th>\n",
" <td>21</td>\n",
" <td>24</td>\n",
" <td>30</td>\n",
" <td>4</td>\n",
" <td>1.900391</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1750</td>\n",
" <td>Saturn</td>\n",
" <td>SL</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>True</td>\n",
" <td>4</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41137</th>\n",
" <td>24</td>\n",
" <td>28</td>\n",
" <td>33</td>\n",
" <td>4</td>\n",
" <td>1.900391</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1500</td>\n",
" <td>Saturn</td>\n",
" <td>SL</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41138</th>\n",
" <td>21</td>\n",
" <td>25</td>\n",
" <td>32</td>\n",
" <td>4</td>\n",
" <td>1.900391</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1700</td>\n",
" <td>Saturn</td>\n",
" <td>SL</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41139</th>\n",
" <td>19</td>\n",
" <td>22</td>\n",
" <td>26</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1900</td>\n",
" <td>Subaru</td>\n",
" <td>Legacy</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>True</td>\n",
" <td>4</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41140</th>\n",
" <td>20</td>\n",
" <td>23</td>\n",
" <td>28</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1850</td>\n",
" <td>Subaru</td>\n",
" <td>Legacy</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41141</th>\n",
" <td>18</td>\n",
" <td>21</td>\n",
" <td>24</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>4-Wheel or All-Wheel Drive</td>\n",
" <td>2000</td>\n",
" <td>Subaru</td>\n",
" <td>Legacy AWD</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>True</td>\n",
" <td>4</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41142</th>\n",
" <td>18</td>\n",
" <td>21</td>\n",
" <td>24</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>4-Wheel or All-Wheel Drive</td>\n",
" <td>2000</td>\n",
" <td>Subaru</td>\n",
" <td>Legacy AWD</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41143</th>\n",
" <td>16</td>\n",
" <td>18</td>\n",
" <td>21</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>4-Wheel or All-Wheel Drive</td>\n",
" <td>2900</td>\n",
" <td>Subaru</td>\n",
" <td>Legacy AWD Turbo</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>True</td>\n",
" <td>4</td>\n",
" <td>True</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>41144 rows × 15 columns</p>\n",
"</div>"
],
"text/plain": [
" city08 comb08 highway08 cylinders displ \\\n",
"0 19 21 25 4 2.000000 \n",
"1 9 11 14 12 4.898438 \n",
"2 23 27 33 4 2.199219 \n",
"3 10 11 12 8 5.199219 \n",
"4 17 19 23 4 2.199219 \n",
"5 21 22 24 4 1.799805 \n",
"6 22 25 29 4 1.799805 \n",
"7 23 24 26 4 1.599609 \n",
"8 23 26 31 4 1.599609 \n",
"9 23 25 30 4 1.799805 \n",
"... ... ... ... ... ... \n",
"41134 18 20 24 4 2.099609 \n",
"41135 23 26 33 4 1.900391 \n",
"41136 21 24 30 4 1.900391 \n",
"41137 24 28 33 4 1.900391 \n",
"41138 21 25 32 4 1.900391 \n",
"41139 19 22 26 4 2.199219 \n",
"41140 20 23 28 4 2.199219 \n",
"41141 18 21 24 4 2.199219 \n",
"41142 18 21 24 4 2.199219 \n",
"41143 16 18 21 4 2.199219 \n",
"\n",
" drive fuelCost08 make \\\n",
"0 Rear-Wheel Drive 2000 Alfa Romeo \n",
"1 Rear-Wheel Drive 3850 Ferrari \n",
"2 Front-Wheel Drive 1550 Dodge \n",
"3 Rear-Wheel Drive 3850 Dodge \n",
"4 4-Wheel or All-Wheel Drive 2700 Subaru \n",
"5 Front-Wheel Drive 1900 Subaru \n",
"6 Front-Wheel Drive 1700 Subaru \n",
"7 Front-Wheel Drive 1750 Toyota \n",
"8 Front-Wheel Drive 1600 Toyota \n",
"9 Front-Wheel Drive 1700 Toyota \n",
"... ... ... ... \n",
"41134 Front-Wheel Drive 2100 Saab \n",
"41135 Front-Wheel Drive 1600 Saturn \n",
"41136 Front-Wheel Drive 1750 Saturn \n",
"41137 Front-Wheel Drive 1500 Saturn \n",
"41138 Front-Wheel Drive 1700 Saturn \n",
"41139 Front-Wheel Drive 1900 Subaru \n",
"41140 Front-Wheel Drive 1850 Subaru \n",
"41141 4-Wheel or All-Wheel Drive 2000 Subaru \n",
"41142 4-Wheel or All-Wheel Drive 2000 Subaru \n",
"41143 4-Wheel or All-Wheel Drive 2900 Subaru \n",
"\n",
" model range createdOn year automatic \\\n",
"0 Spider Veloce 2000 0 2013-01-01 00:00:00-05:00 1985 False \n",
"1 Testarossa 0 2013-01-01 00:00:00-05:00 1985 False \n",
"2 Charger 0 2013-01-01 00:00:00-05:00 1985 False \n",
"3 B150/B250 Wagon 2WD 0 2013-01-01 00:00:00-05:00 1985 True \n",
"4 Legacy AWD Turbo 0 2013-01-01 00:00:00-05:00 1993 False \n",
"5 Loyale 0 2013-01-01 00:00:00-05:00 1993 True \n",
"6 Loyale 0 2013-01-01 00:00:00-05:00 1993 False \n",
"7 Corolla 0 2013-01-01 00:00:00-05:00 1993 True \n",
"8 Corolla 0 2013-01-01 00:00:00-05:00 1993 False \n",
"9 Corolla 0 2013-01-01 00:00:00-05:00 1993 True \n",
"... ... ... ... ... ... \n",
"41134 900 0 2013-01-01 00:00:00-05:00 1993 False \n",
"41135 SL 0 2013-01-01 00:00:00-05:00 1993 True \n",
"41136 SL 0 2013-01-01 00:00:00-05:00 1993 True \n",
"41137 SL 0 2013-01-01 00:00:00-05:00 1993 False \n",
"41138 SL 0 2013-01-01 00:00:00-05:00 1993 False \n",
"41139 Legacy 0 2013-01-01 00:00:00-05:00 1993 True \n",
"41140 Legacy 0 2013-01-01 00:00:00-05:00 1993 False \n",
"41141 Legacy AWD 0 2013-01-01 00:00:00-05:00 1993 True \n",
"41142 Legacy AWD 0 2013-01-01 00:00:00-05:00 1993 False \n",
"41143 Legacy AWD Turbo 0 2013-01-01 00:00:00-05:00 1993 True \n",
"\n",
" speeds ffs \n",
"0 5 True \n",
"1 5 False \n",
"2 5 True \n",
"3 3 NaN \n",
"4 5 True \n",
"5 3 True \n",
"6 5 True \n",
"7 3 True \n",
"8 5 True \n",
"9 4 True \n",
"... ... ... \n",
"41134 5 True \n",
"41135 4 True \n",
"41136 4 True \n",
"41137 5 True \n",
"41138 5 True \n",
"41139 4 True \n",
"41140 5 True \n",
"41141 4 True \n",
"41142 5 True \n",
"41143 4 True \n",
"\n",
"[41144 rows x 15 columns]"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def tweak_autos(autos):\n",
" cols = ['city08', 'comb08', 'highway08', 'cylinders', 'displ', 'drive', 'eng_dscr', \n",
" 'fuelCost08', 'make', 'model', 'trany', 'range', 'createdOn', 'year']\n",
" return (autos\n",
" [cols]\n",
" .assign(cylinders=autos.cylinders.fillna(0).astype('int8'),\n",
" displ=autos.displ.fillna(0).astype('float16'),\n",
" drive=autos.drive.fillna('Other').astype('category'),\n",
" automatic=autos.trany.str.contains('Auto'),\n",
" speeds=autos.trany.str.extract(r'(\\d)+').fillna('20').astype('int8'),\n",
" createdOn=pd.to_datetime(autos.createdOn.replace({' EDT': '-04:00',\n",
" ' EST': '-05:00'}, regex=True), utc=True).dt.tz_convert('America/New_York'),\n",
" ffs=autos.eng_dscr.str.contains('FFS')\n",
" )\n",
" .astype({'highway08': 'int8', 'city08': 'int16', 'comb08': 'int16', 'fuelCost08': 'int16', \n",
" 'range': 'int16', 'year': 'int16', 'make': 'category'})\n",
" .drop(columns=['trany', 'eng_dscr'])\n",
" )\n",
"\n",
"tweak_autos(autos)"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"<ipython-input-39-c7c24d2ec7ba>:5: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" a1['cylinders'] = cyls2\n",
"/home/matt/envs/menv/lib/python3.8/site-packages/pandas/core/generic.py:5516: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" self[name] = value\n",
"<ipython-input-39-c7c24d2ec7ba>:11: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" a1['automatic'] = autos.trany.str.contains('Auto')\n",
"<ipython-input-39-c7c24d2ec7ba>:15: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" a1['speeds'] = speedint\n",
"/home/matt/envs/menv/lib/python3.8/site-packages/dateutil/parser/_parser.py:1213: UnknownTimezoneWarning: tzname EST identified but not understood. Pass `tzinfos` argument in order to correctly return a timezone-aware datetime. In a future version, this will raise an exception.\n",
" warnings.warn(\"tzname {tzname} identified but not understood. \"\n",
"/home/matt/envs/menv/lib/python3.8/site-packages/dateutil/parser/_parser.py:1213: UnknownTimezoneWarning: tzname EDT identified but not understood. Pass `tzinfos` argument in order to correctly return a timezone-aware datetime. In a future version, this will raise an exception.\n",
" warnings.warn(\"tzname {tzname} identified but not understood. \"\n",
"<ipython-input-39-c7c24d2ec7ba>:17: UserWarning: Pandas doesn't allow columns to be created via a new attribute name - see https://pandas.pydata.org/pandas-docs/stable/indexing.html#attribute-access\n",
" a1.ffs=autos.eng_dscr.str.contains('FFS')\n",
"<ipython-input-39-c7c24d2ec7ba>:18: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" a1['highway08'] = autos.highway08.astype('int8')\n",
"<ipython-input-39-c7c24d2ec7ba>:19: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" a1['city08'] = autos.city08.astype('int8')\n",
"<ipython-input-39-c7c24d2ec7ba>:20: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" a1['comb08'] = autos.comb08.astype('int16')\n",
"<ipython-input-39-c7c24d2ec7ba>:21: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" a1['fuelCost08'] = autos.fuelCost08.astype('int16')\n",
"<ipython-input-39-c7c24d2ec7ba>:22: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" a1['range'] = autos.range.astype('int16')\n",
"<ipython-input-39-c7c24d2ec7ba>:23: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" a1['make'] = autos.make.astype('category')\n"
]
}
],
"source": [
"# compare chain to this mess\n",
"a1 = autos[cols]\n",
"cyls = autos.cylinders.fillna(0)\n",
"cyls2 = cyls.astype('int8')\n",
"a1['cylinders'] = cyls2\n",
"displ = a1.displ\n",
"displ2 = displ.fillna(0)\n",
"displ3 = displ2.astype('float16')\n",
"a1.displ = displ3\n",
"a1.drive = autos.drive.fillna('Other').astype('category')\n",
"a1['automatic'] = autos.trany.str.contains('Auto') \n",
"speed = autos.trany.str.extract(r'(\\d)+')\n",
"speedfill = speed.fillna('20')\n",
"speedint = speedfill.astype('int8')\n",
"a1['speeds'] = speedint\n",
"a1.createdOn=pd.to_datetime(autos.createdOn).dt.tz_localize('America/New_York')\n",
"a1.ffs=autos.eng_dscr.str.contains('FFS')\n",
"a1['highway08'] = autos.highway08.astype('int8')\n",
"a1['city08'] = autos.city08.astype('int8')\n",
"a1['comb08'] = autos.comb08.astype('int16')\n",
"a1['fuelCost08'] = autos.fuelCost08.astype('int16')\n",
"a1['range'] = autos.range.astype('int16')\n",
"a1['make'] = autos.make.astype('category')\n",
"a3 = a1.drop(columns=['trany', 'eng_dscr'])"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"scrolled": true
},
"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>city08</th>\n",
" <th>comb08</th>\n",
" <th>highway08</th>\n",
" <th>cylinders</th>\n",
" <th>displ</th>\n",
" <th>drive</th>\n",
" <th>eng_dscr</th>\n",
" <th>fuelCost08</th>\n",
" <th>make</th>\n",
" <th>model</th>\n",
" <th>trany</th>\n",
" <th>range</th>\n",
" <th>createdOn</th>\n",
" <th>year</th>\n",
" <th>automatic</th>\n",
" <th>speeds</th>\n",
" <th>ffs</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>19</td>\n",
" <td>21</td>\n",
" <td>25</td>\n",
" <td>4</td>\n",
" <td>2.000000</td>\n",
" <td>Rear-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>2000</td>\n",
" <td>Alfa Romeo</td>\n",
" <td>Spider Veloce 2000</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1985</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>9</td>\n",
" <td>11</td>\n",
" <td>14</td>\n",
" <td>12</td>\n",
" <td>4.898438</td>\n",
" <td>Rear-Wheel Drive</td>\n",
" <td>(GUZZLER)</td>\n",
" <td>3850</td>\n",
" <td>Ferrari</td>\n",
" <td>Testarossa</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1985</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>23</td>\n",
" <td>27</td>\n",
" <td>33</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>1550</td>\n",
" <td>Dodge</td>\n",
" <td>Charger</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1985</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>10</td>\n",
" <td>11</td>\n",
" <td>12</td>\n",
" <td>8</td>\n",
" <td>5.199219</td>\n",
" <td>Rear-Wheel Drive</td>\n",
" <td>NaN</td>\n",
" <td>3850</td>\n",
" <td>Dodge</td>\n",
" <td>B150/B250 Wagon 2WD</td>\n",
" <td>Automatic 3-spd</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1985</td>\n",
" <td>True</td>\n",
" <td>3</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>17</td>\n",
" <td>19</td>\n",
" <td>23</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>4-Wheel or All-Wheel Drive</td>\n",
" <td>(FFS,TRBO)</td>\n",
" <td>2700</td>\n",
" <td>Subaru</td>\n",
" <td>Legacy AWD Turbo</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>21</td>\n",
" <td>22</td>\n",
" <td>24</td>\n",
" <td>4</td>\n",
" <td>1.799805</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>1900</td>\n",
" <td>Subaru</td>\n",
" <td>Loyale</td>\n",
" <td>Automatic 3-spd</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>True</td>\n",
" <td>3</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>22</td>\n",
" <td>25</td>\n",
" <td>29</td>\n",
" <td>4</td>\n",
" <td>1.799805</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>1700</td>\n",
" <td>Subaru</td>\n",
" <td>Loyale</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>23</td>\n",
" <td>24</td>\n",
" <td>26</td>\n",
" <td>4</td>\n",
" <td>1.599609</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>1750</td>\n",
" <td>Toyota</td>\n",
" <td>Corolla</td>\n",
" <td>Automatic 3-spd</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>True</td>\n",
" <td>3</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>23</td>\n",
" <td>26</td>\n",
" <td>31</td>\n",
" <td>4</td>\n",
" <td>1.599609</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>1600</td>\n",
" <td>Toyota</td>\n",
" <td>Corolla</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>23</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>4</td>\n",
" <td>1.799805</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>1700</td>\n",
" <td>Toyota</td>\n",
" <td>Corolla</td>\n",
" <td>Automatic 4-spd</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>True</td>\n",
" <td>4</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41134</th>\n",
" <td>18</td>\n",
" <td>20</td>\n",
" <td>24</td>\n",
" <td>4</td>\n",
" <td>2.099609</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>2100</td>\n",
" <td>Saab</td>\n",
" <td>900</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41135</th>\n",
" <td>23</td>\n",
" <td>26</td>\n",
" <td>33</td>\n",
" <td>4</td>\n",
" <td>1.900391</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(TBI) (FFS)</td>\n",
" <td>1600</td>\n",
" <td>Saturn</td>\n",
" <td>SL</td>\n",
" <td>Automatic 4-spd</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>True</td>\n",
" <td>4</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41136</th>\n",
" <td>21</td>\n",
" <td>24</td>\n",
" <td>30</td>\n",
" <td>4</td>\n",
" <td>1.900391</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(MFI) (FFS)</td>\n",
" <td>1750</td>\n",
" <td>Saturn</td>\n",
" <td>SL</td>\n",
" <td>Automatic 4-spd</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>True</td>\n",
" <td>4</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41137</th>\n",
" <td>24</td>\n",
" <td>28</td>\n",
" <td>33</td>\n",
" <td>4</td>\n",
" <td>1.900391</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(TBI) (FFS)</td>\n",
" <td>1500</td>\n",
" <td>Saturn</td>\n",
" <td>SL</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41138</th>\n",
" <td>21</td>\n",
" <td>25</td>\n",
" <td>32</td>\n",
" <td>4</td>\n",
" <td>1.900391</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(MFI) (FFS)</td>\n",
" <td>1700</td>\n",
" <td>Saturn</td>\n",
" <td>SL</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41139</th>\n",
" <td>19</td>\n",
" <td>22</td>\n",
" <td>26</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>1900</td>\n",
" <td>Subaru</td>\n",
" <td>Legacy</td>\n",
" <td>Automatic 4-spd</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>True</td>\n",
" <td>4</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41140</th>\n",
" <td>20</td>\n",
" <td>23</td>\n",
" <td>28</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>1850</td>\n",
" <td>Subaru</td>\n",
" <td>Legacy</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41141</th>\n",
" <td>18</td>\n",
" <td>21</td>\n",
" <td>24</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>4-Wheel or All-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>2000</td>\n",
" <td>Subaru</td>\n",
" <td>Legacy AWD</td>\n",
" <td>Automatic 4-spd</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>True</td>\n",
" <td>4</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41142</th>\n",
" <td>18</td>\n",
" <td>21</td>\n",
" <td>24</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>4-Wheel or All-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>2000</td>\n",
" <td>Subaru</td>\n",
" <td>Legacy AWD</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41143</th>\n",
" <td>16</td>\n",
" <td>18</td>\n",
" <td>21</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>4-Wheel or All-Wheel Drive</td>\n",
" <td>(FFS,TRBO)</td>\n",
" <td>2900</td>\n",
" <td>Subaru</td>\n",
" <td>Legacy AWD Turbo</td>\n",
" <td>Automatic 4-spd</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>True</td>\n",
" <td>4</td>\n",
" <td>True</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>41144 rows × 17 columns</p>\n",
"</div>"
],
"text/plain": [
" city08 comb08 highway08 cylinders displ \\\n",
"0 19 21 25 4 2.000000 \n",
"1 9 11 14 12 4.898438 \n",
"2 23 27 33 4 2.199219 \n",
"3 10 11 12 8 5.199219 \n",
"4 17 19 23 4 2.199219 \n",
"5 21 22 24 4 1.799805 \n",
"6 22 25 29 4 1.799805 \n",
"7 23 24 26 4 1.599609 \n",
"8 23 26 31 4 1.599609 \n",
"9 23 25 30 4 1.799805 \n",
"... ... ... ... ... ... \n",
"41134 18 20 24 4 2.099609 \n",
"41135 23 26 33 4 1.900391 \n",
"41136 21 24 30 4 1.900391 \n",
"41137 24 28 33 4 1.900391 \n",
"41138 21 25 32 4 1.900391 \n",
"41139 19 22 26 4 2.199219 \n",
"41140 20 23 28 4 2.199219 \n",
"41141 18 21 24 4 2.199219 \n",
"41142 18 21 24 4 2.199219 \n",
"41143 16 18 21 4 2.199219 \n",
"\n",
" drive eng_dscr fuelCost08 make \\\n",
"0 Rear-Wheel Drive (FFS) 2000 Alfa Romeo \n",
"1 Rear-Wheel Drive (GUZZLER) 3850 Ferrari \n",
"2 Front-Wheel Drive (FFS) 1550 Dodge \n",
"3 Rear-Wheel Drive NaN 3850 Dodge \n",
"4 4-Wheel or All-Wheel Drive (FFS,TRBO) 2700 Subaru \n",
"5 Front-Wheel Drive (FFS) 1900 Subaru \n",
"6 Front-Wheel Drive (FFS) 1700 Subaru \n",
"7 Front-Wheel Drive (FFS) 1750 Toyota \n",
"8 Front-Wheel Drive (FFS) 1600 Toyota \n",
"9 Front-Wheel Drive (FFS) 1700 Toyota \n",
"... ... ... ... ... \n",
"41134 Front-Wheel Drive (FFS) 2100 Saab \n",
"41135 Front-Wheel Drive (TBI) (FFS) 1600 Saturn \n",
"41136 Front-Wheel Drive (MFI) (FFS) 1750 Saturn \n",
"41137 Front-Wheel Drive (TBI) (FFS) 1500 Saturn \n",
"41138 Front-Wheel Drive (MFI) (FFS) 1700 Saturn \n",
"41139 Front-Wheel Drive (FFS) 1900 Subaru \n",
"41140 Front-Wheel Drive (FFS) 1850 Subaru \n",
"41141 4-Wheel or All-Wheel Drive (FFS) 2000 Subaru \n",
"41142 4-Wheel or All-Wheel Drive (FFS) 2000 Subaru \n",
"41143 4-Wheel or All-Wheel Drive (FFS,TRBO) 2900 Subaru \n",
"\n",
" model trany range createdOn \\\n",
"0 Spider Veloce 2000 Manual 5-spd 0 2013-01-01 00:00:00-05:00 \n",
"1 Testarossa Manual 5-spd 0 2013-01-01 00:00:00-05:00 \n",
"2 Charger Manual 5-spd 0 2013-01-01 00:00:00-05:00 \n",
"3 B150/B250 Wagon 2WD Automatic 3-spd 0 2013-01-01 00:00:00-05:00 \n",
"4 Legacy AWD Turbo Manual 5-spd 0 2013-01-01 00:00:00-05:00 \n",
"5 Loyale Automatic 3-spd 0 2013-01-01 00:00:00-05:00 \n",
"6 Loyale Manual 5-spd 0 2013-01-01 00:00:00-05:00 \n",
"7 Corolla Automatic 3-spd 0 2013-01-01 00:00:00-05:00 \n",
"8 Corolla Manual 5-spd 0 2013-01-01 00:00:00-05:00 \n",
"9 Corolla Automatic 4-spd 0 2013-01-01 00:00:00-05:00 \n",
"... ... ... ... ... \n",
"41134 900 Manual 5-spd 0 2013-01-01 00:00:00-05:00 \n",
"41135 SL Automatic 4-spd 0 2013-01-01 00:00:00-05:00 \n",
"41136 SL Automatic 4-spd 0 2013-01-01 00:00:00-05:00 \n",
"41137 SL Manual 5-spd 0 2013-01-01 00:00:00-05:00 \n",
"41138 SL Manual 5-spd 0 2013-01-01 00:00:00-05:00 \n",
"41139 Legacy Automatic 4-spd 0 2013-01-01 00:00:00-05:00 \n",
"41140 Legacy Manual 5-spd 0 2013-01-01 00:00:00-05:00 \n",
"41141 Legacy AWD Automatic 4-spd 0 2013-01-01 00:00:00-05:00 \n",
"41142 Legacy AWD Manual 5-spd 0 2013-01-01 00:00:00-05:00 \n",
"41143 Legacy AWD Turbo Automatic 4-spd 0 2013-01-01 00:00:00-05:00 \n",
"\n",
" year automatic speeds ffs \n",
"0 1985 False 5 True \n",
"1 1985 False 5 False \n",
"2 1985 False 5 True \n",
"3 1985 True 3 NaN \n",
"4 1993 False 5 True \n",
"5 1993 True 3 True \n",
"6 1993 False 5 True \n",
"7 1993 True 3 True \n",
"8 1993 False 5 True \n",
"9 1993 True 4 True \n",
"... ... ... ... ... \n",
"41134 1993 False 5 True \n",
"41135 1993 True 4 True \n",
"41136 1993 True 4 True \n",
"41137 1993 False 5 True \n",
"41138 1993 False 5 True \n",
"41139 1993 True 4 True \n",
"41140 1993 False 5 True \n",
"41141 1993 True 4 True \n",
"41142 1993 False 5 True \n",
"41143 1993 True 4 True \n",
"\n",
"[41144 rows x 17 columns]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"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>city08</th>\n",
" <th>comb08</th>\n",
" <th>highway08</th>\n",
" <th>cylinders</th>\n",
" <th>displ</th>\n",
" <th>drive</th>\n",
" <th>fuelCost08</th>\n",
" <th>make</th>\n",
" <th>model</th>\n",
" <th>range</th>\n",
" <th>createdOn</th>\n",
" <th>year</th>\n",
" <th>automatic</th>\n",
" <th>speeds</th>\n",
" <th>ffs</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>19</td>\n",
" <td>21</td>\n",
" <td>25</td>\n",
" <td>4</td>\n",
" <td>2.000000</td>\n",
" <td>Rear-Wheel Drive</td>\n",
" <td>2000</td>\n",
" <td>Alfa Romeo</td>\n",
" <td>Spider Veloce 2000</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1985</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>9</td>\n",
" <td>11</td>\n",
" <td>14</td>\n",
" <td>12</td>\n",
" <td>4.898438</td>\n",
" <td>Rear-Wheel Drive</td>\n",
" <td>3850</td>\n",
" <td>Ferrari</td>\n",
" <td>Testarossa</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1985</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>23</td>\n",
" <td>27</td>\n",
" <td>33</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1550</td>\n",
" <td>Dodge</td>\n",
" <td>Charger</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1985</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>10</td>\n",
" <td>11</td>\n",
" <td>12</td>\n",
" <td>8</td>\n",
" <td>5.199219</td>\n",
" <td>Rear-Wheel Drive</td>\n",
" <td>3850</td>\n",
" <td>Dodge</td>\n",
" <td>B150/B250 Wagon 2WD</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1985</td>\n",
" <td>True</td>\n",
" <td>3</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>17</td>\n",
" <td>19</td>\n",
" <td>23</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>4-Wheel or All-Wheel Drive</td>\n",
" <td>2700</td>\n",
" <td>Subaru</td>\n",
" <td>Legacy AWD Turbo</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>21</td>\n",
" <td>22</td>\n",
" <td>24</td>\n",
" <td>4</td>\n",
" <td>1.799805</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1900</td>\n",
" <td>Subaru</td>\n",
" <td>Loyale</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>True</td>\n",
" <td>3</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>22</td>\n",
" <td>25</td>\n",
" <td>29</td>\n",
" <td>4</td>\n",
" <td>1.799805</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1700</td>\n",
" <td>Subaru</td>\n",
" <td>Loyale</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>23</td>\n",
" <td>24</td>\n",
" <td>26</td>\n",
" <td>4</td>\n",
" <td>1.599609</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1750</td>\n",
" <td>Toyota</td>\n",
" <td>Corolla</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>True</td>\n",
" <td>3</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>23</td>\n",
" <td>26</td>\n",
" <td>31</td>\n",
" <td>4</td>\n",
" <td>1.599609</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1600</td>\n",
" <td>Toyota</td>\n",
" <td>Corolla</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>23</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>4</td>\n",
" <td>1.799805</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1700</td>\n",
" <td>Toyota</td>\n",
" <td>Corolla</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>True</td>\n",
" <td>4</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41134</th>\n",
" <td>18</td>\n",
" <td>20</td>\n",
" <td>24</td>\n",
" <td>4</td>\n",
" <td>2.099609</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>2100</td>\n",
" <td>Saab</td>\n",
" <td>900</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41135</th>\n",
" <td>23</td>\n",
" <td>26</td>\n",
" <td>33</td>\n",
" <td>4</td>\n",
" <td>1.900391</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1600</td>\n",
" <td>Saturn</td>\n",
" <td>SL</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>True</td>\n",
" <td>4</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41136</th>\n",
" <td>21</td>\n",
" <td>24</td>\n",
" <td>30</td>\n",
" <td>4</td>\n",
" <td>1.900391</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1750</td>\n",
" <td>Saturn</td>\n",
" <td>SL</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>True</td>\n",
" <td>4</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41137</th>\n",
" <td>24</td>\n",
" <td>28</td>\n",
" <td>33</td>\n",
" <td>4</td>\n",
" <td>1.900391</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1500</td>\n",
" <td>Saturn</td>\n",
" <td>SL</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41138</th>\n",
" <td>21</td>\n",
" <td>25</td>\n",
" <td>32</td>\n",
" <td>4</td>\n",
" <td>1.900391</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1700</td>\n",
" <td>Saturn</td>\n",
" <td>SL</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41139</th>\n",
" <td>19</td>\n",
" <td>22</td>\n",
" <td>26</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1900</td>\n",
" <td>Subaru</td>\n",
" <td>Legacy</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>True</td>\n",
" <td>4</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41140</th>\n",
" <td>20</td>\n",
" <td>23</td>\n",
" <td>28</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>1850</td>\n",
" <td>Subaru</td>\n",
" <td>Legacy</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41141</th>\n",
" <td>18</td>\n",
" <td>21</td>\n",
" <td>24</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>4-Wheel or All-Wheel Drive</td>\n",
" <td>2000</td>\n",
" <td>Subaru</td>\n",
" <td>Legacy AWD</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>True</td>\n",
" <td>4</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41142</th>\n",
" <td>18</td>\n",
" <td>21</td>\n",
" <td>24</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>4-Wheel or All-Wheel Drive</td>\n",
" <td>2000</td>\n",
" <td>Subaru</td>\n",
" <td>Legacy AWD</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>False</td>\n",
" <td>5</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41143</th>\n",
" <td>16</td>\n",
" <td>18</td>\n",
" <td>21</td>\n",
" <td>4</td>\n",
" <td>2.199219</td>\n",
" <td>4-Wheel or All-Wheel Drive</td>\n",
" <td>2900</td>\n",
" <td>Subaru</td>\n",
" <td>Legacy AWD Turbo</td>\n",
" <td>0</td>\n",
" <td>2013-01-01 00:00:00-05:00</td>\n",
" <td>1993</td>\n",
" <td>True</td>\n",
" <td>4</td>\n",
" <td>True</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>41144 rows × 15 columns</p>\n",
"</div>"
],
"text/plain": [
" city08 comb08 highway08 cylinders displ \\\n",
"0 19 21 25 4 2.000000 \n",
"1 9 11 14 12 4.898438 \n",
"2 23 27 33 4 2.199219 \n",
"3 10 11 12 8 5.199219 \n",
"4 17 19 23 4 2.199219 \n",
"5 21 22 24 4 1.799805 \n",
"6 22 25 29 4 1.799805 \n",
"7 23 24 26 4 1.599609 \n",
"8 23 26 31 4 1.599609 \n",
"9 23 25 30 4 1.799805 \n",
"... ... ... ... ... ... \n",
"41134 18 20 24 4 2.099609 \n",
"41135 23 26 33 4 1.900391 \n",
"41136 21 24 30 4 1.900391 \n",
"41137 24 28 33 4 1.900391 \n",
"41138 21 25 32 4 1.900391 \n",
"41139 19 22 26 4 2.199219 \n",
"41140 20 23 28 4 2.199219 \n",
"41141 18 21 24 4 2.199219 \n",
"41142 18 21 24 4 2.199219 \n",
"41143 16 18 21 4 2.199219 \n",
"\n",
" drive fuelCost08 make \\\n",
"0 Rear-Wheel Drive 2000 Alfa Romeo \n",
"1 Rear-Wheel Drive 3850 Ferrari \n",
"2 Front-Wheel Drive 1550 Dodge \n",
"3 Rear-Wheel Drive 3850 Dodge \n",
"4 4-Wheel or All-Wheel Drive 2700 Subaru \n",
"5 Front-Wheel Drive 1900 Subaru \n",
"6 Front-Wheel Drive 1700 Subaru \n",
"7 Front-Wheel Drive 1750 Toyota \n",
"8 Front-Wheel Drive 1600 Toyota \n",
"9 Front-Wheel Drive 1700 Toyota \n",
"... ... ... ... \n",
"41134 Front-Wheel Drive 2100 Saab \n",
"41135 Front-Wheel Drive 1600 Saturn \n",
"41136 Front-Wheel Drive 1750 Saturn \n",
"41137 Front-Wheel Drive 1500 Saturn \n",
"41138 Front-Wheel Drive 1700 Saturn \n",
"41139 Front-Wheel Drive 1900 Subaru \n",
"41140 Front-Wheel Drive 1850 Subaru \n",
"41141 4-Wheel or All-Wheel Drive 2000 Subaru \n",
"41142 4-Wheel or All-Wheel Drive 2000 Subaru \n",
"41143 4-Wheel or All-Wheel Drive 2900 Subaru \n",
"\n",
" model range createdOn year automatic \\\n",
"0 Spider Veloce 2000 0 2013-01-01 00:00:00-05:00 1985 False \n",
"1 Testarossa 0 2013-01-01 00:00:00-05:00 1985 False \n",
"2 Charger 0 2013-01-01 00:00:00-05:00 1985 False \n",
"3 B150/B250 Wagon 2WD 0 2013-01-01 00:00:00-05:00 1985 True \n",
"4 Legacy AWD Turbo 0 2013-01-01 00:00:00-05:00 1993 False \n",
"5 Loyale 0 2013-01-01 00:00:00-05:00 1993 True \n",
"6 Loyale 0 2013-01-01 00:00:00-05:00 1993 False \n",
"7 Corolla 0 2013-01-01 00:00:00-05:00 1993 True \n",
"8 Corolla 0 2013-01-01 00:00:00-05:00 1993 False \n",
"9 Corolla 0 2013-01-01 00:00:00-05:00 1993 True \n",
"... ... ... ... ... ... \n",
"41134 900 0 2013-01-01 00:00:00-05:00 1993 False \n",
"41135 SL 0 2013-01-01 00:00:00-05:00 1993 True \n",
"41136 SL 0 2013-01-01 00:00:00-05:00 1993 True \n",
"41137 SL 0 2013-01-01 00:00:00-05:00 1993 False \n",
"41138 SL 0 2013-01-01 00:00:00-05:00 1993 False \n",
"41139 Legacy 0 2013-01-01 00:00:00-05:00 1993 True \n",
"41140 Legacy 0 2013-01-01 00:00:00-05:00 1993 False \n",
"41141 Legacy AWD 0 2013-01-01 00:00:00-05:00 1993 True \n",
"41142 Legacy AWD 0 2013-01-01 00:00:00-05:00 1993 False \n",
"41143 Legacy AWD Turbo 0 2013-01-01 00:00:00-05:00 1993 True \n",
"\n",
" speeds ffs \n",
"0 5 True \n",
"1 5 False \n",
"2 5 True \n",
"3 3 NaN \n",
"4 5 True \n",
"5 3 True \n",
"6 5 True \n",
"7 3 True \n",
"8 5 True \n",
"9 4 True \n",
"... ... ... \n",
"41134 5 True \n",
"41135 4 True \n",
"41136 4 True \n",
"41137 5 True \n",
"41138 5 True \n",
"41139 4 True \n",
"41140 5 True \n",
"41141 4 True \n",
"41142 5 True \n",
"41143 4 True \n",
"\n",
"[41144 rows x 15 columns]"
]
},
"execution_count": 40,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# easy to debug\n",
"# - assign to var (df3)\n",
"# - comment out\n",
"# - pipe to display\n",
"\n",
"\n",
"from IPython.display import display\n",
"\n",
"def get_var(df, var_name):\n",
" globals()[var_name] = df\n",
" return df\n",
"\n",
"def tweak_autos(autos):\n",
" return (autos\n",
" [cols]\n",
" # create var \n",
" .pipe(get_var, 'df3')\n",
" .assign(cylinders=autos.cylinders.fillna(0).astype('int8'),\n",
" displ=autos.displ.fillna(0).astype('float16'),\n",
" drive=autos.drive.fillna('Other').astype('category'),\n",
" automatic=autos.trany.str.contains('Auto'),\n",
" speeds=autos.trany.str.extract(r'(\\d)+').fillna('20').astype('int8'), \n",
" createdOn=pd.to_datetime(autos.createdOn.replace({' EDT': '-04:00',\n",
" ' EST': '-05:00'}, regex=True), utc=True).dt.tz_convert('America/New_York'),\n",
" ffs=autos.eng_dscr.str.contains('FFS')\n",
" )\n",
" # debug pipe \n",
" .pipe(lambda df: display(df) or df)\n",
" .astype({'highway08': 'int8', 'city08': 'int16', 'comb08': 'int16', 'fuelCost08': 'int16', \n",
" 'range': 'int16', 'year': 'int16', 'make': 'category'})\n",
" .drop(columns=['trany', 'eng_dscr'])\n",
" )\n",
"\n",
"tweak_autos(autos)"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {
"scrolled": true
},
"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>city08</th>\n",
" <th>comb08</th>\n",
" <th>highway08</th>\n",
" <th>cylinders</th>\n",
" <th>displ</th>\n",
" <th>drive</th>\n",
" <th>eng_dscr</th>\n",
" <th>fuelCost08</th>\n",
" <th>make</th>\n",
" <th>model</th>\n",
" <th>trany</th>\n",
" <th>range</th>\n",
" <th>createdOn</th>\n",
" <th>year</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>19</td>\n",
" <td>21</td>\n",
" <td>25</td>\n",
" <td>4.0</td>\n",
" <td>2.0</td>\n",
" <td>Rear-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>2000</td>\n",
" <td>Alfa Romeo</td>\n",
" <td>Spider Veloce 2000</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1985</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>9</td>\n",
" <td>11</td>\n",
" <td>14</td>\n",
" <td>12.0</td>\n",
" <td>4.9</td>\n",
" <td>Rear-Wheel Drive</td>\n",
" <td>(GUZZLER)</td>\n",
" <td>3850</td>\n",
" <td>Ferrari</td>\n",
" <td>Testarossa</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1985</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>23</td>\n",
" <td>27</td>\n",
" <td>33</td>\n",
" <td>4.0</td>\n",
" <td>2.2</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>1550</td>\n",
" <td>Dodge</td>\n",
" <td>Charger</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1985</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>10</td>\n",
" <td>11</td>\n",
" <td>12</td>\n",
" <td>8.0</td>\n",
" <td>5.2</td>\n",
" <td>Rear-Wheel Drive</td>\n",
" <td>NaN</td>\n",
" <td>3850</td>\n",
" <td>Dodge</td>\n",
" <td>B150/B250 Wagon 2WD</td>\n",
" <td>Automatic 3-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1985</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>17</td>\n",
" <td>19</td>\n",
" <td>23</td>\n",
" <td>4.0</td>\n",
" <td>2.2</td>\n",
" <td>4-Wheel or All-Wheel Drive</td>\n",
" <td>(FFS,TRBO)</td>\n",
" <td>2700</td>\n",
" <td>Subaru</td>\n",
" <td>Legacy AWD Turbo</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1993</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>21</td>\n",
" <td>22</td>\n",
" <td>24</td>\n",
" <td>4.0</td>\n",
" <td>1.8</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>1900</td>\n",
" <td>Subaru</td>\n",
" <td>Loyale</td>\n",
" <td>Automatic 3-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1993</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>22</td>\n",
" <td>25</td>\n",
" <td>29</td>\n",
" <td>4.0</td>\n",
" <td>1.8</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>1700</td>\n",
" <td>Subaru</td>\n",
" <td>Loyale</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1993</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>23</td>\n",
" <td>24</td>\n",
" <td>26</td>\n",
" <td>4.0</td>\n",
" <td>1.6</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>1750</td>\n",
" <td>Toyota</td>\n",
" <td>Corolla</td>\n",
" <td>Automatic 3-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1993</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>23</td>\n",
" <td>26</td>\n",
" <td>31</td>\n",
" <td>4.0</td>\n",
" <td>1.6</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>1600</td>\n",
" <td>Toyota</td>\n",
" <td>Corolla</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1993</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>23</td>\n",
" <td>25</td>\n",
" <td>30</td>\n",
" <td>4.0</td>\n",
" <td>1.8</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>1700</td>\n",
" <td>Toyota</td>\n",
" <td>Corolla</td>\n",
" <td>Automatic 4-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1993</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41134</th>\n",
" <td>18</td>\n",
" <td>20</td>\n",
" <td>24</td>\n",
" <td>4.0</td>\n",
" <td>2.1</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>2100</td>\n",
" <td>Saab</td>\n",
" <td>900</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1993</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41135</th>\n",
" <td>23</td>\n",
" <td>26</td>\n",
" <td>33</td>\n",
" <td>4.0</td>\n",
" <td>1.9</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(TBI) (FFS)</td>\n",
" <td>1600</td>\n",
" <td>Saturn</td>\n",
" <td>SL</td>\n",
" <td>Automatic 4-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1993</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41136</th>\n",
" <td>21</td>\n",
" <td>24</td>\n",
" <td>30</td>\n",
" <td>4.0</td>\n",
" <td>1.9</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(MFI) (FFS)</td>\n",
" <td>1750</td>\n",
" <td>Saturn</td>\n",
" <td>SL</td>\n",
" <td>Automatic 4-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1993</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41137</th>\n",
" <td>24</td>\n",
" <td>28</td>\n",
" <td>33</td>\n",
" <td>4.0</td>\n",
" <td>1.9</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(TBI) (FFS)</td>\n",
" <td>1500</td>\n",
" <td>Saturn</td>\n",
" <td>SL</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1993</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41138</th>\n",
" <td>21</td>\n",
" <td>25</td>\n",
" <td>32</td>\n",
" <td>4.0</td>\n",
" <td>1.9</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(MFI) (FFS)</td>\n",
" <td>1700</td>\n",
" <td>Saturn</td>\n",
" <td>SL</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1993</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41139</th>\n",
" <td>19</td>\n",
" <td>22</td>\n",
" <td>26</td>\n",
" <td>4.0</td>\n",
" <td>2.2</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>1900</td>\n",
" <td>Subaru</td>\n",
" <td>Legacy</td>\n",
" <td>Automatic 4-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1993</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41140</th>\n",
" <td>20</td>\n",
" <td>23</td>\n",
" <td>28</td>\n",
" <td>4.0</td>\n",
" <td>2.2</td>\n",
" <td>Front-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>1850</td>\n",
" <td>Subaru</td>\n",
" <td>Legacy</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1993</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41141</th>\n",
" <td>18</td>\n",
" <td>21</td>\n",
" <td>24</td>\n",
" <td>4.0</td>\n",
" <td>2.2</td>\n",
" <td>4-Wheel or All-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>2000</td>\n",
" <td>Subaru</td>\n",
" <td>Legacy AWD</td>\n",
" <td>Automatic 4-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1993</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41142</th>\n",
" <td>18</td>\n",
" <td>21</td>\n",
" <td>24</td>\n",
" <td>4.0</td>\n",
" <td>2.2</td>\n",
" <td>4-Wheel or All-Wheel Drive</td>\n",
" <td>(FFS)</td>\n",
" <td>2000</td>\n",
" <td>Subaru</td>\n",
" <td>Legacy AWD</td>\n",
" <td>Manual 5-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1993</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41143</th>\n",
" <td>16</td>\n",
" <td>18</td>\n",
" <td>21</td>\n",
" <td>4.0</td>\n",
" <td>2.2</td>\n",
" <td>4-Wheel or All-Wheel Drive</td>\n",
" <td>(FFS,TRBO)</td>\n",
" <td>2900</td>\n",
" <td>Subaru</td>\n",
" <td>Legacy AWD Turbo</td>\n",
" <td>Automatic 4-spd</td>\n",
" <td>0</td>\n",
" <td>Tue Jan 01 00:00:00 EST 2013</td>\n",
" <td>1993</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>41144 rows × 14 columns</p>\n",
"</div>"
],
"text/plain": [
" city08 comb08 highway08 cylinders displ \\\n",
"0 19 21 25 4.0 2.0 \n",
"1 9 11 14 12.0 4.9 \n",
"2 23 27 33 4.0 2.2 \n",
"3 10 11 12 8.0 5.2 \n",
"4 17 19 23 4.0 2.2 \n",
"5 21 22 24 4.0 1.8 \n",
"6 22 25 29 4.0 1.8 \n",
"7 23 24 26 4.0 1.6 \n",
"8 23 26 31 4.0 1.6 \n",
"9 23 25 30 4.0 1.8 \n",
"... ... ... ... ... ... \n",
"41134 18 20 24 4.0 2.1 \n",
"41135 23 26 33 4.0 1.9 \n",
"41136 21 24 30 4.0 1.9 \n",
"41137 24 28 33 4.0 1.9 \n",
"41138 21 25 32 4.0 1.9 \n",
"41139 19 22 26 4.0 2.2 \n",
"41140 20 23 28 4.0 2.2 \n",
"41141 18 21 24 4.0 2.2 \n",
"41142 18 21 24 4.0 2.2 \n",
"41143 16 18 21 4.0 2.2 \n",
"\n",
" drive eng_dscr fuelCost08 make \\\n",
"0 Rear-Wheel Drive (FFS) 2000 Alfa Romeo \n",
"1 Rear-Wheel Drive (GUZZLER) 3850 Ferrari \n",
"2 Front-Wheel Drive (FFS) 1550 Dodge \n",
"3 Rear-Wheel Drive NaN 3850 Dodge \n",
"4 4-Wheel or All-Wheel Drive (FFS,TRBO) 2700 Subaru \n",
"5 Front-Wheel Drive (FFS) 1900 Subaru \n",
"6 Front-Wheel Drive (FFS) 1700 Subaru \n",
"7 Front-Wheel Drive (FFS) 1750 Toyota \n",
"8 Front-Wheel Drive (FFS) 1600 Toyota \n",
"9 Front-Wheel Drive (FFS) 1700 Toyota \n",
"... ... ... ... ... \n",
"41134 Front-Wheel Drive (FFS) 2100 Saab \n",
"41135 Front-Wheel Drive (TBI) (FFS) 1600 Saturn \n",
"41136 Front-Wheel Drive (MFI) (FFS) 1750 Saturn \n",
"41137 Front-Wheel Drive (TBI) (FFS) 1500 Saturn \n",
"41138 Front-Wheel Drive (MFI) (FFS) 1700 Saturn \n",
"41139 Front-Wheel Drive (FFS) 1900 Subaru \n",
"41140 Front-Wheel Drive (FFS) 1850 Subaru \n",
"41141 4-Wheel or All-Wheel Drive (FFS) 2000 Subaru \n",
"41142 4-Wheel or All-Wheel Drive (FFS) 2000 Subaru \n",
"41143 4-Wheel or All-Wheel Drive (FFS,TRBO) 2900 Subaru \n",
"\n",
" model trany range \\\n",
"0 Spider Veloce 2000 Manual 5-spd 0 \n",
"1 Testarossa Manual 5-spd 0 \n",
"2 Charger Manual 5-spd 0 \n",
"3 B150/B250 Wagon 2WD Automatic 3-spd 0 \n",
"4 Legacy AWD Turbo Manual 5-spd 0 \n",
"5 Loyale Automatic 3-spd 0 \n",
"6 Loyale Manual 5-spd 0 \n",
"7 Corolla Automatic 3-spd 0 \n",
"8 Corolla Manual 5-spd 0 \n",
"9 Corolla Automatic 4-spd 0 \n",
"... ... ... ... \n",
"41134 900 Manual 5-spd 0 \n",
"41135 SL Automatic 4-spd 0 \n",
"41136 SL Automatic 4-spd 0 \n",
"41137 SL Manual 5-spd 0 \n",
"41138 SL Manual 5-spd 0 \n",
"41139 Legacy Automatic 4-spd 0 \n",
"41140 Legacy Manual 5-spd 0 \n",
"41141 Legacy AWD Automatic 4-spd 0 \n",
"41142 Legacy AWD Manual 5-spd 0 \n",
"41143 Legacy AWD Turbo Automatic 4-spd 0 \n",
"\n",
" createdOn year \n",
"0 Tue Jan 01 00:00:00 EST 2013 1985 \n",
"1 Tue Jan 01 00:00:00 EST 2013 1985 \n",
"2 Tue Jan 01 00:00:00 EST 2013 1985 \n",
"3 Tue Jan 01 00:00:00 EST 2013 1985 \n",
"4 Tue Jan 01 00:00:00 EST 2013 1993 \n",
"5 Tue Jan 01 00:00:00 EST 2013 1993 \n",
"6 Tue Jan 01 00:00:00 EST 2013 1993 \n",
"7 Tue Jan 01 00:00:00 EST 2013 1993 \n",
"8 Tue Jan 01 00:00:00 EST 2013 1993 \n",
"9 Tue Jan 01 00:00:00 EST 2013 1993 \n",
"... ... ... \n",
"41134 Tue Jan 01 00:00:00 EST 2013 1993 \n",
"41135 Tue Jan 01 00:00:00 EST 2013 1993 \n",
"41136 Tue Jan 01 00:00:00 EST 2013 1993 \n",
"41137 Tue Jan 01 00:00:00 EST 2013 1993 \n",
"41138 Tue Jan 01 00:00:00 EST 2013 1993 \n",
"41139 Tue Jan 01 00:00:00 EST 2013 1993 \n",
"41140 Tue Jan 01 00:00:00 EST 2013 1993 \n",
"41141 Tue Jan 01 00:00:00 EST 2013 1993 \n",
"41142 Tue Jan 01 00:00:00 EST 2013 1993 \n",
"41143 Tue Jan 01 00:00:00 EST 2013 1993 \n",
"\n",
"[41144 rows x 14 columns]"
]
},
"execution_count": 44,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# inspect intermediate data frame\n",
"df3"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Don't Mutate\n",
"\n",
"> \"you are missing the point, inplace rarely actually does something inplace, you are thinking that you are saving memory but you are not.\"\n",
">\n",
"> **jreback** - Pandas core dev\n",
"\n",
"\n",
"\n",
"https://github.com/pandas-dev/pandas/issues/16529#issuecomment-676518136\n",
"\n",
"* In general, no performance benefits\n",
"* Prohibits chaining\n",
"* ``SettingWithCopyWarning`` fun\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Don't Apply (if you can)"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [],
"source": [
"def tweak_autos(autos):\n",
" return (autos\n",
" [cols]\n",
" .assign(cylinders=autos.cylinders.fillna(0).astype('int8'),\n",
" displ=autos.displ.fillna(0).astype('float16'),\n",
" drive=autos.drive.fillna('Other').astype('category'),\n",
" automatic=autos.trany.str.contains('Auto'),\n",
" speeds=autos.trany.str.extract(r'(\\d)+').fillna('20').astype('int8'),\n",
" createdOn=pd.to_datetime(autos.createdOn.replace({' EDT': '-04:00',\n",
" ' EST': '-05:00'}, regex=True), utc=True).dt.tz_convert('America/New_York'),\n",
" ffs=autos.eng_dscr.str.contains('FFS')\n",
" )\n",
" .astype({'highway08': 'int8', 'city08': 'int16', 'comb08': 'int16', 'fuelCost08': 'int16',\n",
" 'range': 'int16', 'year': 'int16', 'make': 'category'})\n",
" .drop(columns=['trany', 'eng_dscr'])\n",
" )\n",
"\n",
"\n",
"autos2 = tweak_autos(autos)"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"0 12.379737\n",
"1 26.135000\n",
"2 10.226739\n",
"3 23.521500\n",
"4 13.836176\n",
"5 11.200714\n",
"6 10.691591\n",
"7 10.226739\n",
"8 10.226739\n",
"9 10.226739\n",
" ... \n",
"41134 13.067500\n",
"41135 10.226739\n",
"41136 11.200714\n",
"41137 9.800625\n",
"41138 11.200714\n",
"41139 12.379737\n",
"41140 11.760750\n",
"41141 13.067500\n",
"41142 13.067500\n",
"41143 14.700938\n",
"Name: city08, Length: 41144, dtype: float64"
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# try to me more Euro-centric\n",
"def to_lper100km(val):\n",
" return 235.215 / val\n",
"autos2.city08.apply(to_lper100km)"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"0 12.379737\n",
"1 26.135000\n",
"2 10.226739\n",
"3 23.521500\n",
"4 13.836176\n",
"5 11.200714\n",
"6 10.691591\n",
"7 10.226739\n",
"8 10.226739\n",
"9 10.226739\n",
" ... \n",
"41134 13.067500\n",
"41135 10.226739\n",
"41136 11.200714\n",
"41137 9.800625\n",
"41138 11.200714\n",
"41139 12.379737\n",
"41140 11.760750\n",
"41141 13.067500\n",
"41142 13.067500\n",
"41143 14.700938\n",
"Name: city08, Length: 41144, dtype: float64"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# this gives the sames results\n",
"235.215 / autos2.city08 "
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"6.07 ms ± 236 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
]
}
],
"source": [
"%%timeit\n",
"autos2.city08.apply(to_lper100km)"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"110 µs ± 1.52 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)\n"
]
}
],
"source": [
"%%timeit\n",
"235.215 / autos2.city08 "
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"56.54545454545455"
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# ~50x slower!\n",
"6_220 / 110"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {},
"outputs": [],
"source": [
"def is_american(val):\n",
" return val in {'Chevrolet', 'Ford', 'Dodge', 'GMC', 'Tesla'}"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"772 µs ± 13 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n"
]
}
],
"source": [
"%%timeit\n",
"autos2.make.apply(is_american)"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"630 µs ± 32.6 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n"
]
}
],
"source": [
"%%timeit\n",
"autos2.make.isin({'Chevrolet', 'Ford', 'Dodge', 'GMC', 'Tesla'})"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {},
"outputs": [],
"source": [
"autos3 = autos2.assign(make=autos2.make.astype(str))"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1.42 ms ± 25.6 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n"
]
}
],
"source": [
"%%timeit\n",
"# converted to string\n",
"autos3.make.isin({'Chevrolet', 'Ford', 'Dodge', 'GMC', 'Tesla'})"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"4.88 ms ± 56.6 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
]
}
],
"source": [
"%%timeit\n",
"autos3.make.apply(is_american)"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {},
"outputs": [],
"source": [
"def country(val):\n",
" if val in {'Chevrolet', 'Ford', 'Dodge', 'GMC', 'Tesla'}:\n",
" return 'US'\n",
" return 'Other'"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1.97 ms ± 68.8 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
]
}
],
"source": [
"%%timeit\n",
"# Might be ok for strings, since they are not vectorized...\n",
"(autos2\n",
" .assign(country=autos2.make.apply(country))\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"4.82 ms ± 224 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
]
}
],
"source": [
"%%timeit\n",
"values = {'Chevrolet', 'Ford', 'Dodge', 'GMC', 'Tesla'}\n",
"(autos2\n",
" .assign(country='US')\n",
" .assign(country=lambda df_:df_.country.where(df_.make.isin(values), 'Other'))\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"3.91 ms ± 41.5 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
]
}
],
"source": [
"%%timeit\n",
"\n",
"(autos2\n",
" .assign(country=np.select([autos2.make.isin({'Chevrolet', 'Ford', 'Dodge', 'GMC', 'Tesla'})], \n",
" ['US'], 'Other'))\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {
"lines_to_next_cell": 0
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"3.91 ms ± 25.5 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
]
}
],
"source": [
"%%timeit\n",
"\n",
"(autos2\n",
" .assign(country=np.where(autos2.make.isin({'Chevrolet', 'Ford', 'Dodge', 'GMC', 'Tesla'}), \n",
" 'US', 'Other'))\n",
")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"lines_to_next_cell": 2
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"lines_to_next_cell": 2
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"lines_to_next_cell": 2
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"lines_to_next_cell": 2
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Master Aggregation\n",
"\n",
"Let's compare mileage by country by year...🤔"
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {
"scrolled": true
},
"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>city08</th>\n",
" <th>comb08</th>\n",
" <th>highway08</th>\n",
" <th>cylinders</th>\n",
" <th>displ</th>\n",
" <th>fuelCost08</th>\n",
" <th>range</th>\n",
" <th>speeds</th>\n",
" </tr>\n",
" <tr>\n",
" <th>year</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>1984</th>\n",
" <td>17.982688</td>\n",
" <td>19.881874</td>\n",
" <td>23.075356</td>\n",
" <td>5.385438</td>\n",
" <td>3.164062</td>\n",
" <td>2313.543788</td>\n",
" <td>0.000000</td>\n",
" <td>3.928208</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1985</th>\n",
" <td>17.878307</td>\n",
" <td>19.808348</td>\n",
" <td>23.042328</td>\n",
" <td>5.375661</td>\n",
" <td>3.164062</td>\n",
" <td>2334.509112</td>\n",
" <td>0.000000</td>\n",
" <td>3.924750</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1986</th>\n",
" <td>17.665289</td>\n",
" <td>19.550413</td>\n",
" <td>22.699174</td>\n",
" <td>5.425620</td>\n",
" <td>3.183594</td>\n",
" <td>2354.049587</td>\n",
" <td>0.000000</td>\n",
" <td>3.984298</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1987</th>\n",
" <td>17.310345</td>\n",
" <td>19.228549</td>\n",
" <td>22.445068</td>\n",
" <td>5.412189</td>\n",
" <td>3.173828</td>\n",
" <td>2403.648757</td>\n",
" <td>0.000000</td>\n",
" <td>4.037690</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1988</th>\n",
" <td>17.333628</td>\n",
" <td>19.328319</td>\n",
" <td>22.702655</td>\n",
" <td>5.461947</td>\n",
" <td>3.195312</td>\n",
" <td>2387.035398</td>\n",
" <td>0.000000</td>\n",
" <td>4.129204</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1989</th>\n",
" <td>17.143972</td>\n",
" <td>19.125759</td>\n",
" <td>22.465742</td>\n",
" <td>5.488291</td>\n",
" <td>3.208984</td>\n",
" <td>2433.434519</td>\n",
" <td>0.000000</td>\n",
" <td>4.166522</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1990</th>\n",
" <td>17.033395</td>\n",
" <td>19.000928</td>\n",
" <td>22.337662</td>\n",
" <td>5.496289</td>\n",
" <td>3.216797</td>\n",
" <td>2436.178108</td>\n",
" <td>0.000000</td>\n",
" <td>4.238404</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1991</th>\n",
" <td>16.848940</td>\n",
" <td>18.825972</td>\n",
" <td>22.253534</td>\n",
" <td>5.598940</td>\n",
" <td>3.267578</td>\n",
" <td>2490.856890</td>\n",
" <td>0.000000</td>\n",
" <td>4.301237</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1992</th>\n",
" <td>16.805531</td>\n",
" <td>18.862623</td>\n",
" <td>22.439786</td>\n",
" <td>5.623550</td>\n",
" <td>3.275391</td>\n",
" <td>2494.736842</td>\n",
" <td>0.000000</td>\n",
" <td>4.318466</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1993</th>\n",
" <td>16.998170</td>\n",
" <td>19.104300</td>\n",
" <td>22.780421</td>\n",
" <td>5.602928</td>\n",
" <td>3.248047</td>\n",
" <td>2454.620311</td>\n",
" <td>0.000000</td>\n",
" <td>4.339433</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1994</th>\n",
" <td>16.918534</td>\n",
" <td>19.012220</td>\n",
" <td>22.725051</td>\n",
" <td>5.704684</td>\n",
" <td>3.333984</td>\n",
" <td>2461.507128</td>\n",
" <td>0.000000</td>\n",
" <td>4.332994</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1995</th>\n",
" <td>16.569804</td>\n",
" <td>18.797311</td>\n",
" <td>22.671148</td>\n",
" <td>5.892451</td>\n",
" <td>3.472656</td>\n",
" <td>2497.828335</td>\n",
" <td>0.000000</td>\n",
" <td>4.356774</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1996</th>\n",
" <td>17.289780</td>\n",
" <td>19.584735</td>\n",
" <td>23.569211</td>\n",
" <td>5.627426</td>\n",
" <td>3.234375</td>\n",
" <td>2375.032342</td>\n",
" <td>0.000000</td>\n",
" <td>4.364812</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1997</th>\n",
" <td>17.135171</td>\n",
" <td>19.429134</td>\n",
" <td>23.451444</td>\n",
" <td>5.666667</td>\n",
" <td>3.226562</td>\n",
" <td>2405.511811</td>\n",
" <td>0.000000</td>\n",
" <td>4.402887</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1998</th>\n",
" <td>17.113300</td>\n",
" <td>19.518473</td>\n",
" <td>23.546798</td>\n",
" <td>5.633005</td>\n",
" <td>3.201172</td>\n",
" <td>2382.635468</td>\n",
" <td>0.229064</td>\n",
" <td>4.419951</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1999</th>\n",
" <td>17.272300</td>\n",
" <td>19.611502</td>\n",
" <td>23.552817</td>\n",
" <td>5.667840</td>\n",
" <td>3.189453</td>\n",
" <td>2392.194836</td>\n",
" <td>0.570423</td>\n",
" <td>4.421362</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2000</th>\n",
" <td>17.221429</td>\n",
" <td>19.526190</td>\n",
" <td>23.414286</td>\n",
" <td>5.713095</td>\n",
" <td>3.201172</td>\n",
" <td>2429.702381</td>\n",
" <td>0.348810</td>\n",
" <td>4.508333</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2001</th>\n",
" <td>17.275521</td>\n",
" <td>19.479693</td>\n",
" <td>23.328211</td>\n",
" <td>5.720088</td>\n",
" <td>3.193359</td>\n",
" <td>2448.463227</td>\n",
" <td>0.261251</td>\n",
" <td>4.660812</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2002</th>\n",
" <td>16.893333</td>\n",
" <td>19.168205</td>\n",
" <td>23.030769</td>\n",
" <td>5.827692</td>\n",
" <td>3.263672</td>\n",
" <td>2479.794872</td>\n",
" <td>0.136410</td>\n",
" <td>4.757949</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2003</th>\n",
" <td>16.780651</td>\n",
" <td>19.000958</td>\n",
" <td>22.836207</td>\n",
" <td>5.942529</td>\n",
" <td>3.357422</td>\n",
" <td>2525.574713</td>\n",
" <td>0.090996</td>\n",
" <td>4.911877</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2004</th>\n",
" <td>16.740642</td>\n",
" <td>19.067736</td>\n",
" <td>23.064171</td>\n",
" <td>5.957219</td>\n",
" <td>3.394531</td>\n",
" <td>2512.566845</td>\n",
" <td>0.000000</td>\n",
" <td>4.976827</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2005</th>\n",
" <td>16.851630</td>\n",
" <td>19.193825</td>\n",
" <td>23.297599</td>\n",
" <td>5.944254</td>\n",
" <td>3.400391</td>\n",
" <td>2518.610635</td>\n",
" <td>0.000000</td>\n",
" <td>5.192110</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2006</th>\n",
" <td>16.626812</td>\n",
" <td>18.959239</td>\n",
" <td>23.048913</td>\n",
" <td>6.100543</td>\n",
" <td>3.548828</td>\n",
" <td>2539.175725</td>\n",
" <td>0.000000</td>\n",
" <td>5.315217</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2007</th>\n",
" <td>16.605684</td>\n",
" <td>18.978686</td>\n",
" <td>23.083481</td>\n",
" <td>6.166075</td>\n",
" <td>3.628906</td>\n",
" <td>2535.923623</td>\n",
" <td>0.000000</td>\n",
" <td>5.610124</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2008</th>\n",
" <td>16.900590</td>\n",
" <td>19.276327</td>\n",
" <td>23.455771</td>\n",
" <td>6.192923</td>\n",
" <td>3.638672</td>\n",
" <td>2536.436394</td>\n",
" <td>0.084246</td>\n",
" <td>5.773378</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2009</th>\n",
" <td>17.334459</td>\n",
" <td>19.735642</td>\n",
" <td>24.017736</td>\n",
" <td>6.122466</td>\n",
" <td>3.625000</td>\n",
" <td>2427.027027</td>\n",
" <td>0.000000</td>\n",
" <td>6.043074</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2010</th>\n",
" <td>18.105500</td>\n",
" <td>20.588819</td>\n",
" <td>24.947701</td>\n",
" <td>5.965735</td>\n",
" <td>3.501953</td>\n",
" <td>2351.082056</td>\n",
" <td>0.000000</td>\n",
" <td>6.271416</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2011</th>\n",
" <td>18.669027</td>\n",
" <td>21.011504</td>\n",
" <td>25.169912</td>\n",
" <td>5.980531</td>\n",
" <td>3.521484</td>\n",
" <td>2333.982301</td>\n",
" <td>0.259292</td>\n",
" <td>6.560177</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2012</th>\n",
" <td>19.362847</td>\n",
" <td>21.819444</td>\n",
" <td>26.105035</td>\n",
" <td>5.910590</td>\n",
" <td>3.460938</td>\n",
" <td>2289.973958</td>\n",
" <td>0.782118</td>\n",
" <td>6.706597</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2013</th>\n",
" <td>20.661318</td>\n",
" <td>23.125000</td>\n",
" <td>27.504223</td>\n",
" <td>5.762669</td>\n",
" <td>3.328125</td>\n",
" <td>2210.768581</td>\n",
" <td>1.255068</td>\n",
" <td>6.896959</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2014</th>\n",
" <td>21.033469</td>\n",
" <td>23.531429</td>\n",
" <td>27.978776</td>\n",
" <td>5.745306</td>\n",
" <td>3.289062</td>\n",
" <td>2198.040816</td>\n",
" <td>1.405714</td>\n",
" <td>6.985306</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2015</th>\n",
" <td>21.445830</td>\n",
" <td>24.038971</td>\n",
" <td>28.586906</td>\n",
" <td>5.635230</td>\n",
" <td>3.205078</td>\n",
" <td>2148.869836</td>\n",
" <td>2.208106</td>\n",
" <td>7.035853</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2016</th>\n",
" <td>22.591918</td>\n",
" <td>25.150555</td>\n",
" <td>29.606973</td>\n",
" <td>5.463550</td>\n",
" <td>3.054688</td>\n",
" <td>2091.204437</td>\n",
" <td>4.546751</td>\n",
" <td>7.080032</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017</th>\n",
" <td>22.761021</td>\n",
" <td>25.249033</td>\n",
" <td>29.554524</td>\n",
" <td>5.453210</td>\n",
" <td>3.025391</td>\n",
" <td>2096.558391</td>\n",
" <td>4.336427</td>\n",
" <td>7.225058</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018</th>\n",
" <td>22.564732</td>\n",
" <td>25.019345</td>\n",
" <td>29.273065</td>\n",
" <td>5.438988</td>\n",
" <td>2.992188</td>\n",
" <td>2103.980655</td>\n",
" <td>3.519345</td>\n",
" <td>7.017113</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2019</th>\n",
" <td>23.318147</td>\n",
" <td>25.627942</td>\n",
" <td>29.664389</td>\n",
" <td>5.368261</td>\n",
" <td>2.964844</td>\n",
" <td>2093.545938</td>\n",
" <td>5.565680</td>\n",
" <td>7.136674</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020</th>\n",
" <td>22.679426</td>\n",
" <td>25.267943</td>\n",
" <td>29.617225</td>\n",
" <td>5.071770</td>\n",
" <td>2.644531</td>\n",
" <td>2023.444976</td>\n",
" <td>2.282297</td>\n",
" <td>7.746411</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" city08 comb08 highway08 cylinders displ fuelCost08 \\\n",
"year \n",
"1984 17.982688 19.881874 23.075356 5.385438 3.164062 2313.543788 \n",
"1985 17.878307 19.808348 23.042328 5.375661 3.164062 2334.509112 \n",
"1986 17.665289 19.550413 22.699174 5.425620 3.183594 2354.049587 \n",
"1987 17.310345 19.228549 22.445068 5.412189 3.173828 2403.648757 \n",
"1988 17.333628 19.328319 22.702655 5.461947 3.195312 2387.035398 \n",
"1989 17.143972 19.125759 22.465742 5.488291 3.208984 2433.434519 \n",
"1990 17.033395 19.000928 22.337662 5.496289 3.216797 2436.178108 \n",
"1991 16.848940 18.825972 22.253534 5.598940 3.267578 2490.856890 \n",
"1992 16.805531 18.862623 22.439786 5.623550 3.275391 2494.736842 \n",
"1993 16.998170 19.104300 22.780421 5.602928 3.248047 2454.620311 \n",
"1994 16.918534 19.012220 22.725051 5.704684 3.333984 2461.507128 \n",
"1995 16.569804 18.797311 22.671148 5.892451 3.472656 2497.828335 \n",
"1996 17.289780 19.584735 23.569211 5.627426 3.234375 2375.032342 \n",
"1997 17.135171 19.429134 23.451444 5.666667 3.226562 2405.511811 \n",
"1998 17.113300 19.518473 23.546798 5.633005 3.201172 2382.635468 \n",
"1999 17.272300 19.611502 23.552817 5.667840 3.189453 2392.194836 \n",
"2000 17.221429 19.526190 23.414286 5.713095 3.201172 2429.702381 \n",
"2001 17.275521 19.479693 23.328211 5.720088 3.193359 2448.463227 \n",
"2002 16.893333 19.168205 23.030769 5.827692 3.263672 2479.794872 \n",
"2003 16.780651 19.000958 22.836207 5.942529 3.357422 2525.574713 \n",
"2004 16.740642 19.067736 23.064171 5.957219 3.394531 2512.566845 \n",
"2005 16.851630 19.193825 23.297599 5.944254 3.400391 2518.610635 \n",
"2006 16.626812 18.959239 23.048913 6.100543 3.548828 2539.175725 \n",
"2007 16.605684 18.978686 23.083481 6.166075 3.628906 2535.923623 \n",
"2008 16.900590 19.276327 23.455771 6.192923 3.638672 2536.436394 \n",
"2009 17.334459 19.735642 24.017736 6.122466 3.625000 2427.027027 \n",
"2010 18.105500 20.588819 24.947701 5.965735 3.501953 2351.082056 \n",
"2011 18.669027 21.011504 25.169912 5.980531 3.521484 2333.982301 \n",
"2012 19.362847 21.819444 26.105035 5.910590 3.460938 2289.973958 \n",
"2013 20.661318 23.125000 27.504223 5.762669 3.328125 2210.768581 \n",
"2014 21.033469 23.531429 27.978776 5.745306 3.289062 2198.040816 \n",
"2015 21.445830 24.038971 28.586906 5.635230 3.205078 2148.869836 \n",
"2016 22.591918 25.150555 29.606973 5.463550 3.054688 2091.204437 \n",
"2017 22.761021 25.249033 29.554524 5.453210 3.025391 2096.558391 \n",
"2018 22.564732 25.019345 29.273065 5.438988 2.992188 2103.980655 \n",
"2019 23.318147 25.627942 29.664389 5.368261 2.964844 2093.545938 \n",
"2020 22.679426 25.267943 29.617225 5.071770 2.644531 2023.444976 \n",
"\n",
" range speeds \n",
"year \n",
"1984 0.000000 3.928208 \n",
"1985 0.000000 3.924750 \n",
"1986 0.000000 3.984298 \n",
"1987 0.000000 4.037690 \n",
"1988 0.000000 4.129204 \n",
"1989 0.000000 4.166522 \n",
"1990 0.000000 4.238404 \n",
"1991 0.000000 4.301237 \n",
"1992 0.000000 4.318466 \n",
"1993 0.000000 4.339433 \n",
"1994 0.000000 4.332994 \n",
"1995 0.000000 4.356774 \n",
"1996 0.000000 4.364812 \n",
"1997 0.000000 4.402887 \n",
"1998 0.229064 4.419951 \n",
"1999 0.570423 4.421362 \n",
"2000 0.348810 4.508333 \n",
"2001 0.261251 4.660812 \n",
"2002 0.136410 4.757949 \n",
"2003 0.090996 4.911877 \n",
"2004 0.000000 4.976827 \n",
"2005 0.000000 5.192110 \n",
"2006 0.000000 5.315217 \n",
"2007 0.000000 5.610124 \n",
"2008 0.084246 5.773378 \n",
"2009 0.000000 6.043074 \n",
"2010 0.000000 6.271416 \n",
"2011 0.259292 6.560177 \n",
"2012 0.782118 6.706597 \n",
"2013 1.255068 6.896959 \n",
"2014 1.405714 6.985306 \n",
"2015 2.208106 7.035853 \n",
"2016 4.546751 7.080032 \n",
"2017 4.336427 7.225058 \n",
"2018 3.519345 7.017113 \n",
"2019 5.565680 7.136674 \n",
"2020 2.282297 7.746411 "
]
},
"execution_count": 61,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(autos2\n",
" .groupby('year')\n",
" .mean()\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {
"scrolled": true
},
"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>comb08</th>\n",
" <th>speeds</th>\n",
" </tr>\n",
" <tr>\n",
" <th>year</th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1984</th>\n",
" <td>19.881874</td>\n",
" <td>3.928208</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1985</th>\n",
" <td>19.808348</td>\n",
" <td>3.924750</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1986</th>\n",
" <td>19.550413</td>\n",
" <td>3.984298</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1987</th>\n",
" <td>19.228549</td>\n",
" <td>4.037690</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1988</th>\n",
" <td>19.328319</td>\n",
" <td>4.129204</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1989</th>\n",
" <td>19.125759</td>\n",
" <td>4.166522</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1990</th>\n",
" <td>19.000928</td>\n",
" <td>4.238404</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1991</th>\n",
" <td>18.825972</td>\n",
" <td>4.301237</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1992</th>\n",
" <td>18.862623</td>\n",
" <td>4.318466</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1993</th>\n",
" <td>19.104300</td>\n",
" <td>4.339433</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1994</th>\n",
" <td>19.012220</td>\n",
" <td>4.332994</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1995</th>\n",
" <td>18.797311</td>\n",
" <td>4.356774</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1996</th>\n",
" <td>19.584735</td>\n",
" <td>4.364812</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1997</th>\n",
" <td>19.429134</td>\n",
" <td>4.402887</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1998</th>\n",
" <td>19.518473</td>\n",
" <td>4.419951</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1999</th>\n",
" <td>19.611502</td>\n",
" <td>4.421362</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2000</th>\n",
" <td>19.526190</td>\n",
" <td>4.508333</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2001</th>\n",
" <td>19.479693</td>\n",
" <td>4.660812</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2002</th>\n",
" <td>19.168205</td>\n",
" <td>4.757949</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2003</th>\n",
" <td>19.000958</td>\n",
" <td>4.911877</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2004</th>\n",
" <td>19.067736</td>\n",
" <td>4.976827</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2005</th>\n",
" <td>19.193825</td>\n",
" <td>5.192110</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2006</th>\n",
" <td>18.959239</td>\n",
" <td>5.315217</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2007</th>\n",
" <td>18.978686</td>\n",
" <td>5.610124</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2008</th>\n",
" <td>19.276327</td>\n",
" <td>5.773378</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2009</th>\n",
" <td>19.735642</td>\n",
" <td>6.043074</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2010</th>\n",
" <td>20.588819</td>\n",
" <td>6.271416</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2011</th>\n",
" <td>21.011504</td>\n",
" <td>6.560177</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2012</th>\n",
" <td>21.819444</td>\n",
" <td>6.706597</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2013</th>\n",
" <td>23.125000</td>\n",
" <td>6.896959</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2014</th>\n",
" <td>23.531429</td>\n",
" <td>6.985306</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2015</th>\n",
" <td>24.038971</td>\n",
" <td>7.035853</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2016</th>\n",
" <td>25.150555</td>\n",
" <td>7.080032</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017</th>\n",
" <td>25.249033</td>\n",
" <td>7.225058</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018</th>\n",
" <td>25.019345</td>\n",
" <td>7.017113</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2019</th>\n",
" <td>25.627942</td>\n",
" <td>7.136674</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020</th>\n",
" <td>25.267943</td>\n",
" <td>7.746411</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" comb08 speeds\n",
"year \n",
"1984 19.881874 3.928208\n",
"1985 19.808348 3.924750\n",
"1986 19.550413 3.984298\n",
"1987 19.228549 4.037690\n",
"1988 19.328319 4.129204\n",
"1989 19.125759 4.166522\n",
"1990 19.000928 4.238404\n",
"1991 18.825972 4.301237\n",
"1992 18.862623 4.318466\n",
"1993 19.104300 4.339433\n",
"1994 19.012220 4.332994\n",
"1995 18.797311 4.356774\n",
"1996 19.584735 4.364812\n",
"1997 19.429134 4.402887\n",
"1998 19.518473 4.419951\n",
"1999 19.611502 4.421362\n",
"2000 19.526190 4.508333\n",
"2001 19.479693 4.660812\n",
"2002 19.168205 4.757949\n",
"2003 19.000958 4.911877\n",
"2004 19.067736 4.976827\n",
"2005 19.193825 5.192110\n",
"2006 18.959239 5.315217\n",
"2007 18.978686 5.610124\n",
"2008 19.276327 5.773378\n",
"2009 19.735642 6.043074\n",
"2010 20.588819 6.271416\n",
"2011 21.011504 6.560177\n",
"2012 21.819444 6.706597\n",
"2013 23.125000 6.896959\n",
"2014 23.531429 6.985306\n",
"2015 24.038971 7.035853\n",
"2016 25.150555 7.080032\n",
"2017 25.249033 7.225058\n",
"2018 25.019345 7.017113\n",
"2019 25.627942 7.136674\n",
"2020 25.267943 7.746411"
]
},
"execution_count": 62,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# watch order of column filtering/aggregation\n",
"(autos2\n",
" .groupby('year')\n",
" [['comb08', 'speeds']]\n",
" .mean()\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2.02 ms ± 36.8 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
]
}
],
"source": [
"%%timeit\n",
"# watch order of column filtering/aggregation\n",
"(autos2\n",
" .groupby('year')\n",
" [['comb08', 'speeds']]\n",
" .mean()\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"4.52 ms ± 49.8 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
]
}
],
"source": [
"%%timeit\n",
"# watch order of column filtering/aggregation\n",
"(autos2\n",
" .groupby('year')\n",
" .mean()\n",
" [['comb08', 'speeds']]\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x7f16802a4fd0>]"
]
},
"execution_count": 65,
"metadata": {},
"output_type": "execute_result"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"findfont: Font family [\"['Lato']\"] not found. Falling back to DejaVu Sans.\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x216 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"plt.style.use('pandas1book') \n",
"sns.set_context('talk')\n",
"plt.plot(range(10))"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"<AxesSubplot:xlabel='year'>"
]
},
"execution_count": 66,
"metadata": {},
"output_type": "execute_result"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"findfont: Font family [\"['Lato']\"] not found. Falling back to DejaVu Sans.\n"
]
},
{
"data": {
"image/png": "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73LCCSewa9euxPyGjjjiCPbu3UssFsPv9zN06FB++tOf8otf/ILp06cn0k2fPp1bb721xfsqFaTJSAiRllzXZfny5Zx55pn1ggHY4XFjsRgrVqzgrLPOSgQDgP79+3PWWWfx1ltvEYvF6n0vftAHyMzMRCmF3+/nggsuSMwvLS2loKCALVu2NCrT9OnTE8EAYNasWQC8+eabANTV2RETMzIyGn03M9MOOR8KhRLz+vbty7HHHstNN93Eb37zG+bOncvTTz/NPffc89U7p41IDUGILshxgtDrxU7dZFRWVkZ1dTXDhg076PLa2lqGDGn8YMfS0lL++te/Ul5enmiTBygpqT/se35+Pr169Ur0/EmeX1nZeNztwYMH1/tcXFxMYWEhW7fawabiB/1wuPGYIfFgEb82sHLlSq666ir+/Oc/JwLemWeeSV5eHr/+9a+58MILKS0tbXLb24oEBCG6KMcJQqD/oRN2I/4mBg9qah7EhyJtmd69ewOwe/fuRst2795Nz549E+tbsmQJvXv3blT7mTRpEosWLeLDDz9s94AgTUZCiLTUo0cPcnNzWbt27UGXZ2dns379+kbL1q9fT05ODsXFqR2gacOGDfU+l5eXs2/fPo488kgA+vTpQ48ePfjkk08afffjjz+ud/CPX09oKBqNAjS5rK1JQBBCpCWfz8cZZ5zBq6++yqefflpvmTEGv9/PySefzCuvvMK2bdsSy7Zt28Yrr7zChAkTDnr231pLlixJHLAB/vjHPwJw6qmnJuZNnjyZ1157jZ07DzTX/fOf/2TDhg1885vfTMwbPHgwO3fu5P3336+3jmXLlgE0qjm0B2kyEkKkrR/96EesWLGCWbNmcckllzBkyBC2b9/OCy+8wEsvvcQPf/hD3n77bWbOnMmMGTMA2+3U7/cneiKlUigUYu7cuUyZMiXR7XTChAmceOKJiTRXXXUVf/vb37j00kuZPXs2NTU1PPjggwwfPpzzzz8/kW7WrFk888wzXHnllcyePZuSkhLee+89li1bximnnNJk19W2JgFBCJG2SkpKePLJJ1m4cCHPPvss1dXVlJSUJO7sHTZsGI899hh33303999/P2C7ll5//fWN7kFIhVtuuYVnn32We++9F9d1ufDCC7npppsalfmxxx7jf/7nf7j77rsJBoOcfvrpLFiwoF7vo9LSUp5++mkW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\n",
"text/plain": [
"<Figure size 432x216 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"(autos2\n",
" .groupby('year')\n",
" [['comb08', 'speeds']]\n",
" .mean()\n",
" .plot()\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"<AxesSubplot:xlabel='year'>"
]
},
"execution_count": 68,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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73LCCSewa9euxPyGjjjiCPbu3UssFsPv9zN06FB++tOf8otf/ILp06cn0k2fPp1bb721xfsqFaTJSAiRllzXZfny5Zx55pn1ggHY4XFjsRgrVqzgrLPOSgQDgP79+3PWWWfx1ltvEYvF6n0vftAHyMzMRCmF3+/nggsuSMwvLS2loKCALVu2NCrT9OnTE8EAYNasWQC8+eabANTV2RETMzIyGn03M9MOOR8KhRLz+vbty7HHHstNN93Eb37zG+bOncvTTz/NPffc89U7p41IDUGILshxgtDrxU7dZFRWVkZ1dTXDhg076PLa2lqGDGn8YMfS0lL++te/Ul5enmiTBygpqT/se35+Pr169Ur0/EmeX1nZeNztwYMH1/tcXFxMYWEhW7fawabiB/1wuPGYIfFgEb82sHLlSq666ir+/Oc/JwLemWeeSV5eHr/+9a+58MILKS0tbXLb24oEBCG6KMcJQqD/oRN2I/4mBg9qah7EhyJtmd69ewOwe/fuRst2795Nz549E+tbsmQJvXv3blT7mTRpEosWLeLDDz9s94AgTUZCiLTUo0cPcnNzWbt27UGXZ2dns379+kbL1q9fT05ODsXFqR2gacOGDfU+l5eXs2/fPo488kgA+vTpQ48ePfjkk08afffjjz+ud/CPX09oKBqNAjS5rK1JQBBCpCWfz8cZZ5zBq6++yqefflpvmTEGv9/PySefzCuvvMK2bdsSy7Zt28Yrr7zChAkTDnr231pLlixJHLAB/vjHPwJw6qmnJuZNnjyZ1157jZ07DzTX/fOf/2TDhg1885vfTMwbPHgwO3fu5P3336+3jmXLlgE0qjm0B2kyEkKkrR/96EesWLGCWbNmcckllzBkyBC2b9/OCy+8wEsvvcQPf/hD3n77bWbOnMmMGTMA2+3U7/cneiKlUigUYu7cuUyZMiXR7XTChAmceOKJiTRXXXUVf/vb37j00kuZPXs2NTU1PPjggwwfPpzzzz8/kW7WrFk888wzXHnllcyePZuSkhLee+89li1bximnnNJk19W2JgFBCJG2SkpKePLJJ1m4cCHPPvss1dXVlJSUJO7sHTZsGI899hh33303999/P2C7ll5//fWN7kFIhVtuuYVnn32We++9F9d1ufDCC7npppsalfmxxx7jf/7nf7j77rsJBoOcfvrpLFiwoF7vo9LSUp5++mkW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\n",
"text/plain": [
"<Figure size 432x216 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"(autos2\n",
" .groupby('year')\n",
" [['comb08', 'speeds']]\n",
" .mean()\n",
" #.median()\n",
" #.quantile(.3)\n",
" #.std()\n",
" #.var()\n",
" .plot()\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 69,
"metadata": {
"scrolled": true
},
"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>city08</th>\n",
" <th>comb08</th>\n",
" <th>highway08</th>\n",
" <th>cylinders</th>\n",
" <th>displ</th>\n",
" <th>fuelCost08</th>\n",
" <th>range</th>\n",
" <th>speeds</th>\n",
" </tr>\n",
" <tr>\n",
" <th>year</th>\n",
" <th>country</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 rowspan=\"2\" valign=\"top\">1984</th>\n",
" <th>Other</th>\n",
" <td>19.384615</td>\n",
" <td>21.417330</td>\n",
" <td>24.847038</td>\n",
" <td>4.908046</td>\n",
" <td>2.691406</td>\n",
" <td>2118.125553</td>\n",
" <td>0.000000</td>\n",
" <td>3.969054</td>\n",
" </tr>\n",
" <tr>\n",
" <th>US</th>\n",
" <td>16.079232</td>\n",
" <td>17.797119</td>\n",
" <td>20.669868</td>\n",
" <td>6.033613</td>\n",
" <td>3.808594</td>\n",
" <td>2578.871549</td>\n",
" <td>0.000000</td>\n",
" <td>3.872749</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">1985</th>\n",
" <th>Other</th>\n",
" <td>19.284768</td>\n",
" <td>21.373068</td>\n",
" <td>24.816777</td>\n",
" <td>4.871965</td>\n",
" <td>2.636719</td>\n",
" <td>2141.997792</td>\n",
" <td>0.000000</td>\n",
" <td>3.958057</td>\n",
" </tr>\n",
" <tr>\n",
" <th>US</th>\n",
" <td>16.275472</td>\n",
" <td>18.025157</td>\n",
" <td>21.020126</td>\n",
" <td>5.949686</td>\n",
" <td>3.765625</td>\n",
" <td>2553.899371</td>\n",
" <td>0.000000</td>\n",
" <td>3.886792</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">1986</th>\n",
" <th>Other</th>\n",
" <td>19.167183</td>\n",
" <td>21.213622</td>\n",
" <td>24.650155</td>\n",
" <td>4.804954</td>\n",
" <td>2.537109</td>\n",
" <td>2149.148607</td>\n",
" <td>0.000000</td>\n",
" <td>4.069659</td>\n",
" </tr>\n",
" <tr>\n",
" <th>US</th>\n",
" <td>15.945035</td>\n",
" <td>17.645390</td>\n",
" <td>20.464539</td>\n",
" <td>6.136525</td>\n",
" <td>3.925781</td>\n",
" <td>2588.741135</td>\n",
" <td>0.000000</td>\n",
" <td>3.886525</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">1987</th>\n",
" <th>Other</th>\n",
" <td>18.633381</td>\n",
" <td>20.710414</td>\n",
" <td>24.186876</td>\n",
" <td>4.825963</td>\n",
" <td>2.583984</td>\n",
" <td>2227.318117</td>\n",
" <td>0.000000</td>\n",
" <td>4.142653</td>\n",
" </tr>\n",
" <tr>\n",
" <th>US</th>\n",
" <td>15.611722</td>\n",
" <td>17.326007</td>\n",
" <td>20.208791</td>\n",
" <td>6.164835</td>\n",
" <td>3.931641</td>\n",
" <td>2630.036630</td>\n",
" <td>0.000000</td>\n",
" <td>3.902930</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">1988</th>\n",
" <th>Other</th>\n",
" <td>18.668224</td>\n",
" <td>20.814642</td>\n",
" <td>24.437695</td>\n",
" <td>4.819315</td>\n",
" <td>2.531250</td>\n",
" <td>2207.476636</td>\n",
" <td>0.000000</td>\n",
" <td>4.205607</td>\n",
" </tr>\n",
" <tr>\n",
" <th>US</th>\n",
" <td>15.577869</td>\n",
" <td>17.372951</td>\n",
" <td>20.420082</td>\n",
" <td>6.307377</td>\n",
" <td>4.066406</td>\n",
" <td>2623.258197</td>\n",
" <td>0.000000</td>\n",
" <td>4.028689</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">2016</th>\n",
" <th>Other</th>\n",
" <td>21.903749</td>\n",
" <td>24.439716</td>\n",
" <td>28.866261</td>\n",
" <td>5.493414</td>\n",
" <td>2.992188</td>\n",
" <td>2127.608916</td>\n",
" <td>1.017224</td>\n",
" <td>7.296859</td>\n",
" </tr>\n",
" <tr>\n",
" <th>US</th>\n",
" <td>25.061818</td>\n",
" <td>27.701818</td>\n",
" <td>32.265455</td>\n",
" <td>5.356364</td>\n",
" <td>3.277344</td>\n",
" <td>1960.545455</td>\n",
" <td>17.214545</td>\n",
" <td>6.301818</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">2017</th>\n",
" <th>Other</th>\n",
" <td>22.423795</td>\n",
" <td>24.910521</td>\n",
" <td>29.208456</td>\n",
" <td>5.431662</td>\n",
" <td>2.919922</td>\n",
" <td>2114.110128</td>\n",
" <td>1.243854</td>\n",
" <td>7.474926</td>\n",
" </tr>\n",
" <tr>\n",
" <th>US</th>\n",
" <td>24.003623</td>\n",
" <td>26.496377</td>\n",
" <td>30.829710</td>\n",
" <td>5.532609</td>\n",
" <td>3.419922</td>\n",
" <td>2031.884058</td>\n",
" <td>15.731884</td>\n",
" <td>6.304348</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">2018</th>\n",
" <th>Other</th>\n",
" <td>22.310442</td>\n",
" <td>24.779868</td>\n",
" <td>29.042333</td>\n",
" <td>5.396990</td>\n",
" <td>2.886719</td>\n",
" <td>2121.448730</td>\n",
" <td>1.135466</td>\n",
" <td>7.391345</td>\n",
" </tr>\n",
" <tr>\n",
" <th>US</th>\n",
" <td>23.526690</td>\n",
" <td>25.925267</td>\n",
" <td>30.145907</td>\n",
" <td>5.597865</td>\n",
" <td>3.390625</td>\n",
" <td>2037.900356</td>\n",
" <td>12.537367</td>\n",
" <td>5.601423</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">2019</th>\n",
" <th>Other</th>\n",
" <td>23.084221</td>\n",
" <td>25.456922</td>\n",
" <td>29.560503</td>\n",
" <td>5.315586</td>\n",
" <td>2.839844</td>\n",
" <td>2093.659245</td>\n",
" <td>2.581801</td>\n",
" <td>7.545983</td>\n",
" </tr>\n",
" <tr>\n",
" <th>US</th>\n",
" <td>24.169014</td>\n",
" <td>26.250000</td>\n",
" <td>30.042254</td>\n",
" <td>5.559859</td>\n",
" <td>3.419922</td>\n",
" <td>2093.133803</td>\n",
" <td>16.419014</td>\n",
" <td>5.647887</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">2020</th>\n",
" <th>Other</th>\n",
" <td>22.579487</td>\n",
" <td>25.174359</td>\n",
" <td>29.543590</td>\n",
" <td>5.148718</td>\n",
" <td>2.693359</td>\n",
" <td>2050.256410</td>\n",
" <td>2.446154</td>\n",
" <td>7.743590</td>\n",
" </tr>\n",
" <tr>\n",
" <th>US</th>\n",
" <td>24.071429</td>\n",
" <td>26.571429</td>\n",
" <td>30.642857</td>\n",
" <td>4.000000</td>\n",
" <td>1.978516</td>\n",
" <td>1650.000000</td>\n",
" <td>0.000000</td>\n",
" <td>7.785714</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>74 rows × 8 columns</p>\n",
"</div>"
],
"text/plain": [
" city08 comb08 highway08 cylinders displ \\\n",
"year country \n",
"1984 Other 19.384615 21.417330 24.847038 4.908046 2.691406 \n",
" US 16.079232 17.797119 20.669868 6.033613 3.808594 \n",
"1985 Other 19.284768 21.373068 24.816777 4.871965 2.636719 \n",
" US 16.275472 18.025157 21.020126 5.949686 3.765625 \n",
"1986 Other 19.167183 21.213622 24.650155 4.804954 2.537109 \n",
" US 15.945035 17.645390 20.464539 6.136525 3.925781 \n",
"1987 Other 18.633381 20.710414 24.186876 4.825963 2.583984 \n",
" US 15.611722 17.326007 20.208791 6.164835 3.931641 \n",
"1988 Other 18.668224 20.814642 24.437695 4.819315 2.531250 \n",
" US 15.577869 17.372951 20.420082 6.307377 4.066406 \n",
"... ... ... ... ... ... \n",
"2016 Other 21.903749 24.439716 28.866261 5.493414 2.992188 \n",
" US 25.061818 27.701818 32.265455 5.356364 3.277344 \n",
"2017 Other 22.423795 24.910521 29.208456 5.431662 2.919922 \n",
" US 24.003623 26.496377 30.829710 5.532609 3.419922 \n",
"2018 Other 22.310442 24.779868 29.042333 5.396990 2.886719 \n",
" US 23.526690 25.925267 30.145907 5.597865 3.390625 \n",
"2019 Other 23.084221 25.456922 29.560503 5.315586 2.839844 \n",
" US 24.169014 26.250000 30.042254 5.559859 3.419922 \n",
"2020 Other 22.579487 25.174359 29.543590 5.148718 2.693359 \n",
" US 24.071429 26.571429 30.642857 4.000000 1.978516 \n",
"\n",
" fuelCost08 range speeds \n",
"year country \n",
"1984 Other 2118.125553 0.000000 3.969054 \n",
" US 2578.871549 0.000000 3.872749 \n",
"1985 Other 2141.997792 0.000000 3.958057 \n",
" US 2553.899371 0.000000 3.886792 \n",
"1986 Other 2149.148607 0.000000 4.069659 \n",
" US 2588.741135 0.000000 3.886525 \n",
"1987 Other 2227.318117 0.000000 4.142653 \n",
" US 2630.036630 0.000000 3.902930 \n",
"1988 Other 2207.476636 0.000000 4.205607 \n",
" US 2623.258197 0.000000 4.028689 \n",
"... ... ... ... \n",
"2016 Other 2127.608916 1.017224 7.296859 \n",
" US 1960.545455 17.214545 6.301818 \n",
"2017 Other 2114.110128 1.243854 7.474926 \n",
" US 2031.884058 15.731884 6.304348 \n",
"2018 Other 2121.448730 1.135466 7.391345 \n",
" US 2037.900356 12.537367 5.601423 \n",
"2019 Other 2093.659245 2.581801 7.545983 \n",
" US 2093.133803 16.419014 5.647887 \n",
"2020 Other 2050.256410 2.446154 7.743590 \n",
" US 1650.000000 0.000000 7.785714 \n",
"\n",
"[74 rows x 8 columns]"
]
},
"execution_count": 69,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# add country\n",
"(autos2\n",
" .assign(country=autos2.make.apply(country))\n",
" .groupby(['year', 'country'])\n",
" .mean()\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 84,
"metadata": {
"scrolled": true
},
"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></th>\n",
" <th colspan=\"3\" halign=\"left\">city08</th>\n",
" <th colspan=\"3\" halign=\"left\">comb08</th>\n",
" <th colspan=\"3\" halign=\"left\">highway08</th>\n",
" <th>cylinders</th>\n",
" <th>...</th>\n",
" <th>displ</th>\n",
" <th colspan=\"3\" halign=\"left\">fuelCost08</th>\n",
" <th colspan=\"3\" halign=\"left\">range</th>\n",
" <th colspan=\"3\" halign=\"left\">speeds</th>\n",
" </tr>\n",
" <tr>\n",
" <th></th>\n",
" <th></th>\n",
" <th>min</th>\n",
" <th>mean</th>\n",
" <th>second_to_last</th>\n",
" <th>min</th>\n",
" <th>mean</th>\n",
" <th>second_to_last</th>\n",
" <th>min</th>\n",
" <th>mean</th>\n",
" <th>second_to_last</th>\n",
" <th>min</th>\n",
" <th>...</th>\n",
" <th>second_to_last</th>\n",
" <th>min</th>\n",
" <th>mean</th>\n",
" <th>second_to_last</th>\n",
" <th>min</th>\n",
" <th>mean</th>\n",
" <th>second_to_last</th>\n",
" <th>min</th>\n",
" <th>mean</th>\n",
" <th>second_to_last</th>\n",
" </tr>\n",
" <tr>\n",
" <th>year</th>\n",
" <th>country</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">1984</th>\n",
" <th>Other</th>\n",
" <td>7</td>\n",
" <td>19.384615</td>\n",
" <td>14</td>\n",
" <td>8</td>\n",
" <td>21.417330</td>\n",
" <td>14</td>\n",
" <td>9</td>\n",
" <td>24.847038</td>\n",
" <td>15</td>\n",
" <td>2</td>\n",
" <td>...</td>\n",
" <td>2.400391</td>\n",
" <td>1050</td>\n",
" <td>2118.125553</td>\n",
" <td>3000</td>\n",
" <td>0</td>\n",
" <td>0.000000</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>3.969054</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>US</th>\n",
" <td>8</td>\n",
" <td>16.079232</td>\n",
" <td>15</td>\n",
" <td>9</td>\n",
" <td>17.797119</td>\n",
" <td>17</td>\n",
" <td>10</td>\n",
" <td>20.669868</td>\n",
" <td>19</td>\n",
" <td>4</td>\n",
" <td>...</td>\n",
" <td>4.101562</td>\n",
" <td>1200</td>\n",
" <td>2578.871549</td>\n",
" <td>2500</td>\n",
" <td>0</td>\n",
" <td>0.000000</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>3.872749</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">1985</th>\n",
" <th>Other</th>\n",
" <td>7</td>\n",
" <td>19.284768</td>\n",
" <td>19</td>\n",
" <td>8</td>\n",
" <td>21.373068</td>\n",
" <td>20</td>\n",
" <td>9</td>\n",
" <td>24.816777</td>\n",
" <td>22</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>2.000000</td>\n",
" <td>1000</td>\n",
" <td>2141.997792</td>\n",
" <td>2100</td>\n",
" <td>0</td>\n",
" <td>0.000000</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>3.958057</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>US</th>\n",
" <td>8</td>\n",
" <td>16.275472</td>\n",
" <td>14</td>\n",
" <td>10</td>\n",
" <td>18.025157</td>\n",
" <td>15</td>\n",
" <td>10</td>\n",
" <td>21.020126</td>\n",
" <td>17</td>\n",
" <td>3</td>\n",
" <td>...</td>\n",
" <td>3.699219</td>\n",
" <td>1000</td>\n",
" <td>2553.899371</td>\n",
" <td>2800</td>\n",
" <td>0</td>\n",
" <td>0.000000</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>3.886792</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">1986</th>\n",
" <th>Other</th>\n",
" <td>6</td>\n",
" <td>19.167183</td>\n",
" <td>10</td>\n",
" <td>7</td>\n",
" <td>21.213622</td>\n",
" <td>11</td>\n",
" <td>9</td>\n",
" <td>24.650155</td>\n",
" <td>12</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>4.199219</td>\n",
" <td>900</td>\n",
" <td>2149.148607</td>\n",
" <td>3850</td>\n",
" <td>0</td>\n",
" <td>0.000000</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>4.069659</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>US</th>\n",
" <td>9</td>\n",
" <td>15.945035</td>\n",
" <td>16</td>\n",
" <td>10</td>\n",
" <td>17.645390</td>\n",
" <td>17</td>\n",
" <td>11</td>\n",
" <td>20.464539</td>\n",
" <td>19</td>\n",
" <td>3</td>\n",
" <td>...</td>\n",
" <td>4.300781</td>\n",
" <td>900</td>\n",
" <td>2588.741135</td>\n",
" <td>2500</td>\n",
" <td>0</td>\n",
" <td>0.000000</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>3.886525</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">1987</th>\n",
" <th>Other</th>\n",
" <td>6</td>\n",
" <td>18.633381</td>\n",
" <td>12</td>\n",
" <td>7</td>\n",
" <td>20.710414</td>\n",
" <td>12</td>\n",
" <td>9</td>\n",
" <td>24.186876</td>\n",
" <td>12</td>\n",
" <td>2</td>\n",
" <td>...</td>\n",
" <td>2.400391</td>\n",
" <td>900</td>\n",
" <td>2227.318117</td>\n",
" <td>3500</td>\n",
" <td>0</td>\n",
" <td>0.000000</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>4.142653</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>US</th>\n",
" <td>8</td>\n",
" <td>15.611722</td>\n",
" <td>12</td>\n",
" <td>9</td>\n",
" <td>17.326007</td>\n",
" <td>13</td>\n",
" <td>10</td>\n",
" <td>20.208791</td>\n",
" <td>14</td>\n",
" <td>3</td>\n",
" <td>...</td>\n",
" <td>2.800781</td>\n",
" <td>900</td>\n",
" <td>2630.036630</td>\n",
" <td>3250</td>\n",
" <td>0</td>\n",
" <td>0.000000</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>3.902930</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">1988</th>\n",
" <th>Other</th>\n",
" <td>6</td>\n",
" <td>18.668224</td>\n",
" <td>12</td>\n",
" <td>7</td>\n",
" <td>20.814642</td>\n",
" <td>12</td>\n",
" <td>10</td>\n",
" <td>24.437695</td>\n",
" <td>12</td>\n",
" <td>2</td>\n",
" <td>...</td>\n",
" <td>2.400391</td>\n",
" <td>950</td>\n",
" <td>2207.476636</td>\n",
" <td>3500</td>\n",
" <td>0</td>\n",
" <td>0.000000</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>4.205607</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>US</th>\n",
" <td>8</td>\n",
" <td>15.577869</td>\n",
" <td>14</td>\n",
" <td>9</td>\n",
" <td>17.372951</td>\n",
" <td>14</td>\n",
" <td>10</td>\n",
" <td>20.420082</td>\n",
" <td>15</td>\n",
" <td>3</td>\n",
" <td>...</td>\n",
" <td>2.800781</td>\n",
" <td>900</td>\n",
" <td>2623.258197</td>\n",
" <td>3000</td>\n",
" <td>0</td>\n",
" <td>0.000000</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>4.028689</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">2016</th>\n",
" <th>Other</th>\n",
" <td>10</td>\n",
" <td>21.903749</td>\n",
" <td>28</td>\n",
" <td>12</td>\n",
" <td>24.439716</td>\n",
" <td>30</td>\n",
" <td>13</td>\n",
" <td>28.866261</td>\n",
" <td>32</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>2.000000</td>\n",
" <td>550</td>\n",
" <td>2127.608916</td>\n",
" <td>1700</td>\n",
" <td>0</td>\n",
" <td>1.017224</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>7.296859</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>US</th>\n",
" <td>11</td>\n",
" <td>25.061818</td>\n",
" <td>91</td>\n",
" <td>12</td>\n",
" <td>27.701818</td>\n",
" <td>93</td>\n",
" <td>16</td>\n",
" <td>32.265455</td>\n",
" <td>94</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0.000000</td>\n",
" <td>550</td>\n",
" <td>1960.545455</td>\n",
" <td>700</td>\n",
" <td>0</td>\n",
" <td>17.214545</td>\n",
" <td>200</td>\n",
" <td>1</td>\n",
" <td>6.301818</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">2017</th>\n",
" <th>Other</th>\n",
" <td>10</td>\n",
" <td>22.423795</td>\n",
" <td>21</td>\n",
" <td>11</td>\n",
" <td>24.910521</td>\n",
" <td>24</td>\n",
" <td>11</td>\n",
" <td>29.208456</td>\n",
" <td>28</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>2.500000</td>\n",
" <td>500</td>\n",
" <td>2114.110128</td>\n",
" <td>2150</td>\n",
" <td>0</td>\n",
" <td>1.243854</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>7.474926</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>US</th>\n",
" <td>11</td>\n",
" <td>24.003623</td>\n",
" <td>131</td>\n",
" <td>12</td>\n",
" <td>26.496377</td>\n",
" <td>126</td>\n",
" <td>15</td>\n",
" <td>30.829710</td>\n",
" <td>120</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0.000000</td>\n",
" <td>500</td>\n",
" <td>2031.884058</td>\n",
" <td>500</td>\n",
" <td>0</td>\n",
" <td>15.731884</td>\n",
" <td>310</td>\n",
" <td>0</td>\n",
" <td>6.304348</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">2018</th>\n",
" <th>Other</th>\n",
" <td>9</td>\n",
" <td>22.310442</td>\n",
" <td>11</td>\n",
" <td>11</td>\n",
" <td>24.779868</td>\n",
" <td>12</td>\n",
" <td>11</td>\n",
" <td>29.042333</td>\n",
" <td>15</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>5.000000</td>\n",
" <td>500</td>\n",
" <td>2121.448730</td>\n",
" <td>4300</td>\n",
" <td>0</td>\n",
" <td>1.135466</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>7.391345</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>US</th>\n",
" <td>11</td>\n",
" <td>23.526690</td>\n",
" <td>120</td>\n",
" <td>14</td>\n",
" <td>25.925267</td>\n",
" <td>116</td>\n",
" <td>15</td>\n",
" <td>30.145907</td>\n",
" <td>112</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0.000000</td>\n",
" <td>500</td>\n",
" <td>2037.900356</td>\n",
" <td>550</td>\n",
" <td>0</td>\n",
" <td>12.537367</td>\n",
" <td>310</td>\n",
" <td>0</td>\n",
" <td>5.601423</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">2019</th>\n",
" <th>Other</th>\n",
" <td>9</td>\n",
" <td>23.084221</td>\n",
" <td>19</td>\n",
" <td>11</td>\n",
" <td>25.456922</td>\n",
" <td>22</td>\n",
" <td>14</td>\n",
" <td>29.560503</td>\n",
" <td>27</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>3.000000</td>\n",
" <td>500</td>\n",
" <td>2093.659245</td>\n",
" <td>2150</td>\n",
" <td>0</td>\n",
" <td>2.581801</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>7.545983</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>US</th>\n",
" <td>11</td>\n",
" <td>24.169014</td>\n",
" <td>104</td>\n",
" <td>14</td>\n",
" <td>26.250000</td>\n",
" <td>104</td>\n",
" <td>15</td>\n",
" <td>30.042254</td>\n",
" <td>104</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0.000000</td>\n",
" <td>500</td>\n",
" <td>2093.133803</td>\n",
" <td>650</td>\n",
" <td>0</td>\n",
" <td>16.419014</td>\n",
" <td>345</td>\n",
" <td>0</td>\n",
" <td>5.647887</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">2020</th>\n",
" <th>Other</th>\n",
" <td>13</td>\n",
" <td>22.579487</td>\n",
" <td>17</td>\n",
" <td>15</td>\n",
" <td>25.174359</td>\n",
" <td>20</td>\n",
" <td>18</td>\n",
" <td>29.543590</td>\n",
" <td>24</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>3.000000</td>\n",
" <td>600</td>\n",
" <td>2050.256410</td>\n",
" <td>2100</td>\n",
" <td>0</td>\n",
" <td>2.446154</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>7.743590</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>US</th>\n",
" <td>20</td>\n",
" <td>24.071429</td>\n",
" <td>21</td>\n",
" <td>22</td>\n",
" <td>26.571429</td>\n",
" <td>24</td>\n",
" <td>26</td>\n",
" <td>30.642857</td>\n",
" <td>28</td>\n",
" <td>4</td>\n",
" <td>...</td>\n",
" <td>2.300781</td>\n",
" <td>1300</td>\n",
" <td>1650.000000</td>\n",
" <td>1750</td>\n",
" <td>0</td>\n",
" <td>0.000000</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>7.785714</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>74 rows × 24 columns</p>\n",
"</div>"
],
"text/plain": [
" city08 comb08 \\\n",
" min mean second_to_last min mean \n",
"year country \n",
"1984 Other 7 19.384615 14 8 21.417330 \n",
" US 8 16.079232 15 9 17.797119 \n",
"1985 Other 7 19.284768 19 8 21.373068 \n",
" US 8 16.275472 14 10 18.025157 \n",
"1986 Other 6 19.167183 10 7 21.213622 \n",
" US 9 15.945035 16 10 17.645390 \n",
"1987 Other 6 18.633381 12 7 20.710414 \n",
" US 8 15.611722 12 9 17.326007 \n",
"1988 Other 6 18.668224 12 7 20.814642 \n",
" US 8 15.577869 14 9 17.372951 \n",
"... ... ... ... ... ... \n",
"2016 Other 10 21.903749 28 12 24.439716 \n",
" US 11 25.061818 91 12 27.701818 \n",
"2017 Other 10 22.423795 21 11 24.910521 \n",
" US 11 24.003623 131 12 26.496377 \n",
"2018 Other 9 22.310442 11 11 24.779868 \n",
" US 11 23.526690 120 14 25.925267 \n",
"2019 Other 9 23.084221 19 11 25.456922 \n",
" US 11 24.169014 104 14 26.250000 \n",
"2020 Other 13 22.579487 17 15 25.174359 \n",
" US 20 24.071429 21 22 26.571429 \n",
"\n",
" highway08 cylinders \\\n",
" second_to_last min mean second_to_last min \n",
"year country \n",
"1984 Other 14 9 24.847038 15 2 \n",
" US 17 10 20.669868 19 4 \n",
"1985 Other 20 9 24.816777 22 0 \n",
" US 15 10 21.020126 17 3 \n",
"1986 Other 11 9 24.650155 12 0 \n",
" US 17 11 20.464539 19 3 \n",
"1987 Other 12 9 24.186876 12 2 \n",
" US 13 10 20.208791 14 3 \n",
"1988 Other 12 10 24.437695 12 2 \n",
" US 14 10 20.420082 15 3 \n",
"... ... ... ... ... ... \n",
"2016 Other 30 13 28.866261 32 0 \n",
" US 93 16 32.265455 94 0 \n",
"2017 Other 24 11 29.208456 28 0 \n",
" US 126 15 30.829710 120 0 \n",
"2018 Other 12 11 29.042333 15 0 \n",
" US 116 15 30.145907 112 0 \n",
"2019 Other 22 14 29.560503 27 0 \n",
" US 104 15 30.042254 104 0 \n",
"2020 Other 20 18 29.543590 24 0 \n",
" US 24 26 30.642857 28 4 \n",
"\n",
" ... displ fuelCost08 range \\\n",
" ... second_to_last min mean second_to_last min \n",
"year country ... \n",
"1984 Other ... 2.400391 1050 2118.125553 3000 0 \n",
" US ... 4.101562 1200 2578.871549 2500 0 \n",
"1985 Other ... 2.000000 1000 2141.997792 2100 0 \n",
" US ... 3.699219 1000 2553.899371 2800 0 \n",
"1986 Other ... 4.199219 900 2149.148607 3850 0 \n",
" US ... 4.300781 900 2588.741135 2500 0 \n",
"1987 Other ... 2.400391 900 2227.318117 3500 0 \n",
" US ... 2.800781 900 2630.036630 3250 0 \n",
"1988 Other ... 2.400391 950 2207.476636 3500 0 \n",
" US ... 2.800781 900 2623.258197 3000 0 \n",
"... ... ... ... ... ... ... \n",
"2016 Other ... 2.000000 550 2127.608916 1700 0 \n",
" US ... 0.000000 550 1960.545455 700 0 \n",
"2017 Other ... 2.500000 500 2114.110128 2150 0 \n",
" US ... 0.000000 500 2031.884058 500 0 \n",
"2018 Other ... 5.000000 500 2121.448730 4300 0 \n",
" US ... 0.000000 500 2037.900356 550 0 \n",
"2019 Other ... 3.000000 500 2093.659245 2150 0 \n",
" US ... 0.000000 500 2093.133803 650 0 \n",
"2020 Other ... 3.000000 600 2050.256410 2100 0 \n",
" US ... 2.300781 1300 1650.000000 1750 0 \n",
"\n",
" speeds \n",
" mean second_to_last min mean second_to_last \n",
"year country \n",
"1984 Other 0.000000 0 3 3.969054 5 \n",
" US 0.000000 0 3 3.872749 4 \n",
"1985 Other 0.000000 0 3 3.958057 4 \n",
" US 0.000000 0 3 3.886792 4 \n",
"1986 Other 0.000000 0 3 4.069659 4 \n",
" US 0.000000 0 3 3.886525 4 \n",
"1987 Other 0.000000 0 3 4.142653 4 \n",
" US 0.000000 0 3 3.902930 4 \n",
"1988 Other 0.000000 0 3 4.205607 4 \n",
" US 0.000000 0 3 4.028689 4 \n",
"... ... ... ... ... ... \n",
"2016 Other 1.017224 0 1 7.296859 7 \n",
" US 17.214545 200 1 6.301818 1 \n",
"2017 Other 1.243854 0 1 7.474926 7 \n",
" US 15.731884 310 0 6.304348 1 \n",
"2018 Other 1.135466 0 0 7.391345 0 \n",
" US 12.537367 310 0 5.601423 1 \n",
"2019 Other 2.581801 0 0 7.545983 8 \n",
" US 16.419014 345 0 5.647887 1 \n",
"2020 Other 2.446154 0 0 7.743590 0 \n",
" US 0.000000 0 0 7.785714 0 \n",
"\n",
"[74 rows x 24 columns]"
]
},
"execution_count": 84,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# can go deeper and apply multiple aggregates\n",
"def second_to_last(ser):\n",
" return ser.iloc[-2]\n",
"\n",
"(autos2\n",
" .assign(country=autos2.make.apply(country))\n",
" .groupby(['year', 'country'])\n",
" .agg(['min', 'mean', second_to_last])\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 70,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<AxesSubplot:xlabel='year,country'>"
]
},
"execution_count": 70,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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fCtut9sG4PF4grNQKBRnAcqaeYHhcDho3759yqpVq6oEu/QGd+BWIiIifKbbbjCtWrXKrlevXvbcuXPjVq9eXblHjx7JwfaX7t27n9y2bVuUtcxt27aF//777zHdunXzG/Xr16+f4/P5mD9/fhXr9fPmzYsFaNq0aVZx7lehUPwzqJnJBcjEiRMPrF+/Pmbs2LGJffv2PdagQYOcw4cPh/3www+xP/300+ZQ1zRp0iTzt99+i5k2bVr1atWq5dWrVy/vyiuv9Lvp9u7d+8Rbb71VG+RMJfj6cePGJX311Vdxd911V5Phw4cfdTgc+uzZs6vHxsa677zzzqNmuhEjRhyfNWtW9Weeeab+5s2boxo1apS9devWCosWLYqvX79+9vXXX58anLdCoTjzqJnJBUjdunXdc+bM+atDhw4p3333XdWXX3657pIlS2LbtWtXaEf96KOPHmjSpEnWO++8U/Pf//53w08++STeGn/DDTck2+12GjRokN28efMCxv2YmBjfjBkztGbNmmVMnz494d13363VuHHj7I8//nhbXFyc10wXFxfnnTdv3l89evQ48csvv1R++eWX665cubJy7969j3/yySdaKI8whUJx5lF7c4XgQt+bqyQcPXrU2bVr1xZ33HHHgXvvvffo6a+48FB7cynOZ9TMRFEmzJw5Mw5g8ODByadLq1Aozj+UzURRKn788ceKmqZFzpw5s0bnzp2Ta9WqVWCVu0KhOP9RwkRRKt54442af/31V1TTpk0znnjiiQOnv0KhUJyPKGGiKBXz5s3TznQdFArFmUfZTBQKhUJRapQwUSgUCkWpUcJEoVAoFKVGCROFQqFQlBolTBQKhUJRapQwUSgUCkWpUcJEoVAoFKVGCRPFGePjjz+uKoRo/dtvv0WePrVCoTibUYsWFecMW7dujXj66afrbNmyJdrpdOrt2rVLeeKJJw7Ex8cHnJh16NAh14svvlhz/fr1MSkpKc6qVau6u3btevLee+89UqVKFW9h+SsUipKjhIninGD//v2um266SURFRXlvv/32g1lZWfbZs2fXuOmmmyK//PLLbebW9BkZGfahQ4cm5uTk2AcOHHisRo0aeVu3bq0wd+7c6ps2bYqeP3++WrGvUJQDSpgozgmmTp2akJeXZ//iiy+21q5d2w1w2WWXZf7rX/+6aPbs2bE33XTTCYBFixZVSkpKCnv55Zd3XHfddf7zWSIiInxz586tvmvXrrCGDc/dY5cVirMVZTO5QNm3b59r/Pjx9a+88spLmzVr1qpr167NJk2aVMeM37BhQ4Xhw4c3adGiRcsWLVq0HDFiRJPff/89wLbx3HPP1RRCtP7777/Db7vttoaXXXZZy7Zt27Z4+eWXawBomhY+fPjwJpdeemnLDh06NJ81a1ZsqLpkZmba77///nqtWrW6rGXLlpfdd9999dLS0gKezeXLl1dp165diilIAHr06JFeq1at3MWLF/vzzcjIcABUq1YtYPfiuLg4N0BkZGThZxMrFIoSo2YmFyAHDhxwDRky5OLs7GxHnz59jjVo0CDn0KFD4UuXLq0C7N+8eXPEzTffLKKjo72jRo06DPDFF19UGzNmTOKsWbP+uuSSSwJOUhw/fnyjhg0bZt91110Hfvzxx8pvv/12rZiYGM9HH32U0Llz55Ndu3ZN+fzzz+MnT57coF27dhkNGjQImBlMnjy5XkxMjOe22247uGPHjsiFCxfGHz9+3DVz5swdZn1TU1Odoc5/T0xMzFy/fn2M+b1du3YZdrudZ555pu4jjzyyv3bt2nm///57hdmzZ1fv2bPniYSEBE9wHgqFovQoYVJMfHqeLdt90HWm6xHpquW220p2hO2zzz5bOzU11TVr1qytLVu2zDbDH3300YMAL730Ui2fz2f75JNPttWvXz8PYNCgQcl9+vRp9tJLL9V6//33d1rza968ecaLL764D2DUqFHHO3bs2GLKlCn1Jk6cuHfMmDHHAbp06ZLWr1+/ZnPnzq36yCOPHLZeHxYW5ps1a9Z2l0s2a1xcnPvDDz+suWzZsuiuXbtmHD582AUFZxtm2tTUVKfH48HpdHLxxRfnPPLII3unTp1ae8yYMYlmuuuuu+74iy++qE7OVCjKCSVMioFPz7P9vP+apjneI+Fnui4Rjhq5nep8t6W4AsXr9bJq1arK7du3P2kVJAB2ux2Px8OGDRtiOnbseNIUJAANGjTI69Chw8lff/21stlxmwwfPvyY+X9kZKTesGHDrC1btkSPGDHihBmemJiYGxUV5T148GCBths8ePAxU5AAjBs3LskQJpW6du2akZ2dbQcpdIKvDQ8P9wFkZ2fbK1as6ANISEjIu/jiizM7dOiQWqtWrbx169ZFz58/v1qlSpU8TzzxxMHitJdCoSgaSphcYBw7dsyZnZ1tb9y4cU5h8bm5ufZ69eoViG/QoEHOsmXL7MePH3fWqFHDry6qW7dugNoqKirKW6VKFY/pYWUNT09Pd4TIN9f6PS4uzhsdHe09dOhQOOTbOfLy8grY+HJzc+3WNL/88kvU/fff3/iTTz75yxSW/fr1S4mOjvZOnz695tChQ48nJibmBuejUChKhxImxcBuC9M71fluy7mu5iprHI4C8gG73R6ybrpe/ConJCS4AZKSkgq0+/Hjx12VKlXymDOl2bNnx8fGxrqDZ109e/ZM+fDDD2uuXbs2WgkThaLsUcKkmNhtYXpUWINz1rU0Pj7eExkZ6duxY0dEYfHh4eG+vXv3Fojfs2dPREREhC8uLq5Mjdi7d+8O79y5c4b5/fjx446MjAxHQkJCLkDt2rXdlSpV8mzZsqVC8LXbtm2LatSokd8wn5yc7PL5fLbgdG632wbg9XoLxCkUitKjXIMvMBwOB+3bt09ZtWpVlY0bNwa4+vp8PpxOJ61bt0775ZdfquzduzfMjNu7d2/YypUrq7Rp0ybNai8pC+bNmxfvdufb1t97771qAN26dUszwzp37nxy9erVlQ8cOOCfnSxdurTiwYMHw3v27HnSDKtbt27OiRMnXCtWrIi2lrFgwYKqAM2bNy/gEaZQKEqPmplcgEycOPHA+vXrY8aOHZvYt2/fYw0aNMg5fPhw2A8//BD7008/bZ4wYcLBG2+8MWbEiBFi4MCBxwDmz58fb7fb9QkTJpS5ATsvL88+YsSIi6666qqTpmtw69at07p27ZpuprnnnnsOL1u2rMqoUaPEkCFDkrKysuyzZs2q0aBBg2yroX/s2LFJ3333Xdy9997beODAgccSEhJy169fX/Gnn36KbdOmTVqbNm2UMFEoygElTC5A6tat654zZ85fL774Yq3vvvuuanZ2tiMuLi6vffv2qQDNmjXL+eCDD7QpU6bU+vjjjxMALrnkkoyHH374QPAak7Lgscce2/f5559Xfeedd2rpuk7Pnj1PTJ48eV9wnadPn64988wzdd58881aTqdTv/LKK1OffPLJ/eHh4X5DTGJiYu6cOXO2TpkypdZ3330Xm5KS4oqNjXUPGzbsyCOPPHKorOuuUCgktpIYRM93NmzY8E6VKlUGNGzYUK1LUJQZu3btqnfy5MkvWrdufduZrotCUdYom4lCoVAoSo0SJgqFQqEoNUqYKBQKhaLUKGGiUCgUilKjhIlCoVAoSo0SJgqFQqEoNUqYKBQKhaLUKGGiUCgUilKjhIlCoVAoSo0SJgqFQqEoNUqYKBQKhaLUXKgbPXqQgjQtVGTVqlUjbTabC6jyj9bqH2Dq1Kn2119/3bZu3TpvTExMoemEEI5//etf+j333FPgqNzTIYRwjB49Wn/00UeLfe35jMPhsFetWvUmYMiZrotCUUJiAB8hZMeFKkzsgA2oFCrSZvOfn1TwCMFznOLcm00mLmkblObaf5ylS5fy2muvsWPHDqpWrcrgwYO54447CD67ZfPmzUydOpXNmzeTnZ1NvXr1GDp0KEOHDsVuP/1E32azhQFhp02oUJy9hHzQL1RhkkYhgkQh2bRpU8jjeM9Hli9fzr/+9S+uvPJKHn/8cbZv387rr7/OyZMnefzxx/3ptmzZwrBhw2jQoAG33XYb4eHhLFu2jCeffJKjR49y3333nbmbUCj+OUJqdC5UYaI4DeHh4We6Cv8YL7zwApdccgnvv/++X4BGRUXxzjvvMGrUKOrXrw/A3LlzAZgxYwaVK1cGYNiwYQwePJgFCxYoYaK4oFEG+AuU1NRUHn74YVq3bk3r1q2ZNGkS2dnZ/nghBNOmTQu4Zs2aNQwcOJDmzZvTo0cPPv30U6ZNm4YQImQZixcv5rrrrqNZs2Zcd911rFixwh+3ZcsWhBAsX77cH7Zu3TqEEIwePTogn0GDBjF+/Hj/988//5zRo0fTrl07mjVrxrXXXsusWbMCrhk5ciR9+/YtUCdd1+nSpQv33nsvADt27GDHjh0MHTo0YCY2YsQIfD4f33//vT8sIyOD8PBwrLYmm81GXFzcBSV8FYpQKGFygXLPPfeQk5PDhAkT6N27N/Pnz+e1114rNP3WrVsZN24caWlpjB8/nsGDB/P666/zww8/hEy/bt06nn76aa6//noeeughcnNzueeeezh5Uh7XnpiYSFRUFOvXr/dfs379eux2O5s2bcI8Ez4zM5O//vqL1q1b+9PNnj2bWrVqcfvttzNx4kQSEhL4z3/+wyeffOJP069fPzRNY8eOHQH1Wrt2LUeOHPELmq1btwLQrFmzgHTVq1enRo0a/niAtm3bkpGRwb///W927tzJgQMHmDFjBr/88gu33npr4Y2tUFwAKDVXMfHqHlLdyWe6GlRyxeKwlfzna968OU899ZT/e0pKCvPmzeOhhx4KmX7q1Kk4nU5mz55NfHw8AL179+baa68NmX7nzp0sWrSIOnXqAHDFFVfQr18/vvnmG0aOHInD4aBly5YFhMnVV1/N4sWL2bp1Ky1atOD333/H6/UGCJOZM2cSERHh/z5y5EhuueUWPvzwQ2688UYArrnmGiZPnszXX3/N/fff70/79ddfU7lyZTp37gzAsWPHAPz3ZCU+Pp6kpCT/98GDB7N9+3bmzJnDZ599BoDL5eKpp55i0KBBIdtBobhQUMKkGHh1Dy9su58TeUfPdFWoGladhxNfKbFAGTZsWMD3Nm3asGTJEjIyMoiOjg6I83q9rF69mmuuuSag061Xrx6dOnXip59+KpB/x44d/YIE5EwkOjqa/fv3+8NatWrFm2++SW5uLi6Xi99//53JkyejaRobNmygRYsWrF+/ngoVKnDxxRej6zopuTlEOPLvOT09HbfbTdu2bfnll19IT0+nYsWKVKxYke7du7Nw4UK/MMnLy/Or3lwuFwA5OfJI+7Cwgg5W4eHhAao/h8NBnTp16NixI9dccw1hYWF88803PPHEE1SpUoXu3bufvuEVivMUJUwuUBISEgK+m3aA1NTUAsLkxIkT5OTkULdu3QL51KtXL2T+NWvWLBBWqVIl0tLyHUHatGmD2+1m06ZNREVFkZGR4bfhrF+/nptvvpn169fTokULnE4n6Xm57E9LZcfmzXz18Ux+//33gM4e8AsTkKqub7/9lo0bN9KqVSuWL19OWloaffr08ac3Zzh5eXkF6pubmxswA3rnnXeYOXMmixcvJjIyEoBrr72WUaNG8dRTT9GlS5cLxgNOoQhGCZNi4LA5eTjxlfNCzRXc6aXmyhG6z1f4OsP0vFxyvR7CHacvt7A1F7qu+/9v0aIFLpeL9evXEx0dTZ06dahevTpt2rThhRdeIC8vj02bNvntEZluN0cOHuTf995Pw4YN/PYSl8vF8uXLmT59ekD9O3XqRGxsLAsXLqRVq1Z8/fXX1K5dO0BlZs60jh07RrVq1QLqeuzYMVq2bOn/PmvWLNq1a+cXJCZXXXUVzz33HIcPH6Z27dqnbRuF4nxECZNi4rA5iQ2rdvqEZxkenxeHLXQH7/X5SMvNBSDDXXCEXrVqVcLCw9m1Zw/HMjOpHZO/RGfv3r3+/1Nzcwgvxsg8IiKCSy65xC9M2rRpg8fno3Xr1pw8eZKvvvqKnJwcf+ef43GzYeUq3Hl5vDx1Go0ts6I1a9YUyN/pdHLdddfxzTffMH78eJYtW8bNN98ckObiiy8G5GLEpk2b+sOPHj3KkSNH/PEAx48fx+v1FijHdBYIFadQXCgob64LgGy3m7+OH2N36smQ8blej///HMv/Jna7nUvbtGbN8hUcOHLEH753715+/vlnANJyc9mbmsKe1JRi1a1169b89ttvbNiwgYuaN2fr8SSiq8UTHx/Pu+++i9PppEWLFsZ9ePwznlyP259Heno6n3/+ecj8+/fvT3JyMk8++SS5ubkBKi6AJk2a0LBhQ+bMmRMgDGbPno3dbqdnz57+sAYNGvDLL7+QmprqD/N6vXz77bfExMSoWYnigkbNTC4A0t156EBmXl6Amskkx5Pfiea4CwoTt8/H4LFj+H3tOh6+/Q5uHD4cdJ2ZM2fSpEkT/vrrLzLy5Mwmr5DRua7reHxeUnNz8Pi8OO1yBtO6dWs++OADMjMzadTsEgBScnNo1aoVixcvpnnz5lSoUAGPz4vb5+XStpfjdLl48J57GTliBJmZmXz22WdUrVrV75llpVmzZjRu3JjvvvuOpk2b0qhRowJpHn74Ye68805uueUWrr32WrZv384nn3zC0KFDadCggT/drbfeykMPPcQNN9zAkCFDCA8P55tvvmHLli1MmDBB2UsUFzRqZnIBkOuRAkIHPCFsItaZSa7XU0DgZHvcNBKC/3vxBSpERTFt6lTmzZvHPffcQ7t27QgPDyfT7Q7ONgC3z4dPB69P96vUQAoTm81G1apViTWM9tlut1+1ZX5mG/dQq25dJkz+Dzrw/PPP8+mnnzJkyJACCx2t9OvXDyDkIkaAbt268dprr5GSksLkyZNZsmQJd955J4899lhAur59+/Lee+9RvXp13nvvPZ5//nmysrKYPHkyt9122ynvX6E437GFGqleAKRwir25TDtAYZ5K/zQZebm4fT6qRESGjNd1Ha/u84/2g/k7+bi/M64TU6lAPntSTwZ08IlV4wizGNkPZ6RzLCvT/716VDTVo6TH11133cXff//Ny5/MwHyS4itEkRBdMaCMlJxs9qVJ9VBsZCS1KwY2f5Y7jx0n8x0bGlepSgXDfRcgKSuDIxkZ/u/hDieialzItoCADS354IMPmDJlCitWrCAuruA1/xRl+Vwt27eb//zyI49c2YlrGl5U6vwUimKQClQODlQzk7Mcn8/HntQU9qelklXI6D8pK5Otx4+RnJ1VIE7XdXIsqidzlmIlOCw7SNWVbdgn8gyBk2kY6ffs2cOKFStodXkbrEOSUPW0hoWKzw6qQ1aQI0COEe80bCZ5Pg++EAOh3akn2XrimF/dpus68+bNo3379mdUkBSX7cnH+X73jpBqSbfXy2MrlrA79SRP/PJjwMzSyt/Jx0nKzAgZp1CUNcpmchaQ7Xbjcjj8HWVAnDe/08z2uANG6yZphltvWl4usZEVAuJyvd6ADinYwO7TdX/Ha7PZ0HWdLI+bSsj1Fbquk+124/V4GD9sBJ179SKhVk18qWnMmTMHl8vFDaNGBdbZ40bX9YDZgVUNluPx4PX5cFjuN1jAZHkCv2cb8ZXCIziRnYWuS/tMhGWLeLfXS4axXuRIykk2rf6V1atXs3PnTiZNmgRAem4uhzPTqRldkeiws3M/rWy3m2EL5pCck81/u/Rk2CWXBsR/sX0rB9Llep2jmRnM27aFG5u2CEiz6sA+Ri78jNiISL4dchPxFaIKlLMp6QhbjicxUFxSJHdvheJUqJlJKUnKzOBAemrIEWRRyMjL5e+TJ9hTiKdVjmXEnu0pOKL3WWYeWW53gXoEzzpygr7neT3+WUWM0blay8nzevHqOnaHg3bt27Ny6VLee/V/fPLJJzRv3pyZM2cSm1BDXm9sdujT9YDRstfnI8dzGmFhfHcZRmyrcPH6fOQa9xgTHu4XUnlBgtGa56Gko0yYMIElS5Zw11130alTJ0Cqy3I8HpIsajsrPl3nQHoqJ0LM8kwOpqfxd/Jx3KVwBT6Wlemf4QXz1Y5tJOfIxZjPr/mZkzn5CzM9Ph+vbfwVgDBDrfnmb2sC6pLn9fL4zz/g03WOZ2cxafn3BZ6LzceOMvjL2Uxa/j2jvp4Xcla7KyWZV9at5Of9e0LOAhUKK2o4Ugo8Pi9HDDVC5fCIkCNdj0+OlmPCwkMu5MswOs0stxuPz1dgdmLt2IMFAQQazD0+H26fjzCLV5E5E7HZ8I/mfT5fvout0QnZbTZiwsNJzc0h250/szDLd9rtvPTCC/x14hgen4/aFWOIjayAT9fZejzJ3wbmfWS53UQ4XcY95AusMIeDPK+XLLebikZ7SWEj6xkXWYHDGenkeb3keb2EORwB9x3pdBFuhOUGdebZFgFUMS6Obdu2BcyOvEa9zPb26Tp2SzxI205ydjY2sqkUHlHg98jzev2C5kR2FjWCbENFYcvxJAbOn0WdmBgWDh4dMLvSdZ2PNv/m/34yJ5sX1/zCs12uBuDL7VvZl5aKDXizV19u/e5LDqSn8dWObQwScp3MR39uZGdKvv3phz07+VzbwuDEZv57vGPxAv+MdO3hA/Sf/wnv9x5Ak9g4cjxuXt+4hrd/W0eeT6apXTGGGxKbcUNiM2pGF35C597UFDw+H42qxBa7XRTnNmpmUgqsnVyojh7gUEY6+9JSOVbISNc6c8gOZUtwB5YRPMIMLjc4DzO+okXQhbKhhDucVDA6f69F9WWO9iNcLmw2m1/NZobneNz+UWsFVxiRTjM+v16m/SPc6STa2APLOvOwCswqEZH+Dt5MY8aHGapAUyUTPOuyzky8ul5gJpdhuEiDnIGEst2YizZ18Ls7W0m3hJ3MyS50Ruo9xU4Cb2z8lVyvhx0nk5lhERwAG44c8gvngRdJV+nZW/9gU9KRgFlJn8aJXFW/Edc3ktv/v75xDV6fj6TMDF5dvwqA0c0u45oGTQD4z8ofOZSRhk/XuW/pIg6kpxHhdPLIlZ2IcDrZl5bKwC9m8dZva7n60+lM2/AreT6vf7Z6ID2NV9atosOMd7hl0Xx+ObA34N73pJ7k3h++oeus97h6zod8sGlDiWfrinMTNTMpBUURJmaHVZhKw6r+yfK4qWg5F0OqsDwB3/O8XsItI9ngDtNq77DWK8oV5p815Ho9fqFgju7DnQ7CHA4cNpu/Iw53Ov3CyRQ0kU4Xabm5lvvK7+jDHA4quFyk5+UGCDWzk49yuqjgDCOZbLIsdpUsi0Bz2u1Eulxk5uWR5cmjMhH+ezBH8OYqe6sqzbTtWMlw51HBlb+BY3rQ/luZ7jy/cDPzyLCkSc/Lo3KQ55s13u3zkZ6XS0x4RECaY1mZHM5Ip0Z0NNUqBO5zlp6Xy7e7/vZ/f23jGoZc3JxKRh4fG8KlRbUavNDtGrYeT2Jb8nEe//kHRjdryZ7UFGzA+NZXAvCvVlfw1Y5t7EpJ5rvdf/PDnp1kut3ERkQyoW1HPD4f6w4f4ERONg//tJhW1WuybN9uAJ7r0pMBF11Ch1r1GPftFyRlZfLfX+WZMy67ndsva8u/Wl3B4cx05m7bzLxtmzmencXSvbtYuncXF1WpyqhmLdl6Iom5f/2J1xAeuq7z1Mqf+PvkCZ7qeJVfdak4v1Ezk1JgVbOEWjnu8fn8I/xQswqrLQAKGqFzLdeYyphgr6cCMxOLcPHpPr9dIcLp9AuhUEIw3OHEZrMRaZl56LruL8+ccUSZu+0aRnSzzlFGp22my/HKGYtumQFUcLn8Qsx679mWeJBCx9oe5j2ZeZv3kRtkJzA7M7MumZaOXwoKOaswZz7BW8dkezwB63DS83IDfjOfrvtnJmYeyTmBG026vV6OGqrPo5mZBWZP204cw6frJERVJNoVRmpuDm9slFvBJGVmsGjXdgBGN2uJ027nqU49APgj6QiPrlgCwLWNBE1ipWeaqBpPzwaNAXhq5U98sV2ev/LIlZ2pFB5B1cgKPNtVruL/5cBepm5YDcBNzVoywJj5XFqtBgsGjaRpnNwmqGPtenw3ZAwPXtGRSJeLhpVjmXhlZ1aPup23evWlbYJc6b/95Ake//kHZm/dhFfXqVUxhue79uK6RtJVefbWTYxaOC/A5qM4f1HCpBQEd8oFVVD5Hbtpz7AS7NJpekHlf893h430d+L5eVo7+4rGCDvbYoTP9Xj9ap0Ih9O/dbtZrm4xlJtxZoed7faQa/Ekq+AKjAcpcMwZlykIzHS6Lu8nz+v1d9AVXGGEOxx+L66CwsIZkFe2xy3tKV5PQLw5M/H4fP68zdmPw2Yj1tiIMdOdr4IzbTAAcRUq+Mv36fm/iSlszPp5fL4A4ZzlzvPnV8NYZ5Oemxuw6j8pK9OfRtd1DmWk+X8Pn66zO0U6Wtx22eXc3vJyAD78cyMH09OY/dcmPD4fsRGRXGeor9rWrO1Xd5nP2z3GrMTk7lbyuynEWlSrwQ2J+Yd99WrQxJ8HQKvqNXm0fdeAPBKiK7Jg0Eh+HH4zM64fHNLm4XI4uKbhRcztP4yFg0cxSDQlzO4gvkIUT3W6ih+H38zQi5sz7eo+3NumHQC/HtpP/88/YVPSkQL5Kc4vlDApIXohKigrBWcRoe0Zpg3YOpOxpo9wOi0j/vw83T6fXzdvugR7dd0/YjfTOu12nHa7X01klitXpcuOLtwpO2i/MPG4/Z29027HZXgOOSz5pOTk+Dtzc8bitDv8DgDZbrdfDeaw2wl3OKTdxZk/+3FbOvl8gRRmtLFplyCgbtYFlaYwNGc3kS4X0cb1Povqy5xROO124oy2ss6aQG47A9KRwLTLpAWpvcx6xEZWwGm3o4N/5J3r8fi9okzPtvS8PNKMsnM8Hry6TqXwCIZc3IxbLm1NtQpR5Hm9vLjmZ2Zt3QTA0IubBxjlJ7br4h8s9G7YBFE18CCvS6vVoFOd+oCcwT7V6aoCjgVPdOzORVWqUjemEm/07BPgpGHitNtpWDk2wGmhMJrFV+el7r3569Z7WTv6DkY3a+lvM7vNxv2Xd2Da1dcT7nCyNy2FgV/M4n/rV5XKA05xdqOESQnxWDpyk2CVU0EVVOj4KFeY/+W3joSt6h2zc8kOmA3JeJvNRsWwcBxBefhVWE6pwjJf9jyv11AzGcKM/A7anFn4dJ2TxvqVSON6E7PTT8mVnajDYhQ36wtSWGR5jJmL0+XPw2/Ed+f562qz4ff+shrZTxjnlZgCMfj/XE+go0Ck04XL4fCrwkxVlvkZHRaG0+7wt6cZLlV2+WkqhsvOO92yM4ApkCqGy9/L3EnANMQfycxAR9qP6sZU9guAwxnpeHxef3uPbnYZUa4wKrjCuO/y9gB8+fdfHM3MwG6zFVgzUq1CFFN7XM/1jQWPd+hGKP6vXRcaVKrCvW3a06JaQoH4SuERLB46huUjxpXIA60wHHZ7ocKnT+NE5g8cQZMqVfH4fLyybhWDv5zNzpNn/ggHRdmjhEkJsXbE/hF/CLWVmcb63STHYs/I72BlmkB7hdNfhtuiNjLjIxwO7FZ7hztQmEQaHXOEM380muv1+PX5Ycb1AC57vhrKtDlEBi2UNGcW5owhyuUKKWyy3W6LTcVVID7X4/F35hEOV8BoOsrvIJDfRtYy8gWjVMWZ92rmbc5OMg3VlGk4N73aTMO7eY+Z7jx0Xf5W0a6wgDU3cvbkKeAZF2sIkzyvl6SsTP+ZMDWiorHbbNSMjsFmk/G7Uk76XZFHN8s/I2VIYnMaVc5XKfWo36jAVjMA3eo15LWr+xTqlntx1Xh+GnGLXziFwmazFWnWUZY0javG14NHcculco+1P5KOcO1nH3PfD9+wZPeOQh1XFOceSpiUkBxLR2x2rtYXw7pwz/TQKmzmEuFwBYzmwVgPYvTWkU5XwFG1OUEzD3NEX8GiooJ8YWWO0p32/FX21nUaVu8wm83mt02YVHAGCRNX2Cm/m/eS6/UW6OSt+UkVUU6B+FDfI4PqYKrlcr1ecj2egLYCqzBxk5mXb+sww83PLMMuYwqbCi4XDrudCq4w/0wvPS/Xr+Jy2O3++oc7nUQZQsm0V0Q6nX7PrHCnk/hIufLcbIeGlasErEZ32u08cmVn/3eroDlfiHA6ebxDN2b1HULN6Irkej18+fdf3Prdl7SZ/gb3L13EqoP7lCvxOY4SJiXE2lHn2yLyZx7SE0v+X8UygjVnFdYZRqRlZpJtdIymQLDbbNJl17A5yHIMO0GQ4TrSkofH5/Xrp6369wiLJ5T/HhynFh4FOnLDhfiJ8ffyxPh7/bOINWvWIITgz40bsY5/bUF5WO0uXksbBNTB6Oy3/PYbN3TqwtbfAtdjhFucCUwBLG078pGOCjNnTzpHszL89266qVZwhWFDzq6yPG6/sDAXntptNv//6Xl5+SqusLCA0X3VINfhGtEVA+LjK0QFuMYmxgbaOwCurt+ISVd25uErOtGhVsGjkc8X2teqy+KhY3im89V0qFUXu81GhjuPL7ZvZcRXc+k5ZzozNv9eqBu94uxGrTMpIfmzCmdAB23uOWVdOR5tGbnneNxEh4Xnr0xHjrKdPtkJ6rpOjscdoOIyO6cIp4tcr5dswy03zy8sAmcmuq6TYoz4zTpa/88gjxyP27JgMdAYa1Vruez2AusErC7Eso6BwsZusxHudAasD7Huw2XW1TpTC56JWL2+5HdngXiQbW51PTbbyrSL5Hg8/njrwk3pkOAi2+PmZE52/izSsu6kYph03c3Iy/V7xVUM2uUgJjwChz0dr88nbS1B8Q67nVrRMexNSyHC6fS7LVux2Wzc3rJtgfDzkYph4dzYtAU3Nm3B8axMFu/ewfztW9hw5BB/G67GL6xZwSNXdmZk08vOdHUVxUDNTEqAruv+jjjCMjOBfB1/cEdqdoamkMhXkzmx22SHHWbZlyp4bYWZl3mttSM2w10Oh39kbnoYhQV3ykbaLMuaivCgWYG1zGB7iYk5anfYbX5bx+WXX86mTZu4/PLLA2Y3wWowGZYfb7c4B5hYvb6AAtuamOl1y9qPYKFmXZAIgYLCGm8KXofNFpCHf7sXXS+gJrPWvVZ0RaLDwqhViD0jJjycpnHVCsz4LnTiKkRxY9MWfD5gBAsHj2JoYnPCHU7S8/L4989LWX/44Cmvd3u9LNqpMeKruXSf9T4bjxz6h2quCIUSJiXA4/P5F8iFO5047fmdeL4KKnCxX6TLFCbB9o7QXlCh4/MN/cFbjPjTWFRdUHBEb85SrJ5owWlcFm+pwjrAuMgKhDscAdfa7XbCw+UeZJEhDO5WKgTNbEIZhq3CIDje5XAEuFSHqqu147fbbFRwhZGdnb+ALniWEB0WHlCOy+EIEC4VXK6Qq7krR0TSsHJsAaFsxX4GjN/nEs3iq/N8t178Ovp2Lomrhk/XuX/pooAdB0yOZWUydf1qOn7yLnd9/zWrDu5jV+pJRi+cd1oBpCg/lDApAQEqKqMzta4uN1VVYLFnOAM7+VDCwuxg0/PyLPaUgjMTXddJMTyHIoJtDUEdanC8Wc/jR5N4/dnnuK3/AFq2aMHVV1/N008/zeeff05iYiKp+w8QHRYWcJDWK6+8QvPmzUlNTcVus+GyeIFBvs1kzZo1/no8Mf5ebhoylO3btzNq1ChatGhBp06dmPHhdL+B27zvI0eOcNddd3HZZZfRrl073nn1VWIKEWa///Ybk++fwOhevRl5dS+euu8Bdm3fHpDm6X8/wU29r+Pw/gM8++DDtG7Viv/85z+APIvl/yZM4NZ+Axhx1dXcPnAwzz/+OOnp6QF5mC7CUFDFpSh7qkRE8upV1xLmcLA/PZWnVv4YEL98326umv0BL69bydHMDGzAVfUakhBVkQx3HqMXzmPNof3+9Lqus/7wQV5eu7LQnbkVZYOymZSAQBWV7BAjnS4y8vLI8XoCtvYw7Rlmp55n2DusLq8m/o0WDUFiM2wPJi57/t5Zph0gWLUTrJYKFiZOu520EyeYdNvtZGdnc+2A/rRMvJhDhw6xaNEi7rvvPp566ilWfL+ERx55xH+drut8/fXXdOnShUqVCj2kMqAeNaKiCXc4OJyayrhx47jmmmvo3bs33333HVOmTOH5unVo0qollcIjyMnJ4aabbuLw4cOMHj2a+Ph4FixYwJpf1xTIe9WqVdx2222Ipk0ZesvN+Hw+ln69kJtGjWLevHk0biy3F7HbbHg9Hp6e8CBXXHkF/a69lpiYGPLy8rjllltwOBwMGD6M8OhoTiQlsWXtOtLS0qhYMX8dRsWwcJIyM43/C6rrFGXPRbFxTLyyM0+t/Im52zZzVf1G9KzfmHd+X8fza37Gp+vEhIUz/JJLGdm0BXViKrMvLYXhC+ZwMCOdMd98zus9+3A4I4MZW35n24ljAMzfvoVvbhjt97ZTlC1KmBQTj8/L4awkUtw5VLSFk2TYuTO8uaS400j32tFt2aS407DbbKS6naR5pN49xS1HRrvSvSTnycONYj02cnXpbeTTdVLdJ/O3QHG6OJ4bqFbJ9mWQ5cmjojMGh81RQFgEC5cIR8Gf+JO33iEtNZX/vvs2bS5tQa2KUtd/3333YbPZuOqqq1i0aBEPP/ywXzWzceNGDh48yMSJE4vcVtWionE5HBw5coSXXnqJ66+/HoDBgwfTvXt3fvxmEf169sJms/HRrFns2bOH1157jauvltutDxkyxH9+u4nP5+PJJ5+kY8eOPDHlRf9xwgMHD+LWIcN4/fXXeeWVV/zpc3Ny6NO3Dw/d/4D/Xv766y8OHDjAZ599RrWGDUjKypTHAE+cVOAeKjhdVIuKLuCRpihfxjRvxdI9O1l5cB+Tln3PV7W28c1ODYBL46vz9jX9A46GrhtTmU/7DWPEV3PZn57KzYu+CMjPhtz5+P+WL+G1q69XKsdyQAmTYuDxebn/9yc5mnus6BftPU38vpLVpYqzCnfUvbuAS63TcCHO9XoNT7HAeJ/Px68//8zlHTvSoEmTAE8u8wXr168f33zzDWvXruWKK64A4OuvvyYmJoauXbsWu64VK1bkuuuu838PCwujefPm7N+/31/mihUrSEhIoEePHv50kZGRDBkyhBdffNEftm3bNvbu3cv48ePJTksjLUOqpapHRdO6dWvWrl1boPybbhwZ0HlER8t9tX766Sduu+givJEVqFzIaNVms/n34VL8c9htNqZ0702vOdNJzsn2C5KBF13Cs12u9s/4rdSJqcSc/kMZvmAue9NSCHc46dskkZFNW7D5WBKPrljCNzs1OtWuV+D0SkXpUcLkHMZhs/n3zLIS6ZIuxFY1nElycjJZmZnUbdgAKChsADp27EhcXBwLFy7kiiuuwO128+2339KrVy/CSqDqSUhIKDASrFSpEpqm+b8fPHiQunXrFkjXoEGDgO979uwB4MEHHwxZVvABZGFhYVSvXj0grE6dOowdO5Y33niD6dOn07ZtW7p168b111/vFzSKM09CdEWe6XI145csxG6z8X/tunDLpa1POauoGR3DgkE3surgPtrXqus/QuDS+BqsPLCXRbu28+TKH2ldo6Z/52VF2aCESTFw2h083/xx1iftBKBB5SoB3ky7U08GbDleI6oilSPyR7zHs7M4bjkutnJ4RIF9klJycjmSKVVg9SpVLqBayfZ42Jt6korOGKLCIkK+WJXCI0jJyfFvNngqQp397XA4uP766/niiy94/PHHWblyJSkpKfTt2/e0+YUi1AmTJcVcJT1p0iQaN27MgQzZVrUrViogOAHCC2mDiRMnMnDgQJYuXcovv/zCf/7zH9566y3mzJlTQPgozhx9GidSvUI0MeHhJAZtcFkYlSMiudbYddnEZrPxXNee/HHsCAfT0xi/ZCGfDRjO0cwMdqWc9Bvnq1eIplpUFNWjoqldsVLIDTEVoVHCpJh4fDqVXVWw2aBWheoBHVhOnjNgsWDtqNiANRYRthw87hT/95oVKhIXkb+1BkBll4dctwO7zU6dCnEFOmKf7iMtS25FEhlCEIAUJk3jqhVYKAgQGxtLVFQUR/fuo3pUdKEvS79+/Zg+fTorVqxg0aJF1KxZk8svv7zQdikttWrVYufOnf4Ds0x2794dkK5OnToAxMTE0LFjR//6j1CC5HRcdNFFXHTRRdx555388ccfDBkyhNmzZ3PfffeV/EYUZU7bmrXLJJ9K4RFM7XE9Q76czbbk4zR/f9op08dXiOKda/rTsnrBjTMVBVGuwcUk17IFSXAHZjV22yho/A7W8wYbz0F6iDWuXJXGlWNDjujttvw1HKEWA5qEEiQgZwlXXXUVK5cv58TeQIONdW+kSy65hIsuuoi5c+fy448/ct1115Wr0bJz584cPnyYH374wR+WnZ3N3LlzA9I1bdqUOnXq8MEHH5CdnY3dZgv4HZKTT78jbUZGBp6gfdKaNGmC0+kkN7fgUb2K84fWNWryQNuOAWHhDieJsXFcElfNfzwByPUsN341l1UHS2jYvMBQM5NiklPIYkAIFA5hTmcBYWAuBjTXkIQSJlD4qnOTujGVyfa4/TvbFpcHHniAlStXcuONNzJs2DAaNGjA4cOHWbRoEYsXL/an69u3L1OmTPH/X54MGTKETz75hAcffJDRo0cTFxfHggULiIgINIw7HA4mT57MbbfdRp8+fejfvz/VqlXjyJEjrFy5krp16wYY7EPx66+/8tRTT9GrVy8aNGiAz+fjq6++wmaz0atXr/K8TcVZwF0t23JJ1XjsNhsNK8dSq2JMwIAkz+tle/Jxbv/uS7+r8Rs9+9KjfiNArrxfc/gA2onjDE5sqlyNDZQwKSah1oeYhFqtbsVmsxHhdJKRl2ecyVEyfWyYZeuVkpCQkMDcuXN59dVX+eKLL8jMzCQhIaGAp1bfvn15+eWX/eqg8iQyMpLp06czefJkZsyYQUREBH369KFz586MGzcuIG27du349NNPef3115kxYwZZWVlUq1aNli1bMmzYsNOWJYSgY8eOLFu2jDlz5hAZGYkQgnfffZfLLrusnO5QcbZgs9noVq9hofFhDgfN4qvz2YDhjPzqM3alnuSOxQu4//IO7Ek9yZLdO/yLhudu+5OZfW4I2An6QsV2gW77nAIUuvJu717pz1uvXr2AcF3X2XI8CZ+uUy+mMpWCRs26rrP1eBJeXadGdEWqhXjAjmSmk5SZSUx4OPUrVSn9nZQjJ06coFOnTkyYMIFbbrnlTFfnnKew50px9nI8K5NRC+fx14mCywHsNhs+Xadh5Vhm9bkhwJnmWFYm3+zUuDyhNk3jqpWobF3XOZaVSbWzzzU9FagcHKhsJsXA7fNajrkNPfOIqxBFhNNJ5UK8iOIio6gRXZGEqLI77a68+PzzzwH8iw0ViguNuApRfNpvKG0TamMD2ibU5okO3Vk96nbe692fMIeDXSnJDFnwKfvTUknKzGDyyp/o9Mm7PPnLj4z6+jP/0dFWdF3n+V9XMH7JQv+hala8Ph93L1lI24/f4slffjwnznpRaq5iYLfZsdts/oWBoageFU31U4wknHZ7yBnL2cTq1avZsWMHb7/9Ntdcc41ylVVc0FQKj+DTfkPJ8bgDnF4Soivy4bUDGfftF+xLS6X/5zNJd+f5j4YASM7JZu62P7mpeauAPFcd3Mebv8kFtgfT05jRZ3DAxqPPrF7uX6g5/c+NxISFFXAc2J+WyrQNqzmWlYnNZsOO3Ez04qrx3NKi9T9uyzmtmksIcTkwBugG1ANOAKuAxzRN2xGUtj3wAtAKSAPmAJM0TcsKShcOPAWMAqoAfwCPapq2NET5RcqzmKRQAjUXyFXwNmyFekudD4waNYrffvuNVq1aMWXKFKpVK9k0XRGIUnOdn6w9dICbF833H0FdNSKSWy+7nO3Jx5m/fSu1K8awbMQ4/07cuq5zw5efsv5I/g7HHWrV5f1rBxLhdDL9z408+Yvc4LJuTCX2paUC8Fj7roxr0QaAr/7exqMrvvcf6hZM5fAI7mnTjpFNLyuPtTIh1VxFESbzgA7AZ8AmoAZwNxAFtNU07S8j3WXAamAL8B5QG3gQWKJpWp+gPGcDg4BXgR1IYdUG6KJp2mpLuiLnWUxSKKEwUShKinquzl82JR1h2oZfaZtQixubtqCCK4zdKSfpPvt9dOB/V11Hv4suBmDF/j2MXjgPgOGXXMrsrZsA6FG/EYNFU+76/mt8uk6vBk2YevV1/Ov7r/lhj1wo/VSnq/gj6Qifa1sAeRRE/4suxobNOKHVw4K/t5JpqNbqxVTm8Q7d/J5oZUSJhUl7YL2maXmWsCbAn8CnmqaNMcIWAZcCiZqmZRhh44B3gas0TfvRCGsLrAHu1zTtVSMsAtgMHNI0rbOlnCLlWQJSUMJE8Q+jnqsLj7sWf8WiXdu5uGo8i24YDcDAL2bx29HDXFmzDp/2G8p7f6zn6VXLAq5rUa0Gn/YdSqRLnkg65pvP+dWytT5At7oNeLHbNcQFqc2PZWXyv/WrmL11E15dx2GzsXjoGBpXqVpWt1UyA7ymaausgsQI+xs5W7gYQAgRA1wNfGx2+gYfAxnAEEvYYMCNnGmY+eUA7wMdhRAJJchToVAozjpubyl3jfjrxDFW7N/Dsn27+e3oYQDuv7w9AONatOHeNu3819SpWIn3eg/wrzeLcDp5r/cALo2Xtsswu4MnOnTng2sHFhAkIFfuP935ahYPHUPViEi8ul5AEJUHJTLACyFsQHWkrQOguZHXems6TdPyhBC/Ay0twS2BbUECAmAtcuH4ZcDhYuapUCgUZx0tqiXQrmYdVh/az5u/rfWfkNqhVl2uqFnHn+6+Nu2JdLpYeXAfT3ToVmDdSnRYGDP63MDn2hY61q7HRUXYpLJxlaq0rF6TH/buZMvxpLK9sRCU1Ip8I1ALMPe6MDevORwi7WGgpuV7winSYUlbnDwVCoXirOSOlm0B+PXQfv5IOgLA/Zd3CEhjs9m4o2VbZlw/uFB1VKXwCG6+tHWRBIlJ03jpPLPl2NGSVL1YFFuYCCESgdeBX4AZRrB5tmuojY1yLPFm2sLSWfMqTp4KhUJxVtK5Tn0usSxc7FSnPm0Sav0jZTeNk6qxbSeO47a4LJcHxRImQogawDfASeAGTdN8RlS28RlqpV6EJd5MW1g6a17FyVOhUCjOSmw2G7dflr/j9v1t2v9jZTczZiZ5Pi87Uk6/CWppKLLNRAhRCfgW6QXVQdO0I5ZoUxUVaq/mBOBQUNrC0mFJW5w8FQqF4qzl+kaCvakpVImIpFWNf05DnxBVkdiISJJzstl87CgXF/FMmJJQpJmJ4br7NXARcL1mPSJPshnwINeKWK8LQxrUf7cE/w4kCiGCl4lfYXyaRv3i5KkoA6ZNm4YQ+YcKCSGYNu3UZz6UlPnz5yOE4MCBA+WSv0JxNuGw27mnTTtGNbvsHy3XZrP59wbbcrx87SanFSZCCAdy1Xk7pGrr1+A0mqalAj8Ao4KExCggGrng0WQe4AL8W8EaK+LHAis1TTtUgjwVCoVCEYKmhkvxlmPl69FVFDXXS0Bf5MwkVggx0hKXoWnal8b/jyK3WVkmhDBXq08AvtU0zX/ikaZpa4QQnwEvGGtKdgI3IbdqGRNUdpHyVJQPmzZtwqGOLVUozmnMmcnWE3LH85KcSloUiqLmusz47IP03rL+vWom0jRtI9AD6X31CnArcqX6DSHyHA38z/icipypXKtp2kpromLmqShjwsPDcRZygJdCoTg3aGZ4dGW63f6z7suD0/YUmqZ1LWpmmqb9gtzH63TpcoCHjL8yyVNRPNavX89zzz3H9u3bqV69eoEDqEDaTO6++27Gjx8PyONu//e//7F06VKSkpKoWLEiiYmJPPjggzRt2hSA7t27k5iYyNChQ3nppZfYvXs39evX58EHH6RLly7/6D0qFAqoV6ky0a4wMtx5bD6WRMPKseVSzvm79a2iUDRN45ZbbuHkyZOMHz+egQMHMm3aNJYsWXLK65544gnmz59Pnz59ePLJJxk7dixhYWHs2BGweTS7du3ioYceolu3bjzwwAN4vV7uuusuNm7cWJ63pVAoQmC32fzrXMrTCK90GMXE7fOSlJ12pqtBtcgYXCU89nfq1KnYbDZmz57tP6ukV69e9Olz6o2Yly9fzp133hlyFmNl9+7dvPnmm3Tv3h2AgQMH0rNnT1555RVmzJhxymsVCkXZ0zSuGmsPHyjXbVWUMCkGbp+X65e+xv7M8tM7FpU6UVVYeNXdxRYoXq+XX375hZ49ewYcetWoUSM6duzI8uXLC702JiaGtWvXMmjQIKpUKfzI4Zo1a/oFCUClSpW4/vrrmTVrFllZWVSoUKFYdVYoFKXDNMJvPnYUXdexlYMRXqm5LjCSk5PJyckJuQ16gwYNTnntgw8+yK+//krHjh0ZNmwYb775JgcPHiyQrm7dugXC6tWrh8/n4/DhUFutKRSK8qSZ4R6ckpvDwYzy0ayomUkxcNkdLLzq7nNezVVSrr32Wtq0acMPP/zAypUreeedd3j77beZNm0anTp1+kfrolAoik7jKlUJdzjJ9XrYcjyJ2hULPc6pxChhUkxcdge1ogpX8ZztxMbGEhER4T+oycru3btPe321atUYMWIEI0aMIDk5mYEDB/Lmm28GCJN9+/YVuG7v3r3Y7XYSEkLtjqNQKMoTp91OYtU4/kg6wpZjR+nVoEmZl6HUXBcYDoeDjh07smTJEo4ezffs2LlzJ7/88kuh13m9XtLT0wPCYmNjqVGjBrm5gRs7Hzp0iB9/zD8EMzU1lYULF9KmTRtlL1EozhDmDsLlZYRXM5MLkPHjx/Pzzz8zfPhwhg0bhtfrZebMmTRu3JiC265JMjMz6dKlCz179iQxMZGoqCh+/fVXfvvtNyZOnBiQtkGDBkycOJHhw4dTpUoV5s6dS0ZGBvfee+8/cXsKhSIEfiO8EiaKsiIxMZH333+f5557jqlTp1KjRg3Gjx/PsWPHChUmERERDB8+nJUrV7JkyRJ0Xadu3bo88cQTjBgxIiBtw4YNmTRpElOmTGHPnj3Uq1eP1157jTZt2oTMW6FQlD/mdvRHMzM4lpVZ4DTH0mLTdb1MMzxHSEFupR8S054QyuNJcWrMFfBvvPHGma7KWYd6rhRnkhyPh6bv/Q+vrjP9ukF0rXtq781TkApUDg5UNhOFQqG4AIhwOsv1hEel5lIoFIoLhNev7sPOlGTaJtQu87yVMFEoFIoLhLgKUcSVsa3ERAkTRZlidQlWKBQXDspmolAoFIpSo4SJQqFQKEqNEiYKhUKhKDVKmCgUCoWi1ChholAoFIpSo4SJQqFQKEqNEiYKhUKhKDVKmFyA/PHHHwwZMoQWLVoghODAgQNlXoYQgmnTppV5vgqF4uxELVq8wHC73dx7771ER0fz6KOPEh4eTmxs7D9W/t69e3nvvfdYuXIlSUlJhIeHk5iYyHXXXcfgwYMJCwsr0/J27tzJokWLGDBgALVrF9xCYufOnTz77LNs3LgRl8tFt27deOSRRwq0SVJSElOnTmXVqlWcOHGC6tWr07NnT2677TZiYmLKtM4KxbmIEiYXGPv27ePw4cP897//ZcCAAf9o2T/++CP33XcfkZGR9OvXjyZNmpCTk8O6det4+umnOXDgAA8//HCZlrl7925ee+012rZtW0CYHDlyhBtvvJGYmBjuv/9+srKy+OCDD9i+fTtz587F5XIBkJWVxbBhw8jKyuLGG2+kRo0abN26lQ8//JCNGzcya9asMq2zQnEuooTJBUZycjIAFStW/EfL3bdvHxMmTKBOnTp8/PHHVK1a1R83atQoduzYwbp16/7ROr311lvk5uYyY8YMqleXp9BdeumljB07lgULFjB48GAAli1bxsGDB3n77bfp2rWr//qIiAg++OAD9u/fT506df7RuisUZxtKmFxATJw4kS+++AKAf/3rXwC0bdvWHz9jxowC6deuXRuw35bP5+PDDz9k3rx57N+/n8qVK9OrVy8eeOABoqIK30DuvffeIysri2eeeSZAkJg0btyYxo0b+797PB7eeustvvjiC44ePUqNGjUYMGAAd9xxBw6Hw59u5cqVvPbaa/z99994vV6qVavmr8/8+fOZNGkSAKNHj/Zf8/HHH3PFFVfw/fff0717d78gAWjfvj3169fn22+/9QuTjIwMgAL1jouLA6RQUSgudJQwuYAYOnQo1atX56233uKmm26iadOmxMXF8dZbbxU5j0cffZSvv/6aQYMGcdNNN7F3715mzpzJjh07mD59OjabLeR1P/30E3Xr1uWyyy4rUjmPPfYYX3zxBddddx2tW7dm/fr1TJ06lcOHD/P0008D8Pfff3P77bfTqlUr7r//fux2O3v37mXDhg0AXH755dx000189NFH3HHHHTRs2BCARo0acfToUU6cOEGzZs0KlH3ppZeycuVK//fWrVtjt9t55plnmDhxYoCaa+DAgcTHxxe5/RSK8xUlTIqJ2+vlSGbGma4GNaKicVlG6EWhZcuW5OXl8dZbb9G2bVt69OgBUGRhsn79eubPn8/UqVPp1auXP7x58+bcf//9/Pzzz3Tu3LnAdRkZGSQlJXHVVVcVqZxt27bxxRdfMGzYMP7zn/8AcOONN1KxYkXmzJnDyJEjSUxMZOXKlYSHh/Phhx8GzFZM6tSpQ9u2bfnoo49o3749V1xxhT/uzz//BAgpCOLj4zlx4gRerxeHw0GjRo146qmneOGFFxg6dKg/3dChQ3nyySeLdE8KxfmOEibFwO310uPTD9mblnKmq0K9mMr8MGxssQVKafjuu++oXLkyl19+ud/2AtCmTRscDgdr164tVJgAp1SDWVm+fDkAY8eODQgfM2YMc+bMYcWKFSQmJhITE0N2djY///xzgC2jKOTm5gKE9B4LDw8HICcnx1/nGjVq0KJFCzp37kzNmjVZv349M2bMoFKlSkyYMKFYZSsU5yNKmCiKzN69e0lJSaFdu3Yh460Cxkp0dDQAmZmZRSrn4MGDOJ1O6tatGxBer149nE4nBw8eBODaa6/ls88+4/bbbyc+Pp727dtz9dVX06NHj0LVbSamwMjLyysQZwoa0xayYcMG7rjjDubNm8fFF18MQI8ePYiOjua1115jwIABfhWaQnGhooRJMXA5HPwwbOw5q+YqLl6vN+C7z+cjPj6eF154IWT6atWqhQyPjo4mPj6ev//+u0zrFxERwSeffMKaNWtYvnw5P//8MwsWLKBDhw68++67IVVfwXU9duxYgbhjx45RtWpV//Vz5syhWrVqfkFi0r17d6ZNm8bvv/+uhInigkcJk2LicjioE1PpTFejTKlUqRL79+8vEH7o0KGA73Xr1mXNmjW0adOm2IsLu3Xrxty5c/njjz9o0aLFKdPWqlULj8fDvn37qF+/vj983759eDweatWq5Q+z2+20a9eOdu3aMXHiRN59912mTJnC2rVrC51BAVSvXp3Y2Fg2b95cIG7Tpk0BgsO0nwTj8XiAgkJXobgQUdupKKhTpw67du0KUFNt27aNjRs3BqTr1asXbrebd955p0AeeXl5fttIKMaNG0dkZCSPPfZYSHXYzp07+fTTTwHo0qULAB999FFAmo8//jgg/uTJkwXyMYWAqaqqUKECAOnp6QXS9uzZkx9//JGjR4/6w1avXs2ePXu45ppr/GH169fn6NGjrF+/PuD6hQsXBpSpUFzIqJmJgsGDBzN9+nRuueUWBg8ezIkTJ/j0009p3LhxgJ3jyiuv5IYbbmDatGls3ryZdu3aYbfb2bNnD99++y1Tpkyhffv2IcuoV68eU6ZM4f7776d3797079+fxo0bk5uby4YNG/j+++8ZM2YMAImJiQwYMIBZs2aRlpZGq1at2LhxIwsXLmTw4MEIIQB44403WL9+PZ07d6Z27dokJycza9YsatSoQevWrf15OZ1O3n33XdLT0wkLC+PKK6+katWq3HHH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eeWVV5gxYwYAH374IQcPHmTBggXUqVMHgGHDhhETE8M777zDqFGjqFSpEl999RVr165l9uzZtGjRwl9G7dq1eemllxg3bhyNGjVi6dKlrFu3jkmTJjFmzBgAhg8fzujRowPqlpaWxm+//carr75K7969/eF33nlnidpDoVCUHiVMioHH42Xw49M5cCz1TFeF2vGVmDd5TIkESkxMDGvXrmXQoEFUqVIlZJqaNWv6BQlApUqVuP7665k1axZZWVlUqFCBxYsX07ZtW6KiokhOTvan7dixI59++il//PEHnTt3ZvHixTRp0sQ/CzJp164dAGvXrqVRo0asWLECl8vF0KFD/WkcDgcjR45k/fr1/rCIiAhcLhc///wzXbp0oUKFCsVuA4VCUbYoYXIB8uCDDzJx4kQ6duxI8+bN6dKlC3379qVWrVr+NHXr1i1wXb169fD5fBw+fJhGjRqxd+9eNE3zC4VgTMGxd+9edu7cedp0Bw8epHr16kRGRgbEN2jQIOB7WFgYDz74IM8//zwLFy6kZcuWdOvWjb59+xIbG1v0hlAoFGWGEibFwOl0MG/ymHNezXXttdfSpk0bfvjhB1auXMk777zD22+/zbRp0+jUqVOR8/H5fHTq1Imbb745ZHzjxo396S655BIeeuihkOlMFVlxGDNmDFdddRU//PADv/zyC1OmTOHNN9/ko48+IjExsdj5KRSK0qGESTFxOh3UjKt0pqtRaqpVq8aIESMYMWIEycnJDBw4kDfffNMvTPbt21fgmr1792K320lISADk7CU3N5f27dufsqy6deuyY8eO06arVasWa9asITs7O2B2snv37pDp69Spw9ixYxk7diz79++nb9++vP/++7z44ounLEehUJQ9yjX4AsPr9RZwtY2NjaVGjRrk5ub6ww4dOsSPP/7o/56amsrChQtp06aN30bRq1cv1q1bx5o1awqUk5ycjK7r/nQHDx7kiy++KJAuMzPTX27nzp1xu93MmTMnoL4zZ84MuCY7O5ucnJyAsFq1alGxYsWAe1AoFP8camZygZGZmUmXLl3o2bMniYmJREVF8euvv/Lbb78xceJEf7oGDRowceJEhg8fTpUqVZg7dy4ZGRnce++9/jTjxo1j6dKl3HLLLQwaNIiLL76YjIwMtm3bxvfff8/GjRtxOp3079+fRYsWMWnSJFauXEnL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\n",
"text/plain": [
"<Figure size 432x216 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# back to simpler example, adding plots\n",
"(autos2\n",
" .assign(country=autos2.make.apply(country))\n",
" .groupby(['year', 'country'])\n",
" .mean()\n",
" .plot()\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 71,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead tr th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe thead tr:last-of-type th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr>\n",
" <th></th>\n",
" <th colspan=\"2\" halign=\"left\">city08</th>\n",
" <th colspan=\"2\" halign=\"left\">comb08</th>\n",
" <th colspan=\"2\" halign=\"left\">highway08</th>\n",
" <th colspan=\"2\" halign=\"left\">cylinders</th>\n",
" <th colspan=\"2\" halign=\"left\">displ</th>\n",
" <th colspan=\"2\" halign=\"left\">fuelCost08</th>\n",
" <th colspan=\"2\" halign=\"left\">range</th>\n",
" <th colspan=\"2\" halign=\"left\">speeds</th>\n",
" </tr>\n",
" <tr>\n",
" <th>country</th>\n",
" <th>Other</th>\n",
" <th>US</th>\n",
" <th>Other</th>\n",
" <th>US</th>\n",
" <th>Other</th>\n",
" <th>US</th>\n",
" <th>Other</th>\n",
" <th>US</th>\n",
" <th>Other</th>\n",
" <th>US</th>\n",
" <th>Other</th>\n",
" <th>US</th>\n",
" <th>Other</th>\n",
" <th>US</th>\n",
" <th>Other</th>\n",
" <th>US</th>\n",
" </tr>\n",
" <tr>\n",
" <th>year</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>1984</th>\n",
" <td>19.384615</td>\n",
" <td>16.079232</td>\n",
" <td>21.417330</td>\n",
" <td>17.797119</td>\n",
" <td>24.847038</td>\n",
" <td>20.669868</td>\n",
" <td>4.908046</td>\n",
" <td>6.033613</td>\n",
" <td>2.691406</td>\n",
" <td>3.808594</td>\n",
" <td>2118.125553</td>\n",
" <td>2578.871549</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>3.969054</td>\n",
" <td>3.872749</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1985</th>\n",
" <td>19.284768</td>\n",
" <td>16.275472</td>\n",
" <td>21.373068</td>\n",
" <td>18.025157</td>\n",
" <td>24.816777</td>\n",
" <td>21.020126</td>\n",
" <td>4.871965</td>\n",
" <td>5.949686</td>\n",
" <td>2.636719</td>\n",
" <td>3.765625</td>\n",
" <td>2141.997792</td>\n",
" <td>2553.899371</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>3.958057</td>\n",
" <td>3.886792</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1986</th>\n",
" <td>19.167183</td>\n",
" <td>15.945035</td>\n",
" <td>21.213622</td>\n",
" <td>17.645390</td>\n",
" <td>24.650155</td>\n",
" <td>20.464539</td>\n",
" <td>4.804954</td>\n",
" <td>6.136525</td>\n",
" <td>2.537109</td>\n",
" <td>3.925781</td>\n",
" <td>2149.148607</td>\n",
" <td>2588.741135</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>4.069659</td>\n",
" <td>3.886525</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1987</th>\n",
" <td>18.633381</td>\n",
" <td>15.611722</td>\n",
" <td>20.710414</td>\n",
" <td>17.326007</td>\n",
" <td>24.186876</td>\n",
" <td>20.208791</td>\n",
" <td>4.825963</td>\n",
" <td>6.164835</td>\n",
" <td>2.583984</td>\n",
" <td>3.931641</td>\n",
" <td>2227.318117</td>\n",
" <td>2630.036630</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>4.142653</td>\n",
" <td>3.902930</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1988</th>\n",
" <td>18.668224</td>\n",
" <td>15.577869</td>\n",
" <td>20.814642</td>\n",
" <td>17.372951</td>\n",
" <td>24.437695</td>\n",
" <td>20.420082</td>\n",
" <td>4.819315</td>\n",
" <td>6.307377</td>\n",
" <td>2.531250</td>\n",
" <td>4.066406</td>\n",
" <td>2207.476636</td>\n",
" <td>2623.258197</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>4.205607</td>\n",
" <td>4.028689</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1989</th>\n",
" <td>18.533040</td>\n",
" <td>15.139831</td>\n",
" <td>20.662261</td>\n",
" <td>16.908898</td>\n",
" <td>24.252570</td>\n",
" <td>19.887712</td>\n",
" <td>4.879589</td>\n",
" <td>6.366525</td>\n",
" <td>2.542969</td>\n",
" <td>4.171875</td>\n",
" <td>2250.000000</td>\n",
" <td>2698.093220</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>4.264317</td>\n",
" <td>4.025424</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1990</th>\n",
" <td>18.510109</td>\n",
" <td>14.850575</td>\n",
" <td>20.640747</td>\n",
" <td>16.577011</td>\n",
" <td>24.267496</td>\n",
" <td>19.485057</td>\n",
" <td>4.839813</td>\n",
" <td>6.466667</td>\n",
" <td>2.507812</td>\n",
" <td>4.265625</td>\n",
" <td>2238.258165</td>\n",
" <td>2728.735632</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>4.328149</td>\n",
" <td>4.105747</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1991</th>\n",
" <td>18.087943</td>\n",
" <td>14.803279</td>\n",
" <td>20.174468</td>\n",
" <td>16.599532</td>\n",
" <td>23.809929</td>\n",
" <td>19.683841</td>\n",
" <td>5.029787</td>\n",
" <td>6.538642</td>\n",
" <td>2.609375</td>\n",
" <td>4.351562</td>\n",
" <td>2348.581560</td>\n",
" <td>2725.761124</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>4.341844</td>\n",
" <td>4.234192</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1992</th>\n",
" <td>17.915374</td>\n",
" <td>14.895631</td>\n",
" <td>20.098731</td>\n",
" <td>16.735437</td>\n",
" <td>23.820874</td>\n",
" <td>20.063107</td>\n",
" <td>5.145275</td>\n",
" <td>6.446602</td>\n",
" <td>2.708984</td>\n",
" <td>4.250000</td>\n",
" <td>2373.272214</td>\n",
" <td>2703.762136</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>4.356841</td>\n",
" <td>4.252427</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1993</th>\n",
" <td>18.084866</td>\n",
" <td>15.007772</td>\n",
" <td>20.309760</td>\n",
" <td>16.896373</td>\n",
" <td>24.172560</td>\n",
" <td>20.230570</td>\n",
" <td>5.114569</td>\n",
" <td>6.497409</td>\n",
" <td>2.683594</td>\n",
" <td>4.281250</td>\n",
" <td>2333.097595</td>\n",
" <td>2677.202073</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>4.371994</td>\n",
" <td>4.279793</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1994</th>\n",
" <td>18.046474</td>\n",
" <td>14.952514</td>\n",
" <td>20.264423</td>\n",
" <td>16.829609</td>\n",
" <td>24.173077</td>\n",
" <td>20.201117</td>\n",
" <td>5.185897</td>\n",
" <td>6.608939</td>\n",
" <td>2.712891</td>\n",
" <td>4.414062</td>\n",
" <td>2326.041667</td>\n",
" <td>2697.625698</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>4.355769</td>\n",
" <td>4.293296</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1995</th>\n",
" <td>17.678914</td>\n",
" <td>14.533724</td>\n",
" <td>20.091054</td>\n",
" <td>16.422287</td>\n",
" <td>24.263578</td>\n",
" <td>19.747801</td>\n",
" <td>5.444089</td>\n",
" <td>6.715543</td>\n",
" <td>2.908203</td>\n",
" <td>4.507812</td>\n",
" <td>2355.191693</td>\n",
" <td>2759.677419</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>4.380192</td>\n",
" <td>4.313783</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1996</th>\n",
" <td>18.480545</td>\n",
" <td>14.926641</td>\n",
" <td>20.906615</td>\n",
" <td>16.961390</td>\n",
" <td>25.093385</td>\n",
" <td>20.544402</td>\n",
" <td>5.147860</td>\n",
" <td>6.579151</td>\n",
" <td>2.708984</td>\n",
" <td>4.277344</td>\n",
" <td>2250.291829</td>\n",
" <td>2622.586873</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>4.416342</td>\n",
" <td>4.262548</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1997</th>\n",
" <td>18.090909</td>\n",
" <td>14.978632</td>\n",
" <td>20.509470</td>\n",
" <td>16.991453</td>\n",
" <td>24.678030</td>\n",
" <td>20.683761</td>\n",
" <td>5.261364</td>\n",
" <td>6.581197</td>\n",
" <td>2.787109</td>\n",
" <td>4.218750</td>\n",
" <td>2319.128788</td>\n",
" <td>2600.427350</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>4.452652</td>\n",
" <td>4.290598</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1998</th>\n",
" <td>17.925267</td>\n",
" <td>15.288000</td>\n",
" <td>20.457295</td>\n",
" <td>17.408000</td>\n",
" <td>24.704626</td>\n",
" <td>20.944000</td>\n",
" <td>5.275801</td>\n",
" <td>6.436000</td>\n",
" <td>2.800781</td>\n",
" <td>4.105469</td>\n",
" <td>2295.373665</td>\n",
" <td>2578.800000</td>\n",
" <td>0.144128</td>\n",
" <td>0.420000</td>\n",
" <td>4.485765</td>\n",
" <td>4.272000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1999</th>\n",
" <td>17.925125</td>\n",
" <td>15.709163</td>\n",
" <td>20.386023</td>\n",
" <td>17.756972</td>\n",
" <td>24.577371</td>\n",
" <td>21.099602</td>\n",
" <td>5.377704</td>\n",
" <td>6.362550</td>\n",
" <td>2.832031</td>\n",
" <td>4.042969</td>\n",
" <td>2312.728785</td>\n",
" <td>2582.470120</td>\n",
" <td>0.251248</td>\n",
" <td>1.334661</td>\n",
" <td>4.507488</td>\n",
" <td>4.215139</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2000</th>\n",
" <td>17.881849</td>\n",
" <td>15.714844</td>\n",
" <td>20.301370</td>\n",
" <td>17.757812</td>\n",
" <td>24.416096</td>\n",
" <td>21.128906</td>\n",
" <td>5.441781</td>\n",
" <td>6.332031</td>\n",
" <td>2.859375</td>\n",
" <td>3.978516</td>\n",
" <td>2385.958904</td>\n",
" <td>2529.492188</td>\n",
" <td>0.304795</td>\n",
" <td>0.449219</td>\n",
" <td>4.619863</td>\n",
" <td>4.253906</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2001</th>\n",
" <td>17.941267</td>\n",
" <td>15.643939</td>\n",
" <td>20.289026</td>\n",
" <td>17.496212</td>\n",
" <td>24.372488</td>\n",
" <td>20.768939</td>\n",
" <td>5.479134</td>\n",
" <td>6.310606</td>\n",
" <td>2.873047</td>\n",
" <td>3.976562</td>\n",
" <td>2399.536321</td>\n",
" <td>2568.371212</td>\n",
" <td>0.187017</td>\n",
" <td>0.443182</td>\n",
" <td>4.761978</td>\n",
" <td>4.412879</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2002</th>\n",
" <td>17.644412</td>\n",
" <td>15.083916</td>\n",
" <td>20.076923</td>\n",
" <td>16.979021</td>\n",
" <td>24.207547</td>\n",
" <td>20.195804</td>\n",
" <td>5.576197</td>\n",
" <td>6.433566</td>\n",
" <td>2.935547</td>\n",
" <td>4.058594</td>\n",
" <td>2425.689405</td>\n",
" <td>2610.139860</td>\n",
" <td>0.137881</td>\n",
" <td>0.132867</td>\n",
" <td>4.920174</td>\n",
" <td>4.367133</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2003</th>\n",
" <td>17.565101</td>\n",
" <td>14.826087</td>\n",
" <td>19.953020</td>\n",
" <td>16.628763</td>\n",
" <td>24.052349</td>\n",
" <td>19.806020</td>\n",
" <td>5.683221</td>\n",
" <td>6.588629</td>\n",
" <td>3.031250</td>\n",
" <td>4.171875</td>\n",
" <td>2480.604027</td>\n",
" <td>2637.625418</td>\n",
" <td>0.127517</td>\n",
" <td>0.000000</td>\n",
" <td>5.154362</td>\n",
" <td>4.307692</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2004</th>\n",
" <td>17.426290</td>\n",
" <td>14.928571</td>\n",
" <td>19.923833</td>\n",
" <td>16.805195</td>\n",
" <td>24.160934</td>\n",
" <td>20.165584</td>\n",
" <td>5.729730</td>\n",
" <td>6.558442</td>\n",
" <td>3.087891</td>\n",
" <td>4.199219</td>\n",
" <td>2476.719902</td>\n",
" <td>2607.305195</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>5.229730</td>\n",
" <td>4.308442</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2005</th>\n",
" <td>17.412170</td>\n",
" <td>15.196610</td>\n",
" <td>19.892078</td>\n",
" <td>17.132203</td>\n",
" <td>24.189437</td>\n",
" <td>20.664407</td>\n",
" <td>5.773823</td>\n",
" <td>6.447458</td>\n",
" <td>3.152344</td>\n",
" <td>4.132812</td>\n",
" <td>2493.455798</td>\n",
" <td>2592.881356</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>5.362801</td>\n",
" <td>4.688136</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2006</th>\n",
" <td>17.062575</td>\n",
" <td>15.300366</td>\n",
" <td>19.509025</td>\n",
" <td>17.285714</td>\n",
" <td>23.762936</td>\n",
" <td>20.875458</td>\n",
" <td>5.977136</td>\n",
" <td>6.476190</td>\n",
" <td>3.345703</td>\n",
" <td>4.171875</td>\n",
" <td>2527.496992</td>\n",
" <td>2574.725275</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>5.492178</td>\n",
" <td>4.776557</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2007</th>\n",
" <td>16.996403</td>\n",
" <td>15.489726</td>\n",
" <td>19.452038</td>\n",
" <td>17.626712</td>\n",
" <td>23.742206</td>\n",
" <td>21.202055</td>\n",
" <td>6.044365</td>\n",
" <td>6.513699</td>\n",
" <td>3.423828</td>\n",
" <td>4.210938</td>\n",
" <td>2544.664269</td>\n",
" <td>2510.958904</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>5.864508</td>\n",
" <td>4.883562</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2008</th>\n",
" <td>17.239869</td>\n",
" <td>15.770073</td>\n",
" <td>19.677985</td>\n",
" <td>17.937956</td>\n",
" <td>23.983571</td>\n",
" <td>21.697080</td>\n",
" <td>6.095290</td>\n",
" <td>6.518248</td>\n",
" <td>3.462891</td>\n",
" <td>4.222656</td>\n",
" <td>2551.369113</td>\n",
" <td>2486.678832</td>\n",
" <td>0.109529</td>\n",
" <td>0.000000</td>\n",
" <td>5.969332</td>\n",
" <td>5.120438</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2009</th>\n",
" <td>17.696803</td>\n",
" <td>16.148014</td>\n",
" <td>20.186329</td>\n",
" <td>18.259928</td>\n",
" <td>24.590959</td>\n",
" <td>22.140794</td>\n",
" <td>5.970232</td>\n",
" <td>6.620939</td>\n",
" <td>3.402344</td>\n",
" <td>4.351562</td>\n",
" <td>2433.076075</td>\n",
" <td>2407.220217</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>6.189636</td>\n",
" <td>5.563177</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2010</th>\n",
" <td>18.325342</td>\n",
" <td>17.278970</td>\n",
" <td>20.851598</td>\n",
" <td>19.600858</td>\n",
" <td>25.256849</td>\n",
" <td>23.785408</td>\n",
" <td>5.897260</td>\n",
" <td>6.223176</td>\n",
" <td>3.357422</td>\n",
" <td>4.050781</td>\n",
" <td>2374.429224</td>\n",
" <td>2263.304721</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>6.378995</td>\n",
" <td>5.866953</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2011</th>\n",
" <td>19.247387</td>\n",
" <td>16.817844</td>\n",
" <td>21.635308</td>\n",
" <td>19.014870</td>\n",
" <td>25.855981</td>\n",
" <td>22.973978</td>\n",
" <td>5.851336</td>\n",
" <td>6.394052</td>\n",
" <td>3.320312</td>\n",
" <td>4.167969</td>\n",
" <td>2326.248548</td>\n",
" <td>2358.736059</td>\n",
" <td>0.340302</td>\n",
" <td>0.000000</td>\n",
" <td>6.714286</td>\n",
" <td>6.066914</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2012</th>\n",
" <td>19.838052</td>\n",
" <td>17.802974</td>\n",
" <td>22.339751</td>\n",
" <td>20.111524</td>\n",
" <td>26.695357</td>\n",
" <td>24.167286</td>\n",
" <td>5.792752</td>\n",
" <td>6.297398</td>\n",
" <td>3.269531</td>\n",
" <td>4.085938</td>\n",
" <td>2282.502831</td>\n",
" <td>2314.498141</td>\n",
" <td>0.634202</td>\n",
" <td>1.267658</td>\n",
" <td>6.834655</td>\n",
" <td>6.286245</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2013</th>\n",
" <td>20.982888</td>\n",
" <td>19.453815</td>\n",
" <td>23.471658</td>\n",
" <td>21.823293</td>\n",
" <td>27.860963</td>\n",
" <td>26.164659</td>\n",
" <td>5.658824</td>\n",
" <td>6.152610</td>\n",
" <td>3.179688</td>\n",
" <td>3.884766</td>\n",
" <td>2208.288770</td>\n",
" <td>2220.080321</td>\n",
" <td>0.853476</td>\n",
" <td>2.763052</td>\n",
" <td>7.033155</td>\n",
" <td>6.385542</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2014</th>\n",
" <td>21.159919</td>\n",
" <td>20.506329</td>\n",
" <td>23.655870</td>\n",
" <td>23.012658</td>\n",
" <td>28.088057</td>\n",
" <td>27.523207</td>\n",
" <td>5.719636</td>\n",
" <td>5.852321</td>\n",
" <td>3.210938</td>\n",
" <td>3.615234</td>\n",
" <td>2212.196356</td>\n",
" <td>2139.029536</td>\n",
" <td>0.859312</td>\n",
" <td>3.683544</td>\n",
" <td>7.210526</td>\n",
" <td>6.046414</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2015</th>\n",
" <td>21.350000</td>\n",
" <td>21.817490</td>\n",
" <td>23.935294</td>\n",
" <td>24.441065</td>\n",
" <td>28.481373</td>\n",
" <td>28.996198</td>\n",
" <td>5.604902</td>\n",
" <td>5.752852</td>\n",
" <td>3.101562</td>\n",
" <td>3.605469</td>\n",
" <td>2164.215686</td>\n",
" <td>2089.353612</td>\n",
" <td>0.638235</td>\n",
" <td>8.296578</td>\n",
" <td>7.211765</td>\n",
" <td>6.353612</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2016</th>\n",
" <td>21.903749</td>\n",
" <td>25.061818</td>\n",
" <td>24.439716</td>\n",
" <td>27.701818</td>\n",
" <td>28.866261</td>\n",
" <td>32.265455</td>\n",
" <td>5.493414</td>\n",
" <td>5.356364</td>\n",
" <td>2.992188</td>\n",
" <td>3.277344</td>\n",
" <td>2127.608916</td>\n",
" <td>1960.545455</td>\n",
" <td>1.017224</td>\n",
" <td>17.214545</td>\n",
" <td>7.296859</td>\n",
" <td>6.301818</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017</th>\n",
" <td>22.423795</td>\n",
" <td>24.003623</td>\n",
" <td>24.910521</td>\n",
" <td>26.496377</td>\n",
" <td>29.208456</td>\n",
" <td>30.829710</td>\n",
" <td>5.431662</td>\n",
" <td>5.532609</td>\n",
" <td>2.919922</td>\n",
" <td>3.419922</td>\n",
" <td>2114.110128</td>\n",
" <td>2031.884058</td>\n",
" <td>1.243854</td>\n",
" <td>15.731884</td>\n",
" <td>7.474926</td>\n",
" <td>6.304348</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018</th>\n",
" <td>22.310442</td>\n",
" <td>23.526690</td>\n",
" <td>24.779868</td>\n",
" <td>25.925267</td>\n",
" <td>29.042333</td>\n",
" <td>30.145907</td>\n",
" <td>5.396990</td>\n",
" <td>5.597865</td>\n",
" <td>2.886719</td>\n",
" <td>3.390625</td>\n",
" <td>2121.448730</td>\n",
" <td>2037.900356</td>\n",
" <td>1.135466</td>\n",
" <td>12.537367</td>\n",
" <td>7.391345</td>\n",
" <td>5.601423</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2019</th>\n",
" <td>23.084221</td>\n",
" <td>24.169014</td>\n",
" <td>25.456922</td>\n",
" <td>26.250000</td>\n",
" <td>29.560503</td>\n",
" <td>30.042254</td>\n",
" <td>5.315586</td>\n",
" <td>5.559859</td>\n",
" <td>2.839844</td>\n",
" <td>3.419922</td>\n",
" <td>2093.659245</td>\n",
" <td>2093.133803</td>\n",
" <td>2.581801</td>\n",
" <td>16.419014</td>\n",
" <td>7.545983</td>\n",
" <td>5.647887</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020</th>\n",
" <td>22.579487</td>\n",
" <td>24.071429</td>\n",
" <td>25.174359</td>\n",
" <td>26.571429</td>\n",
" <td>29.543590</td>\n",
" <td>30.642857</td>\n",
" <td>5.148718</td>\n",
" <td>4.000000</td>\n",
" <td>2.693359</td>\n",
" <td>1.978516</td>\n",
" <td>2050.256410</td>\n",
" <td>1650.000000</td>\n",
" <td>2.446154</td>\n",
" <td>0.000000</td>\n",
" <td>7.743590</td>\n",
" <td>7.785714</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" city08 comb08 highway08 \\\n",
"country Other US Other US Other US \n",
"year \n",
"1984 19.384615 16.079232 21.417330 17.797119 24.847038 20.669868 \n",
"1985 19.284768 16.275472 21.373068 18.025157 24.816777 21.020126 \n",
"1986 19.167183 15.945035 21.213622 17.645390 24.650155 20.464539 \n",
"1987 18.633381 15.611722 20.710414 17.326007 24.186876 20.208791 \n",
"1988 18.668224 15.577869 20.814642 17.372951 24.437695 20.420082 \n",
"1989 18.533040 15.139831 20.662261 16.908898 24.252570 19.887712 \n",
"1990 18.510109 14.850575 20.640747 16.577011 24.267496 19.485057 \n",
"1991 18.087943 14.803279 20.174468 16.599532 23.809929 19.683841 \n",
"1992 17.915374 14.895631 20.098731 16.735437 23.820874 20.063107 \n",
"1993 18.084866 15.007772 20.309760 16.896373 24.172560 20.230570 \n",
"1994 18.046474 14.952514 20.264423 16.829609 24.173077 20.201117 \n",
"1995 17.678914 14.533724 20.091054 16.422287 24.263578 19.747801 \n",
"1996 18.480545 14.926641 20.906615 16.961390 25.093385 20.544402 \n",
"1997 18.090909 14.978632 20.509470 16.991453 24.678030 20.683761 \n",
"1998 17.925267 15.288000 20.457295 17.408000 24.704626 20.944000 \n",
"1999 17.925125 15.709163 20.386023 17.756972 24.577371 21.099602 \n",
"2000 17.881849 15.714844 20.301370 17.757812 24.416096 21.128906 \n",
"2001 17.941267 15.643939 20.289026 17.496212 24.372488 20.768939 \n",
"2002 17.644412 15.083916 20.076923 16.979021 24.207547 20.195804 \n",
"2003 17.565101 14.826087 19.953020 16.628763 24.052349 19.806020 \n",
"2004 17.426290 14.928571 19.923833 16.805195 24.160934 20.165584 \n",
"2005 17.412170 15.196610 19.892078 17.132203 24.189437 20.664407 \n",
"2006 17.062575 15.300366 19.509025 17.285714 23.762936 20.875458 \n",
"2007 16.996403 15.489726 19.452038 17.626712 23.742206 21.202055 \n",
"2008 17.239869 15.770073 19.677985 17.937956 23.983571 21.697080 \n",
"2009 17.696803 16.148014 20.186329 18.259928 24.590959 22.140794 \n",
"2010 18.325342 17.278970 20.851598 19.600858 25.256849 23.785408 \n",
"2011 19.247387 16.817844 21.635308 19.014870 25.855981 22.973978 \n",
"2012 19.838052 17.802974 22.339751 20.111524 26.695357 24.167286 \n",
"2013 20.982888 19.453815 23.471658 21.823293 27.860963 26.164659 \n",
"2014 21.159919 20.506329 23.655870 23.012658 28.088057 27.523207 \n",
"2015 21.350000 21.817490 23.935294 24.441065 28.481373 28.996198 \n",
"2016 21.903749 25.061818 24.439716 27.701818 28.866261 32.265455 \n",
"2017 22.423795 24.003623 24.910521 26.496377 29.208456 30.829710 \n",
"2018 22.310442 23.526690 24.779868 25.925267 29.042333 30.145907 \n",
"2019 23.084221 24.169014 25.456922 26.250000 29.560503 30.042254 \n",
"2020 22.579487 24.071429 25.174359 26.571429 29.543590 30.642857 \n",
"\n",
" cylinders displ fuelCost08 \\\n",
"country Other US Other US Other US \n",
"year \n",
"1984 4.908046 6.033613 2.691406 3.808594 2118.125553 2578.871549 \n",
"1985 4.871965 5.949686 2.636719 3.765625 2141.997792 2553.899371 \n",
"1986 4.804954 6.136525 2.537109 3.925781 2149.148607 2588.741135 \n",
"1987 4.825963 6.164835 2.583984 3.931641 2227.318117 2630.036630 \n",
"1988 4.819315 6.307377 2.531250 4.066406 2207.476636 2623.258197 \n",
"1989 4.879589 6.366525 2.542969 4.171875 2250.000000 2698.093220 \n",
"1990 4.839813 6.466667 2.507812 4.265625 2238.258165 2728.735632 \n",
"1991 5.029787 6.538642 2.609375 4.351562 2348.581560 2725.761124 \n",
"1992 5.145275 6.446602 2.708984 4.250000 2373.272214 2703.762136 \n",
"1993 5.114569 6.497409 2.683594 4.281250 2333.097595 2677.202073 \n",
"1994 5.185897 6.608939 2.712891 4.414062 2326.041667 2697.625698 \n",
"1995 5.444089 6.715543 2.908203 4.507812 2355.191693 2759.677419 \n",
"1996 5.147860 6.579151 2.708984 4.277344 2250.291829 2622.586873 \n",
"1997 5.261364 6.581197 2.787109 4.218750 2319.128788 2600.427350 \n",
"1998 5.275801 6.436000 2.800781 4.105469 2295.373665 2578.800000 \n",
"1999 5.377704 6.362550 2.832031 4.042969 2312.728785 2582.470120 \n",
"2000 5.441781 6.332031 2.859375 3.978516 2385.958904 2529.492188 \n",
"2001 5.479134 6.310606 2.873047 3.976562 2399.536321 2568.371212 \n",
"2002 5.576197 6.433566 2.935547 4.058594 2425.689405 2610.139860 \n",
"2003 5.683221 6.588629 3.031250 4.171875 2480.604027 2637.625418 \n",
"2004 5.729730 6.558442 3.087891 4.199219 2476.719902 2607.305195 \n",
"2005 5.773823 6.447458 3.152344 4.132812 2493.455798 2592.881356 \n",
"2006 5.977136 6.476190 3.345703 4.171875 2527.496992 2574.725275 \n",
"2007 6.044365 6.513699 3.423828 4.210938 2544.664269 2510.958904 \n",
"2008 6.095290 6.518248 3.462891 4.222656 2551.369113 2486.678832 \n",
"2009 5.970232 6.620939 3.402344 4.351562 2433.076075 2407.220217 \n",
"2010 5.897260 6.223176 3.357422 4.050781 2374.429224 2263.304721 \n",
"2011 5.851336 6.394052 3.320312 4.167969 2326.248548 2358.736059 \n",
"2012 5.792752 6.297398 3.269531 4.085938 2282.502831 2314.498141 \n",
"2013 5.658824 6.152610 3.179688 3.884766 2208.288770 2220.080321 \n",
"2014 5.719636 5.852321 3.210938 3.615234 2212.196356 2139.029536 \n",
"2015 5.604902 5.752852 3.101562 3.605469 2164.215686 2089.353612 \n",
"2016 5.493414 5.356364 2.992188 3.277344 2127.608916 1960.545455 \n",
"2017 5.431662 5.532609 2.919922 3.419922 2114.110128 2031.884058 \n",
"2018 5.396990 5.597865 2.886719 3.390625 2121.448730 2037.900356 \n",
"2019 5.315586 5.559859 2.839844 3.419922 2093.659245 2093.133803 \n",
"2020 5.148718 4.000000 2.693359 1.978516 2050.256410 1650.000000 \n",
"\n",
" range speeds \n",
"country Other US Other US \n",
"year \n",
"1984 0.000000 0.000000 3.969054 3.872749 \n",
"1985 0.000000 0.000000 3.958057 3.886792 \n",
"1986 0.000000 0.000000 4.069659 3.886525 \n",
"1987 0.000000 0.000000 4.142653 3.902930 \n",
"1988 0.000000 0.000000 4.205607 4.028689 \n",
"1989 0.000000 0.000000 4.264317 4.025424 \n",
"1990 0.000000 0.000000 4.328149 4.105747 \n",
"1991 0.000000 0.000000 4.341844 4.234192 \n",
"1992 0.000000 0.000000 4.356841 4.252427 \n",
"1993 0.000000 0.000000 4.371994 4.279793 \n",
"1994 0.000000 0.000000 4.355769 4.293296 \n",
"1995 0.000000 0.000000 4.380192 4.313783 \n",
"1996 0.000000 0.000000 4.416342 4.262548 \n",
"1997 0.000000 0.000000 4.452652 4.290598 \n",
"1998 0.144128 0.420000 4.485765 4.272000 \n",
"1999 0.251248 1.334661 4.507488 4.215139 \n",
"2000 0.304795 0.449219 4.619863 4.253906 \n",
"2001 0.187017 0.443182 4.761978 4.412879 \n",
"2002 0.137881 0.132867 4.920174 4.367133 \n",
"2003 0.127517 0.000000 5.154362 4.307692 \n",
"2004 0.000000 0.000000 5.229730 4.308442 \n",
"2005 0.000000 0.000000 5.362801 4.688136 \n",
"2006 0.000000 0.000000 5.492178 4.776557 \n",
"2007 0.000000 0.000000 5.864508 4.883562 \n",
"2008 0.109529 0.000000 5.969332 5.120438 \n",
"2009 0.000000 0.000000 6.189636 5.563177 \n",
"2010 0.000000 0.000000 6.378995 5.866953 \n",
"2011 0.340302 0.000000 6.714286 6.066914 \n",
"2012 0.634202 1.267658 6.834655 6.286245 \n",
"2013 0.853476 2.763052 7.033155 6.385542 \n",
"2014 0.859312 3.683544 7.210526 6.046414 \n",
"2015 0.638235 8.296578 7.211765 6.353612 \n",
"2016 1.017224 17.214545 7.296859 6.301818 \n",
"2017 1.243854 15.731884 7.474926 6.304348 \n",
"2018 1.135466 12.537367 7.391345 5.601423 \n",
"2019 2.581801 16.419014 7.545983 5.647887 \n",
"2020 2.446154 0.000000 7.743590 7.785714 "
]
},
"execution_count": 71,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(autos2\n",
" .assign(country=autos2.make.apply(country))\n",
" .groupby(['year', 'country'])\n",
" .mean()\n",
" .unstack()\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 72,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7f16ad9528b0>"
]
},
"execution_count": 72,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAfEAAADlCAYAAABDAs5EAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAAA/iElEQVR4nO3deXxcVdnA8d+ZPfueNN2bLrelVJZCEVpZZBG1LAJaKCAgyOLLIiAgiIK8LILIJgiyCYJAKQq8ZZNFsBYQtKWUFnq7b7Rp0iSTffbz/nEnYZpmzySTmXm+n08+k7n3zLnPvU3z5Nx7FqW1RgghhBDJx5boAIQQQgjRP5LEhRBCiCQlSVwIIYRIUpLEhRBCiCTlSHQAvRDC+mOjIdGBCCFEEskFIiTH73nRTyoJeqdHAJXoIIQQIglp5I5rSkuGf1xpgQshRP/I788UlwxJXAghhBCd6PFZiWEYBwJnA0cA44Aa4APgetM018WUew84rJMqFpimeWo8ghVCCCHEV3rT4eEaYDawEFgBjAAuBj4xDGOWaZpfxJTdAvyiw+c3xSFOIYQQQnTQmyR+FzDfNM1A2wbDMBYAn2El+LNjytaZpvl0XCMUQgghRKd6fCZumuYHsQk8um0tsAqY1rG8YRgOwzCy4xeiEEIMnUC4lm2NLxCKNCc6FCF61K/xg4ZhKKAM+LTDrmlAM+AyDGMHcD/wG9M0IwOKUgghhsia2t/xZdOLVLcsZr+y+xIdzqBaunSpB/gucCiQkeBwxO5agcXAqzNnzvR1Vai/kwCcDoxi9+ff64F/YN1mzwVOA24BxgIX9vM4QggxpOr8nwBQ1fI2ta0fU5gxK8ERDaobnU7n6R6Px+NwyJwww0koFMLn850UDAYPAK7tqlyfJ3sxDGMq8BFWJ7fDumtlG4bxPHAKMM00TbNPB/qKF8jr52eFEKLXQpEW3tl8INYcKZDjmsrBIxeilD2xgfVfPZDf2Y6lS5fOtNvtz40YMcJVVlZWrZTMqTWcaK3ZuXNnSWVlZSAcDs+bOXPmss7K9WmcuGEYI4BXgTrg+724Tf47rNnWjujLcYQQIhGaAmtpS+AAjYHVfNn0UsLiGWTfcrlceaWlpbskgQ8/SilKS0t3OZ3OPODYrsr1OokbhpEHvI7VKv6WaZqVvfjY1uhrYW+PI4QQidIYWA2A215GedZcANbW3ZuqndxKnU4nNptt2M+9na5sNpt2uVwApV2W6U1FhmF4gEXAFGBuH26NV0Rfq3tZXgghEqYxYP1qy3EZTC68HJvyEAjvYqP30QRHNigy7Xa7NMGHuei/UWZX+3tM4oZh2IEFwMFYt9D/3UmZXMMw3J187jqsBUze7mPcQggx5NqSeK5rKhmOcibknQPApoY/0Rr8MpGhCdGp3nRH/B1wPFZLvNAwjDNi9jWZpvkSsD/wjGEYzwLrgGzgB8ABwO2maW6Ma9RCCBFnWkfab6fnuAwAxuedy7bGv+IPV7Gm7m72Kb0zkSEKsYfeJPF9o6/HRb9ibQZeir6+D5yMNX48AqwEzjZN88l4BCqEEIOpJbSVsG4FrF7pAA5bJpMLLmflrmupbH6Nsb7TKfDsl8gwhdhNj0ncNM3De1FmI/D9eAQkhBCJ0HYr3a4yyHSObd8+Mvs4tjT8hYbASsza33BQ+bMoJQtApoONGze6jj322BmXXHLJ1osvvrgq0fF0Rn4ShRCCr3qmZ7sm7zYuXCkbU4uuBqDe/xk7ml9NSHyi7z799NOM888/v+LrX//616ZPn77/7NmzZ1x22WXjNmzY4Iot98Ybb+TedtttIxMV50BIEhdCCHbvmd5RgecAyjKPAWBt7d2EI61DGpvou4ULFxacdtpp0z777LPs448/ftdVV1215aijjqpdsmRJwUknnTR98eLF7Wt8LF68OO+JJ54oT2S8/SXz7AkhBNDob+vUtse6TgBMKfwZVS3v4gtXsqn+CSYWXNTvYzUHN/Fp1ZVoHSTLWUG2ayJZzklkuyrIdIzHbnP3XIno0po1a9w33XTT+FGjRvmfe+651UVFReG2fWeffXb1aaedNvWqq66a+Nprr62M3ZcoTU1Ntuzs7H6tMSJJXAiR9gJhL77wDqDzljhApnM04/POYmP9o2ysf5RROSfhcZT1+VitoR38d8eP8IWt+bKaguvY2RJbwkamYwxZrgoK3PszNvcMSep99NBDD40IBAK2G264YVPHJD1hwoTApZdeuu3Xv/71hCeeeKJk06ZNnjfffLMIwDCMmW3lTNNcGvu5Rx55pOTpp58u27Vrl2vChAmtv/rVrzbPmjVrt3+5lStXeu66665Rn376aU4gELBNmDCh5ZJLLtl+9NFHN7SVue2220Y+8cQT5S+//PLKu+66a9R//vOf3EmTJrUsXLhwTX/OVZK4ECLtNQXafn8qclxTuixXkX8+Xza+SCBSw5ra3zGj5Hb6MmWpP1zD0srz8IUrsatMJuSdS2voS5qC62kOrCekm4AILaHNtIQ2U93yLlnOCZRmfXNgJ9gHWgcU4W3OITtgV+yjg0q5+jWb3IcffphXVlYWmDNnTqdT7Z100kl1t9122/glS5bkXXXVVdtqamqcS5cuzb3hhhs6HQ792muvFfl8PvuJJ55YrZTiL3/5y4jLL7980rvvvvuZy2XFuGLFioyzzjrLKC0tDZx55pk73G63fv311wsvvfTSyffff/+aI488sjG2zksuuWTS2LFjW3/yk5986XQ6+z1rniRxIUTaa4h2ast0jMFhy+qynMOWzaSCS/i85kZ2NL8CaKYX34Td1vMqnsFII0srz6c5uBGbcrF/2R92WyFNa40/XEVzcD1NgfU0BdcDUJhx0MBOrg+0DihdffR0IjsS3/S3lfspeWtVXxO51+u119bWOg8++GBvV2U8Ho8eOXKkb+vWrRmHHHJI8yuvvOJbunRp7vz582s7K79r1y7Xm2++uTI/Pz8MMHHiRN/PfvazSW+++Wbu3Llz6wFuvvnmMeXl5f6XXnppdVtiP++886rmzp2717333jvqyCOPXB1b55QpU5ofeOCBTX05t85IEhdCpL2vJnmZ2mPZ0Tkn4/V/wvaml9nR/CqNwXXsV3ofmc4xXX4mHGllWeVFNAa+QGFnn9K791jiVCmFx1GGx1FGUcYhAzuhNNbY2GgDyMzM7PYZc2ZmZnjr1q296tx95JFH1rYlcIDZs2c3AWzZssUNUFNTY1+xYkXOj3/84y/r6+t3W/Ju1qxZDS+88EJZc3OzLSsrqz2m+fPnx2U6ckniQoi091XP9J6TuFJ29i6+lVzXXpi1d9AUMPlw+/fZp+R3FGfO3qN8RAdYXnUZXr+1kuTeJbdQmjk8F3ZUyqUpeWtVMt9Oz8nJiQC0tLR0m6BbWlrsGRkZvepMVl5eHoh9X1hYGAZoaGiwA6xbt86ttebhhx8e9fDDD4/qrI6amhp7bBKfMGFCoLNyfSVJXAiR1iI6SFNgHQA57s47tXWklGJc3pnkuAw+rbqCQKSWpTvPZ3LBT5mQd177c3Ktw3xW/XN2tS4BYFrR9YzMPn5wTiROlHJpHBVxSTCJkJ+fHy4oKAhu2LChy0VDfD6f2r59u2fSpEm9Wp6uq5XetNYKIBKJKIDTTjutcs6cOQ2dlS0pKQnFvu/tHxA9kSQuhEhrzcGNaIJA1z3Tu1KYMYuvj1rI8p2X0RBYydq6u2nwr2Lvkluwq0w+r7mJyuY3AJiUfyljc+fHPX6xp4MPPrj+tddeK37//fezZs+evUeifvHFFwsCgYCaM2dOfTyOV1FR4Qdwu936qKOOauypfDzJZC9CiLTW9jzcYcvFY+/7fB8ZjnJmlT/FqOyTANjZ8ib/3n4qn9fcyLbGhQCMzz2bivwL4he06NYFF1xQ6XK59E033TSutrZ2t2fUmzdvdt13332j8/PzQ2effXY1QEZGRhigrq7O3ll9PSkrKwvtvffeTS+++GJJVVXVHo3jzrbFi7TEhRBp7atJXqb2abhYLLvNzfTi/yXPvTdf1NxKc3A9zdHe5aOyT2ZK4VX9rlv03dSpU/3XX3/9pl//+tfj586dO/24447bNXLkSP+mTZs8ixYtKgkGg+q+++5b2zaGfMaMGS0A119//Zg5c+Y02Gw2PW/evLq+HPPGG2/cfNZZZ01tO97o0aP9VVVVzuXLl2cHAgHbX//6V3MwzlWSuBAirXU33WpfKKUYk3sq2S6D5VWXEQjvoizzGKYX3ygJPAHmzZtXO2XKlNYHH3yw/KWXXippamqy5+XlhQ455BDvZZddtn3ixIntz/2PO+4478cff1z19ttvF77zzjtFWmvmzZu3tLv6O5oxY4ZvwYIFX9x9990jFy1aVNzc3GzPz88PTpkypeWMM84YtMVTlNb9HmM+VLxAXqKDEEKkHq017235BoFILXsX38KonO/Fpd5A2EtD4HMKPbOwqYS2leqB/M52LF269OGCgoLvVVRUbB7akERfbNiwYVxdXd2LM2fOPL+z/dISF0KkLX+4mkDEmt9joC3xWC57PsUy1lsMAenYJoRIW22d2hQOsl2TEhyNEH0nSVwIkbbanodnOSuwKVcPpYUYfiSJCyHS1lfTrcbvVnpvaO1HNz2Abn1lSI8rUo88ExdCpK22lniuu+fpVuNJN/waWl+wvg/+F5VzPSqxHeBEkpKWuBAiLYUjrTQHNwFD2xLXLc+3J3AAWp5B1/0YHel0tk4huiVJXAiRlhqDawFr+ureLHwSDzq4Et1wk/XGfTRkXWR9H3gfXfMDdEhGe4m+kSQuhEhLjX7rVrrbXorLXjjox9MRL9p7KRAA+3hU3m+w5VyOyvst4ITwBnTN99GBjwc9FpE6JIkLIdLSUHZq0zqC9v4MwtsADyr/9yhbDgAq4wRU4Z/BVgjai649B93y10GPSaQGSeJCiLQUr+lWe6X5DxBYDIDKuxnl3P2YyjUTVfgCOCYDQXTDtUQa70Dr8ODHJpKaJHEhRNrROhKTxKcN7rH8i9FNv7feZM5HZXS+nrhyjEYVLgDXodaG5kfR3ovROmmX9hZDQJK4ECLttIa2EdbWMtOD2RLXoW3WbXQ0OPdB5VzXbXlly0YVPASZZ1sb/O+Af8mgxSeSnwxMFEKknbZWuE15yHKO6/PndWgDhKvAORVly++8jPZbHdm0F1QBKv8+VC9mhVPKgcq9Du2cgQ78F1wz+xxfurvkkkvGL1myJP+TTz5Z3tl+wzBmnnzyyVW33nrrVoAVK1Zk3HvvveWmaWZ5vV5nTk5OaNy4ca2HHXZY/UUXXTRoK5DFgyRxIUTa+apT22SUsvf6c1praH4Q3XTPV9tsI8E5DRzTUM5p4NwLbCPRDTdDaCVgQ+XfhbKX9ylGlXEcKuO4Pn1G9N3777+fdf755xslJSWB448/fldJSUlwx44drs8++yxrwYIFpZLEhRBimGloT+K9Hx+udRDd8Cto7dBzPLId/NvB/w7tCzurHNCN1rfZl6Hcs+MQtRgMDz74YHl2dnb4xRdf/KKgoGC3noQ7d+4c9jly2AcohBDx9lWntt4lcR1pRHsvgcAH1gbPiajc6yC0AUJfoINfQPBzCK0BAu0JHPc3IeuCQTgDES/bt293T5gwoaVjAgcoKysLJSKmvpAkLoRIK8FwA77QdqB3ndp0+Et03fkQWguAyr4Usv4HpRS49gfX/qi2sjoEoY0Q+hwiXsg4BaWk//BwVlZWFli9enXWqlWrPNOnT/clOp6+kiQuhEgrba1w6DmJ6+BKdN0FEKkGnNYY74zvdVleKQc4J1tfSSqiA6o1+KUz0XFkOEcFbcqley45MD/60Y92XnrppZNPOeWU6YZhNO+7776Ns2fPbjzssMMaXa7BP/5ASRIXQqSVtk5tGY4xOGxZXZbTvn+g6y8H3QoqB5X/AMr99aEKMyEiOqD+tfXY6b5wpTvRsXjsI/zfGPPGqsFO5EcffXTDk08++cVDDz1U/t///jf3iy++yHr22WdH5Ofnh375y19umjt3bv1gHn+gJIkLIdJKYy86tenmp9GNNwMRsI9GFTyMckwaogjFUJs1a1bLrFmz1vv9fvXpp59mvPHGGwULFy4su+aaayZOnDjx82nTpg3b2+ySxIUQaaW76Va11uim30Lzo9YG5wxU/h9R9uKhDDFhbMqlvzHmjVXJfjvd5XJFgsFgp50RmpubbQButzvScZ/b7dbRhN4yfvx43y233DL+5ZdfLpg2bdqO/sQxFCSJCyHSRkSHaAquAyC3Q0tc61B0CFl0rW/3kdb4bpUx1GEmlE25dJZrQlLP9VpeXh4IBoNq48aNrgkTdj8X0zTdACNHjuz2HPfbb79mgOrq6oT/QdMd6TYphEgb1S3vEYnORZ7r3qt9e/vsam0JPGMeKv/+tEvgqeKb3/xmPcDjjz9e2nHfU089VWqz2TjyyCPrAd59992cSGSPRjlvv/12HsD48eOH7a10kJa4ECKNbKp/HICSjMPwOEYAoCNNaO9FEPjIKpR1ISr7cmsImUhK+++/f+sxxxxT8/zzz5dt2bLFM2vWrIZIJKI++OCD3GXLluXOmzdvZ0VFRQDg1ltvHXvDDTfYDj300LqKigpfMBhUy5cvz37vvfcKS0tLA2eccUZNos+nO5LEhRBpoc63DK9/OQDj834EgA7XoOvOg9AqAFTOz1FZP0pUiCKO7rnnnk0PPvhgy6JFi4ofeuih0YAeM2aM7+qrr9587rnn7mord+WVV259/fXXCz788MO8RYsWlYRCIVVSUhI44YQTqi6//PIdnU0CM5xIEhdCpIW2VniuawYFngOsSVxqfwThjYAdlXcLKuOkxAYp4sZut3PxxRdXXXzxxd3OfX7sscc2HHvssQ1DFVe8SRIXQqS8psAGqlreBWBC/jkQXo+uPQciOwEXKv9elOfIxAYpRD9IEhdCpLxN9U8AmgzHGEodpeia+dElQrNQBX9EuWYlOEIh+keSuBAipfmCVWxvegmAcXY/1J1q7bAVogoeQzmnJy44IQZIkrgQIuVoHYHgCrT/LbbUL0QTwolmpLIWPsE+3mqBOyYkNlAhBkiSuBAiJWjtg8BHaN+74H8bIlWENGwN2gHFGGc29qzvoTxHg3N/lLInOmQhBkySuBAiaelwJfjfQ/vfA/8HwO7zcnypywhRgw0XY0e8gc1RlJA4hRgsksSFEElD63D0Nvl74H8XQqs7lLCBc1+U+0gi7iPYsuMCAEblnIxbEnhHjaFQaM+pysSwEv03auxqvyRxIURS0DpoDQsLfrz7DpUL7m+g3EdYr7YCAHY2vYIvvAOwMT7vrKEPePgzfT5fsLq6urCkpKQ20cGIPVVXVxf6fL4gYHZVRpK4ECI5tP7tqwTumAzuw1Huw8G5H0rt/qtMa90+uUtZ5lFkOscOcbBJ4fFgMDhpx44d8+vq6sY4HA5ZS2MYCYVCEZ/PFwwGg88Aj3dVTpK4EGLY09qPbrrfepNxEra833Rbvsb3Yfu64ePzZRrVzsycOTO0dOnS64LB4LpgMGgAOYmOSeymEasF/vjMmTNDXRWSJC6EGP5a/hKdXc2Jyr6kx+KbvFbDpcBzAPnurw1ycMkrmhweTnQcov/k9okQYljTkSZ000PWm8xTUfZR3ZZv8H9Bje8DACbknTvY4QmRUJLEhRDDW8sT0SlSM1BZF/ZYfFP9nwDIck6kOOMbgxubEAkmSVwIMWzpSC26+THrTeYPUfaSbsu3Br+ksvl1ACbknYNS8itOpDb5CRdCDFu66RHQzaByUVnn9Vh+Y/1jaMK47SWUZ88dggiFSCxJ4kKIYUmHK6HlaQBU1nkoW1635RsDa9na+DwA4/POxaZcgx6jEIkmSVwIMSzppgcBP9iKIfOH3ZfVGrPmdiBCpnM8Y3NPHZIYhUi0HoeYGYZxIHA2cAQwDqgBPgCuN01zXYeyhwB3APsDDcAC4FrTNFviG7YQIpXp0BZoXQiAyroIZcvstvyu1sXtPdKNwqulFS7SRm9a4tcAJwFvA5dhjSk8HPjEMIxpbYUMw9gXeAfwAFcAjwIXYCVyIYToNd10HxAC2yjInNdt2YgOsrr2dgCKPIdQknHYEEQoxPDQm8le7gLmm6YZaNtgGMYC4DOsBH92dPOtWK30w03TbIqW2wQ8YhjGN03T/Ecc4xZCpCgdNMG3CACVfQmqh1b11obnaAluAmwYRdeglBr8IIUYJnpsiZum+UFsAo9uWwusAqYBGIaRCxwN/LktgUf9GWgCfhC3iIUQKU033QNosFdAxvHdlg2EvazzPgDAmJwfkOOaPPgBCjGM9Ktjm2EYCigDdkU3zcBq1f83tlw0+S8H9ut/iEKIdKEDy8H/DgAq5/I9FjbpaL33fkKRBhy2HCYVXDwEEQoxvPS3d/rpwCjg+ej78ujrjk7K7gBG9vM4Qog0opvusr5x7A3uY7ot2xRYx9YGq8vNxPyLcNkLBzs8IYadPidxwzCmAg8AS4Cnopszoq/+Tj7ii9kvhBCd0r6/Q+DfQFsrvPtn22btHWjCZDrGMjZ3/lCEKMSw06ckbhjGCOBVoA74vmmakeiu1uiru5OPeWL2CyHEHrTvH2jvFdYb10HgmtNt+eqWf7KrdQkgQ8pEeuv1UqSGYeQBrwN5wGzTNCtjdrfdRi/f44PWtu39jlAIkdK0702093IgCI5JqLy7u22FR3QQs/YOAAo9X6ck84ghilSI4adXLXHDMDzAImAKMNc0TbNDkZVACDigw+dcwL5YnduEEGI32vcG2vtTrARuoAqeQtmLu/3M1obnaA5uBGxMlSFlIs31mMQNw7BjTdhyMNYt9H93LGOaZj3WZDBnGoaRHbPrTCAbWBifcIUQqUK3vhptgYfAMRVV+CTKXtTtZ2KHlI3OOYUclzEEkQoxfPXmdvrvgOOxWuKFhmGcEbOvyTTNl6Lf/wJrOtb3DMN4FBgNXAm8bprm2/ELWQiR7HTr/6HrrwYi4JiOKvwTypbf4+fWex+whpSpbCYVXDLocQox3PUmie8bfT0u+hVrM/ASgGmaywzDOAq4Hbgba+70R4Br4xFof+jWVyC8HRyTrC/7aFlfWIgE061/Q9dfC2hwzkAVPN7jCmUAgXBt+5CyioILcffQahciHSitdaJj6IkXqzNdn+hwJbr60A5bPeCosDrPOCaBY7L1JcldiCGhW15AN/wCK4Hviyp4DGXL6dVnN9c/zeraW3GobA4fuxi7zTO4waaGeiA/0UGIwdPr3ulJx1YKWeeDfzGENgABwAehzyH0Obv96aKy0Y69wLkXyjkdnNPBPgGl7ImJXYgUpFsWRhM44NwfVfAoypbd/YdibG+y5lMvy/qWJHAholK2JR5L6xCEt0JoHYTWoUPrILQ2Jrl3QmWAY5qV2D3HoVwyc6wQ/aWDa9A13wOC4DwAVfBwnxJ4U2AD7385F4ADR/yZwowDeviEiJKWeIpLiyTeFa3DEN4EwS/QwVUQWgXBVaAbO5S0o3JvRmWePBhhCJHStA6ja+dBcAXYx6GKXkLZsvpUx9rae9hQ/zAex0gOHf2mPP7qPUniKS51b6f3glJ2cEwEx0RUhvVXvtY62mr/3ErsvrcgvAHdcC1EKiHrJzIuVYi+aHnCSuCAyru1zwlc60j7rfSRWcdJAhcihvxv6EAphXKMRXmOxZZzJarohfYpIHXTveiGX1q354UQPdKhzejGe603GfNRrgP7XEedbym+sDUp5Mjs7pcmFSLdSBLvgbJlowoeAs+J1obW59He/0FHWhIalxDDndYRdMP1gA9s5aicn/Wrnu1N/wdArmsGWa4JcYxQiOQnSbwXlHKh8m6HrAutDf530XVnoSO1iQ1MiOGs9XkIfASAyrupTx3Z2oQjPnY2/x2Akdkdp6kQQkgS7yWlFLacK1C5NwI2CH6KrjkVHdqS6NCEGHZ0eAe68XbrjecElPuwftVT3fIuId2EwkF59nfiGKEQqSGtO7b1h8qcD7YSa9nE8Car123Bw2CfaPVq140QaYq+NoJuAt0M9lHg3A9lL0n0KQgxqLTW6IYbrJ97WxEq97p+19XWoa04Yw4ue2G8QhQiZUgS7wflORoKn0TXXQiRGnRN74eeaftoa6IL137g3A8cU1BK/hlECvEtAv97AKjcX6FsBf2qxh+uYVfrvwC5lS5EVyR79JNy7Q9Fz6HrzoPwtk5KOEBlgy3HmjgmtAkIWGXD29C+/4tWlIl2fg0cU0FloZQH2r8yYl6zwLk3SrmG8CyF6BsdrkE33Gy9cR8N7mP7XVdl02towjhsObJmuBBdkCQ+AMpRAcWvQmCFlWxt2aByrMSNZ7fx5FoHIPgFBJehg8shsBQiVaBbIPBv6wvoduod+wTIvxPlnDGYpzWotO91dMtCVObpKM+RiQ5HxJluvAm0F1QuKveGAc2p0D7NaqZMsypEV9J6xrZE0lpDZAcEPkEHl0F4C2gf6FbQ/uir76ttBKOfdKCyL4Gs85NubncdXIGuOY32c/F8B5Xzyx7XkBbJQfveQnv/BwCVe9uAZjiUaVbjRmZsS3GSxJOEDn6O9l4J4fXWBuf+qLzfohxjEhtYL+lIA7rmxOijBzfgt3aofFTu9eA5TmbCS2I64kXvmmvdXXLNsVYnG8C/p0yzGjeSxFOc/M9IEsq5F6r4Rcg8w9oQXIauOR7d+iLD/Q8xrTW6/rr2BK6KFqJybwOVC9qLrv8Z2nsBOjorl0guOtKErvuxlcBVJir3pgElcJlmVYjek/8dSUQpD7bcX6EKHgFbCehmdP016PqfoiPeRIfXtZanwP8mEO2t7JyKyjwZVfya1fkJwP8eetd30C3PonUkgcGKvtC61RqlEfwUUKjcW1CO0QOqU6ZZFaL3JIknIeU+DFW8CNxHWRt8r6N3zUX73rVWZusHrbU1z3VgOTq0Hh3eZXXGGyAd/Cxm0o/jIeOU9n3KXoqt4AFU/u/BVmz9UdJwA7r2TOtzksyHNa0D6LqLIfgxgJXAM7474HplmlUhek+eiScxrTW0voBuvMXq5Q6g8sH9DZT7UOvV1vUEGTrSDIGP0P7FEFjcxVA5N9jyor3uc8FWjMqcj3LP7jm+2Ofg9gmoor91uYKVjnjRDbeB78WvNtqKwXUIyv0NcM1G2Yt7PKYYGlqH0N7LwP8WgNVBMevMAdcbjvh4b8uhhHQTUwuvY1zeGQOuM83JM/EUJ0k8BejQFnT9tRD8T4c9CpwzrCkvXYeCc28IrYfAv9D+f1rD3Np7vfeR57uonJ+j7GWdx6Q12nsp+P9O+3Nw59Sez8X/L2uccXjjnjsd08A9B+WaA66ZgzZmXusARHZBpB4cFSjlHpTjJCutw+j6ayA614HK/hkq+/y41L2j6XVWVF+JwsHhY9+TWdoGTpJ4ipMknkJ0aBsEFkdb1h9Gh6bFcgEdb5Hbrelg3YeC+1Cwj49OGdsAumGPV+3/FwSXWR9VWajsyyFz/h6zzunmp9CN/2sVy/1fVOa83p+H1hDeBP4l6MASaxEN3Y9V41SWdWfClm/dTbDlgSoAWx7Klg/Y0ZFqCFdBpNr6CleBrvuqDlspKus8yJyHUhl9jyHFWFOq/tJa3AQg6yfYcn4at/qXVV5Edes/Kck4nP1H/CFu9aYxSeIpTpJ4itLaD4H/WAnd/8/dW7a2EV/dcncdgrLl9KHeCLS+aD3n1l5ro2MvVO6vUa59rDLBleiaeUDQGjqWd+cAeysHrPH0gX+B/30Irep3Xf1mK0ZlnQsZp6FsmUN//GFAa41uvA1anrA2ZJ6Nyrk2bkMD/eEa/rnlcDRh9im9ixFZ/Z/tTbSTJJ7iJImnCR3aAsHPwDEFHJMG/ItXR+rQjb/7qkWGgox5qKzz0XVnQXhr9Dn4X/u1BGW3xw7XQGgd3c9vp63FZyL11jC2iBci3vb3RLygQ2AvAVsp2EqsxWlspWC33oNCtzwJLc/T/tjBVojKPNe6+9DF8/1UFWm8B5qjreOMU60/3OI4tn+99yHW1d2Hw5bD4WMWY7fJY4w4kCSe4iSJiwHRgeXohl9BaHV0iw2IAK7oc/BpCYwuPnS4Et38CLQsoP1xhMpHZf0IMs+I+x8pw43WEXTT76H5AWuD53hU3h1xHb/dGtrO+9uOI6xbGZd7FlOLrolb3WlOkniKkyQuBkzrELQ8jW6611p+EqwJPzJPTXBk8aXDVejmR6HlWdpnnMMO9nKwjwb7GJR9DNjHgCP6qvKTeiY6HalDe6+yRi8AuL+Fyr877ivvfbLzUqpa3sZlL2bO6Fdx9uERj+iWJPEUJ0lcxI3VYn0UZR8BmecmdfLqjg5Xo5sfg9ZnO+k82IHKtkYFOGdaK9859+1TH4RE0oHl1jCySHQmvYx5qNxfxn1UQHXLP1m28yIAvlbyW8qzBz7WXLSTJJ7iJIkL0U864oXgKghvRYe3QmhrdKnZraDru/iUsvoltCV110ywjRxWf/BoraHlz+jGO4AgqAxrhEFG/GdPC0d8vP/l8bSGtlHoOYgDRjw+rK5FCpAknuIkiQsxCHSk3krooY3WKnWBZdF+A53NQucG5QLlBJwxry7r1ZaNyviBNTZ/kBOcjjRa89z7/25tcExC5d+HckwalOOtrfs9G7wPonBwyKiXyHZVDMpx0pgk8RQnSVyIIaIjTdYc48Fl6MBS6/toH4Jecc60bmc79xqc+IKfW7fPw5utDZ7jrb4NgzSkrjm4ife3nYAmSEXe+Uwu/OmgHCfNSRJPcZLEhUgQrUMQWgPhnUAQdLDTVx1YBv63o59SkPF9VM4V3U6p2+c4Wl+wZsojALis5WEz5vW65d8S3MbKXdeR69qLyQU/xW7z9HBMzdLK86jxfYjHMZI5oxZht8lkOoNAkniKkyQuRBLQ/g+sOfJDa60NKgeVfQlkno5Szv7VGa60knfL8xCptDbax1q3z/vY2v9k5yVUtbwDQI5rGvuW3kOms+u17iubXufT6isB2K/sAUozj+jXOYgeSRJPcZLEhUgS1lC+Z9BN91lT4QLYJ6Jyf4Fyz+llHREIvI9ueRb87wIxq955vhu9fd633vNe36d8tOO03bY5bDnMKL6N0qxv7lE+FGliybbv4g9XU5J5BPuXPdCn44k+kSSe4iSJC5FkdKQW3XgvtC6gvaOcY2p0rPoIlG1EdOz6CLCVWa+RRmj9K7p1gdV7vo2tEDJORmXMQznG9j0WrflP5TnU+T4m17UXUwp/xoqqqwhEagCYkHcekwouxRYzrnx1ze1sbngSm/IwZ9QiMpyjBnI5RPckiac4SeJCJCkd/BzdcEsnq9d1pm0mvSjXQaiMeeA5ZkDjvne1vM/SnT8GYGbZIxRnzsYXqmJF1ZXU+ZcCUOA5kH1K7sTtKKHBv5p/b/8+mjCTC35KRX58Vj8TXZIknuIkiQuRxLTWEFgCwVXoSKXVSS5caU3QEqndvbDKg4zvoTLnoRwT43DsCP/e/gMaAp/vMcY7okOsrbuHTfWPA+CyF7NPyZ2srbsXr/8TspwVHDLqb9gGaTlZ0U6SeIqTJC5EitLabyX1yE5rZjnXLJTqvtd4X8R2Tjuo/FnyPfvsUWZn89usrL6OkG7abfsBIx6nKOPrcYtFdEmSeIqL7wTIQohhQyk3OMYCfX/W3ZOIDrK27j4ASjOP6jSBA5RlHUWOawrLqy6jMWACUJ71XUngQsSJJHEhRJ992fgiLaHNgI3JBZd2WzbTOZaDyp9lXd19tIS2YhT9fGiCFCINSBIXQvRJONLKeq+1rvio7BPIdvU8Javd5sEounqwQxMi7cRvQWAhRFrY0vAM/nAVCicTC/4n0eEIkdYkiQshei0YrmdD/SMAjM09jQzHyARHJER6kyQuhOi1jfWPE4o0YFeZMsZbiGFAkrgQolf8oWq2NDwNwPi8c3DZ47MAixCi/9KyY5vWmnr/Cna2vElraDsjs46jJPOIQV+rWYhktt77EGHditNWwPi8sxMdjhCCNEriWkfw+j+hsvlNqprfwheubN+3s/nvFHgOwCi8ijz3jARGKcTw1BLcwrbGhQBMzL8Qhy0rwREJISDFZ2yL6BB1vqXsbH6Lqpa38Ierd9uf7ZyE015Ine/j9m0jsr7N5IKfdruMohDpxBeqZEX11dT5/ovHXs43xrwu06UmD5mxLcWlbBIPRVr4aPupNAXX7bY9xzWVsqxjKMs8hmxXBQA1rR9g1t5JY2A1AAoHY3NPpyL/Alz2/IHGL0RS0jrMloZnWVt3L2HdDMCMktsZmX1cgiMTfSBJPMWlbBIPhOtYvPVowrqFXNcMRmQdQ1nW0WQ6O5+CUusI25sWsa7u3vZb7Q5bLhX55zM253TsNvdAzkGIpNLgX83nNTdQ7/8MAJetiKlF11Ke/Z0ERyb6SJJ4ikvZJA5Wb1pNBI+jrNefCUd8bG54io3eR9oXbfA4RjKl4HJGZH0bpaRDv0hd4Ugr67wPsLn+STRhAEZln8KUwivkrlRykiSe4lI6iQ9EIFzLeu+DbG1YgCYEQK5rBlOLrqLAc8BQhyPEoNvVsoTPa26iNbQNgCxnBdOLb5Sf9+QmSTzFSRLvQXNwE2tq76aq5a32baWZRzGl8AqynOMTFZYQcdMU2MB67x+obH4NAIWTivwLqMg/TzqwJT9J4ilOkngv1fmWYtbe0f6MUOFgTO48Jub/BJe9IMHRiVgN/s9ZW3cfgfAuNBG0jgAR63siaB0GNDblwmMfgcdRToZjJB5HefT7cjyOESmfwLy+T9lY/xhVLe8A1u+BAs+BTC+6kSzXhMQGJ+JFkniKkyTeB1prKpvfYG3dXbSGvgTAobIZl/dDMp3jcNhycKhsHLbdv2wqbYbjJ5TWYTbWP8a6uvvbH4H0n8JtL2Vc3pmMzz0nZSYC0lqzq3UJG+sf221oZYZjDBPzL2Jk9gkpc64CkCSe8iSJ90NEB9jS8BfWe/9IKNLQY3m7yqAs61tMLboWpy1nCCJMPy3BbXxW/XO8/mWA9Tx3VPb3UMqBwgbKhsL6AhtK2QhHWvGFK/GFttMa2oEvtCM6l8Du/yfG5f4Qo/DqpO7UGNEhdjb/nY31j9IYMNu357imUZF3HmVZx6CUPYERikEiSTzFSRIfgEDYywbvH9nVuphgpJFQpImI9nVZPsMxmq+V/JZ8zz5DGGVq01qzvellvqi5pX0s89jc+UwpuBK7LaPP9UV0AF9oJ77QDrY2Pkdl8xsAjMw+kenFNyXVXRWtNc3BdexseYcvG//W3mENoNBzEBPyf0yR52Bpeac2SeIpTpJ4nEV0kFCkmVCkqf2rIbCStXX3EtF+FA4mFVzKhLwfJXXLbjgIhL18vutGdra8CYDLXszexTdTknloXOrXOswXNTeztXEBYHVo3Kf0zmH9rFzrSHRdgHeoan6bltDmmL2KssyjmZB/rkwvnD4kiac4SeJDpDGwlk+rrqA5uB6AIs/BzCj5DW5HSYIjS067Wt5n5a7r2qfSLc08kunFN8W9k6HWmrV197AxuoZ2kedg9i27b1jNHR7RAWpb/0NVy9tUtfxjj+mFPfZyyrKOZkzOPOmwln4kiae4XiVxwzDKgcuAg4ADgGzgCNM03+tQbhMwrpMqbjdN8+f9jNFLCiRxsCbSWF17O9sanwfAZStk75LbKMn8RoIjSx6toR2sr/sDXzb9FQC7ymRq0bWMyj5pUG8Lb/Q+xpq63wGQ5/4a+5c9NOSTn2it8YV30BRYS1NgHU3BtTQG1tAc3EBEB3Yrm+2cTGnWUZRlHkmOa5rcMk9fksRTXG8f8BnANcA6YAVwSDdllwL3dNi2ss+RpSC7LYPpxTdSlHEwq3bdQCBSy7KdFzA+7xwmF1w2rG/TJpo/VM2G+ofZ2vA8miAA+e59mVHymy6n0o2nCfnn4rDl8nnNjdT7V/CfHWdxwIhHB/VOitaaWt/HVDa/Hk3ca9tnEdyTIt+9D6WZR1KadRRZzs7+lhZCpJreJvGlQLFpmjWGYZwIvNhN2W2maT494MhS2Iisb5Hn2psV1Vfj9X/Cpvo/Udv6EZMLr5CORh0EwnVsrH+MLQ3PtHcadNtLqMi/gNE5PxjSjmZjcr+P057DiqqraQqu5aMdZ3DAiMfIdI6O63EiOkBl0xtsaniifVGeWAoHWc4Ksl2TyXFNIts5mTz3DHk0I0Qa6vMz8Zgk3tXt9OXAPMBummZLHGL0kiK30zuK6BDrvX9gg/ePtA1rynPPoCLvAkoyj0jrZB4MN7Cp4Uk21z9JWFs/Rk5bARX5P2ZMzqnYbZ6ExVbd8i+WV11GRPtw2goYl3smo3O/j9teNKB6A2Ev2xoXsqXhL/jDVe3b8937UpjxdbKdVtLOdI6Tuzait+R2eoobjCReCrgAO7AB63n4wwOI0UuKJvE2db6lrK27jzrff9q3ZTunUJF/PiOyvjVo43f9oWoaAyYNgdU0Rr/CkVbcjmJc9mLc9tjXItz24vYZzeJBa01YtxAI1xAI1xII1+AP19IS2sK2xoXtY/Adtlwm5J3D2Nwzhk2HsjrfMpbtvIhQpBGwpiotz/4u43LPINe9V5/qag5uZkvDU3zZ+CJh3RrdamNE1jGMyz1LhiSKgZAknuLincT/D/gXsAYoAX4MzAKuNU3zN/2M0UuKJ/E2db6l0XHnS9q3ZTrHU5F3HuXZx2FTzn7VG4600hzcRHNwQ0zS/oJAuKZf9Y3I+jbTin7Z545dWkfY2vg825texh+uJhCu7XZcvV1lMi7vLMbnnoXTntuvWAeTL1TJloZn2Nr4/G6T/uS792dc7umUZh21x79ZKNIc7ZS2jqbAWhoCq6N/vFn/D+0qi9E5pzAu9wwynKOG8nREapIknuLimsQ7KWsHlgBfA0aaplnfjxi9pEkSb1PvX8UG78O7LbrisZdT4DkAl70Apz0fl60Ap70Al60Qlz0fp70ArYM0BzdEE/ZGmgMbaQ5uxBfe0eWxFHaynBXkuKaS656Kw5aDP7wr2ire/bWt1Qngtpeyd8mtFGd018fxK83BTaysvr59RrXO2FUmLnsRLnsBhZ5ZjM87JynmpQ9HWtne9ApbGp6mKbi2fbvbXsaonJOI6IDVMS24Dl9oe6d1eOzljMs7k1E5J8usfiKeJImnuEFN4tHy84DngG+bpvlGP2L0kmZJvE1TYC0bvI+wo/k1IDLg+hy2HHJcRvRrKrmuaWQ5J2K3uXv1+XDEz47mRayuua39tu/Y3DOYUnBFl8+oIzrE5vonWee9n4j2AzAy+3gKPAdGE3Yhbpv12p8Z1oaTtt7kWxqepqrlXbr7N3PbS8l2TiLbNZl8z36UZn4zqWaDE0lDkniKG4rfGlujr4VDcKyUku2azNdK72BS8GK+bHoJX6iSYNhLIFJHMFxHIFK3W+vYYiPDMYpsZwWZzvFkOSeQ5awgyzUel61oQJ3l7DY3o3NOodAzKzpP+XK2NDxNTesHfK3kjj2eBTcG1rCy+noaAtYIQ49jJNOLb+p16z3ZKKUoyjiIooyDaAluY2vjs1S3/BOXvai9U1q2axJZzklDPsZcCJGahiKJV0Rfq7stJbqU6RzL5IJLO90X0cFoYveiUGQ6xw56z+VM51gOLP8zG+sfZX3dH2gObuDf209lUsHFTMg7F02YDd5H2OD9Y/tqYmNz5zO54PJh0zFtsGU6R2MUXoVReFWiQxFCpLC4JXHDMAoBr2makZhtHuAqoBH4MF7HEl+xKSduRwluhnaMsE05mJh/IcUZ3+Cz6mtoDm5gbd09VLf80+q8FVwDQKZjHHuX/C8FngOGND4hhEgHvX4mbhjG9dFvpwHzgceBjViJ+37DMM4GfgG8AGwCioCzgCnARaZpPtTPGL2k6TPxZBGOtLKm7i62NPwlZquN8XlnMyn/4oSO6RYizckz8RTXlyTeVcHNpmmONwxjJnAjsB/W8DI/sAy40zTNVwYQoxdJ4klhV8sSPq+5Cactl72Kb5CVsoRIPEniKU5WMRNxpbVO65nmhBhmJImnOFnQWsSVJHAhhBg6ksSFEEKIJCVJXAghhEhSksSFEEKIJJUMHdsigDxoFUKIvtNIYy2lJcNkzRGsH8KGngoKIYRol0s8Fl0Qw1oytMSFEEII0Qm5zSKEEEIkKUniQgghRJKSJC6EEEIkKUniQgghRJKSJC6EEEIkKUniQgghRJKSJC6EEEIkKUniQgghRJKSJC6EEEIkKUniQgghRJKSJC6EEEIkKUniQgghRJKSJC6EEEIkqWRYijSpGYZRDlwGHAQcAGQDR5im+V6HcnnArcBJQAFgArebpvlMJ3X+EPgZMAWoAxYC15mm2dShnC1a7iKgHFgD3GKa5oI4nuKQMQzjQOBs4AhgHFADfABcb5rmug5lDwHuAPbHWsZ2AXCtaZotHcq5gZuAM7Gu+6fAL0zTfKeT4/eqzmQS72va25/3mPLHAzcCewFVwGNYP6OheJ3jUBuEa9rr+npbp0gd0hIffAZwDTAaWNFpAcNwAG8B5wHPAJcDG4G/RBN2bNnLgCeBSuAK4E/AucDLhmGoDlXfAtwOvAlcAmwBnjMM45S4nNnQuwbrj5y3sRLFw8DhwCeGYUxrK2QYxr7AO4AH6xo9ClyA9cusoyewrvfT0TojwOuGYRwcW6iPdSaTeF/THn/eY+r8NvASUIv18/kS8Cvg7oGc0DAQ72vaq/r6WKdIEdISH3xLgWLTNGsMwzgReLGTMicDBwJnmab55+i2Bw3DeAH4rWEYz5mmGYi2Gn8N/AP4lmmaGsAwjA+ARcAJWL8IMQxjFHAlcK9pmj+NbnsU+Cdwp2EYfzNNMzIYJzyI7gLmm6YZaNtgGMYC4DOsX3RnRzffitVaObzt7oRhGJuARwzD+KZpmv+IbpsFnApcbprmPdFtfwZWYv3xc2jMsXtVZxKK6zWldz/vbe4EPsH6WQ5H62wArjUM4z7TNNfG5xSHXLyvaW/r60udIkVIS3yQmabZaJpmTQ/FZgMaeL7D9ueAUqzbaADTgTxgQVsCjx7jFaAJmBfz2RMAJ/CHmHIaeBDrltysPp9Mgpmm+UHsL7LotrXAKmAagGEYucDRwJ87PF74M9Y1+kHMtlOAIFZrpa0+H9Yt3TnRW8N9rTOpxPua9vLnHcMw9sK6hf7HtgQe9Qes30sn9++MEm8QrmmP9fW1TpE6JIkPD24gBAQ6bG97hrV/TDmA1k7qaI0pB7Af0GCa5poO5T6O2Z/0oo8QyoBd0U0zsO4w/Te2XPSX4HJ2P+/9gNUd+xJgXSMF7NuPOpPeAK9pb7V9pmOd24Ft/axz2Ir3Ne2kvgHXKZKTJPHhwcRqNXdsHX8j+joy+roWq8U+O7aQYRgGUBJTDqyObJWdHGtHhzqT3enAKL66i1Eefd3RSdkd7HmNuipHTNm+1JkKBnJNe0uuqaW/59+xvnjUKZKQPBMfHp7B6tDzhGEYFwPrgGOAn0T3ZwCYprnLMIzngXMNwzCBl7H+I/8e67ZwRkydGYC/k2P5YutMZoZhTAUeAJYAT0U3t51XV+fen2vUlzqTWhyuaW/1VGdmP+ocluJ9Tbuob0B1iuQlLfFhwDTNSuB4rP9kb2H1TP8tVo9dsJ5ntbkAeA2rs8t6YDFWB5dFHcq18tXt91iemP1JyzCMEcCrWEPsvh/TSa/tvLo699jz7u016kudSStO17S35Jpa+nT+3dTX7zpFcpMkPkyYprkYqMB6bjUHq4X97+jutTHl6k3TPAGrc9phwHjTNM/EupUW25t3BzCik0O13XLbHtcTGELRMfWvY3Xy+1b0j6A2bbcSy/f4oLVte4eyXZUjpmxf6kxKcbymvSXX1NLr8++hvn7VKZKfJPFhxDTNsGmay03TfD/a2eqo6K49hoWYprnFNM3FpmluNgwjH5iJNT60zXIg1zCMKR0+elDM/qRjGIYH667DFGCuaZpmhyIrsToJHtDhcy6sjmrLYzYvB6YahpHdoY62a/RpP+pMOnG+pr3V9pmOdY7EGmPenzqHjXhf017U1+c6RWqQJD5MGYZRgjUG9O+maX7RQ/HbsCYp+WPMtpexnpO3PVdv69F6IdakLx/FNeAhYBiGHWvSioOxbiX+u2MZ0zTrsSbFOLNDcj4Ta/awhTHbXsDqUHhezDHcwDnA+9Ge0n2tM6kMwjXtFdM0VwGrgfOjMbS5COtn+a99rXO4iPc17U19fa1TpA6lte65lBgQwzCuj347DZgPPI713Ntrmub90TJLsDqqrMO6DX4B1h9Zh5imuTmmrl9E6/kI66/uE7E6wV1gmubDHY57B9a0qw9jDTs5EfguMM80zY5j0oc9wzDuwZqxahF7jqlvMk3zpWi5/bGmpVyJNQZ8NNbEN++apvmdDnU+j3Vd7sbqY3AW1sQ7R5im+X5MuV7XmUwG6Zr2+PMeLTcX+D+sO00LgL2Bi7HGjv+EJBXva9rb+vpSp0gd0jt9aPxvh/c/ir5uBtp+qS3FmoxhFFanlVeBX7a1BmOswJrI5YTo+2XAt03TfKOT4/48WtcFWK3LNVgzPyVdAo/aN/p6XPQr1mais9WZprnMMIyjsGZduxtr/uhHgGs7qfOHWP8+P8SaO30F8J3YBN6POpPJvtHXeF7T3vy8Y5rmK4ZhnATcgDXCohq4uZPPJ5t9o6/xuqa9qq+PdYoUIS1xIYQQIknJM3EhhBAiSUkSF0IIIZKUJHEhhBAiSUkSF0IIIZKUJHEhhBAiSUkSF0IIIZKUJHEhhBAiSUkSF0IIIZKUJHEhhBAiSUkSF0IIIZKUJHEhhgHDMJzR5SaFEKLXZAEUkVYMw/ge8DfgfNM0H+lk/yrADUw2TVMbhjEZ+BXW2u5FwHasJR1vNE2zOeZzU4FLgcOAsYAd+AJ40DTNRzsc40asRT/2Bs7FWvimHDgSeC+OpyuESHHSEhfpZhFQyVcra7UzDOPrwF7A49EEPhNrCddDsdZq/x/gFaxk/ZZhGM6Yjx8eLfcKcBXwS6z13B8xDKOrFaT+grVG9O+wlovcMdCTE0KkF2mJi7RimmbIMIw/AdcahrGXaZqfx+w+FwgDT0TfP46VWA80TbOxrZBhGO9gteZPjyn7lGmaD8UeyzCMu7HWyv65YRh3mqYZ7BCOFzjKNM1QPM5NCJF+pCUu0tEjgMZK2gAYhpEFzANeN01zu2EYM4CvAc8AbsMwitu+gCVAM3BM2+c73Fr3GIZRBBQCbwK5wNRO4rhHErgQYiAkiYu0Y5rmRuBt4MyYW+I/AHKAtufX06KvvwaqO3xVAVlAWVudhmFkG4Zxp2EYW4BWYFe07C3RIgWdhLImXuckhEhPcjtdpKuHsTqoHQ/8FatVXgm8Gt2voq+/A97ooo66mO+fAeZG610M1GDdmv8OcDmd/8Hc0v/whRBCkrhIXy9jtajPNQxjJTAbuD3m9vba6GvYNM23u6vIMIx8rAT+lGmaF3bYd1RcoxZCiBhyO12kpWgnsyeAb2EN9wJ4LKbIJ8BK4ELDMCo6ft4wDIdhGIXRt+Hoq+pQphw4L45hCyHEbqQlLtLZI1jDwU4D/mmaZlvrm+gQszOxepevMAzjcWAVkAlMAk4CrgWeME2z0TCMN4EzDMNoBf4DjAMuADZijS8XQoi4k5a4SFumaa4D3o2+fayT/cuB/YCnsZ6d/x64Hvg6Viv+nZjiZ2ANSTsOuB84EfgF8MBgxC6EEABKa53oGIRIGMMwXsOacGWkaZqtiY5HCCH6QlriIm0ZhjEJ65n405LAhRDJSJ6Ji7RjGMZBWOPALwUCWMPIhBAi6UhLXKSji7CeX+cCp5umuSmx4QghRP/IM3EhhBAiSUlLXAghhEhSksSFEEKIJCVJXAghhEhSksSFEEKIJCVJXAghhEhS/w9RkKJtOQJ4vQAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 432x216 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"(autos2\n",
" .assign(country=autos2.make.apply(country))\n",
" .groupby(['year', 'country'])\n",
" .mean()\n",
" #.std()\n",
" .unstack()\n",
" .city08\n",
" .plot()\n",
" .legend(bbox_to_anchor=(1,1))\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 73,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7f167dd8a6d0>"
]
},
"execution_count": 73,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x216 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# smoothe it out a bit w/ rolling\n",
"(autos2\n",
" .assign(country=autos2.make.apply(country))\n",
" .groupby(['year', 'country'])\n",
" .mean()\n",
" .unstack()\n",
" .city08\n",
" .rolling(3)\n",
" .mean()\n",
" .plot()\n",
" .legend(bbox_to_anchor=(1,1))\n",
")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"lines_to_next_cell": 2
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"lines_to_next_cell": 2
},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Summary\n",
"\n",
"* Correct types save space and enable convenient math, string, and date functionality\n",
"* Chaining operations will:\n",
" * Make code readable\n",
" * Remove bugs\n",
" * Easier to debug\n",
"* Don't mutate (there's no point). Embrace chaining.\n",
"* ``.apply`` is slow for math\n",
"* Aggregations are powerful. Play with them until they make sense\n",
"\n",
"Follow me on Twitter ``@__mharrison__``\n",
"\n",
"Idiomatic Pandas Workshop coming up\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"jupytext": {
"encoding": "# -*- coding: utf-8 -*-",
"formats": "ipynb,py:light"
},
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.5"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
@theAfricanQuant
Copy link

image
I am getting even after downgrading my pandas to "pandas==1.2.3"

@theAfricanQuant
Copy link

theAfricanQuant commented Feb 20, 2022

(autos [cols] .query('cylinders.isnull()', engine='python') )

The code above (chained of course) worked for me after some stackoverflowing. Thanks

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment