Skip to content

Instantly share code, notes, and snippets.

@adikamath
Created December 21, 2017 17:30
Show Gist options
  • Save adikamath/c1faad82b66c12e01a6a063b7a923012 to your computer and use it in GitHub Desktop.
Save adikamath/c1faad82b66c12e01a6a063b7a923012 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h2>Importing Data</h2>"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"#import required libraries\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"import datetime\n",
"plt.style.use('ggplot')\n",
"%matplotlib inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<p style=\"text-align:justify\">We're going to be using the year- 3 ( September 2015 - August 2016) bike share data from the Bay Area Bike Share website and here's the download <a href = \"https://s3.amazonaws.com/babs-open-data/babs_open_data_year_3.zip\">link</a>. Once downloaded, we are going to use the file named 201608_trip_data.csv. It contains data on bike share rides taken by people over a whole year. \n",
"\n",
"Pandas makes it easy to import data in the form of data frames and we do this using the .read_csv() method. It lets you submit a bunch of different parameters to customize the way you want your data to be handeled. In our case we will only use a few important ones.</p>"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Read the dataset into a pandas dataframe, first the file path and then define the type of seperator in the csv,\n",
"# In this case it is a comma separated values\n",
"mydata = pd.read_csv('201608_trip_data.csv', sep = ',')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now that we have imported the data as a data frame, let's get a quick summary about it."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"scrolled": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<class 'pandas.core.frame.DataFrame'>\n",
"RangeIndex: 313689 entries, 0 to 313688\n",
"Data columns (total 11 columns):\n",
"Trip ID 313689 non-null int64\n",
"Duration 313689 non-null int64\n",
"Start Date 313689 non-null object\n",
"Start Station 313689 non-null object\n",
"Start Terminal 313689 non-null int64\n",
"End Date 313689 non-null object\n",
"End Station 313689 non-null object\n",
"End Terminal 313689 non-null int64\n",
"Bike # 313689 non-null int64\n",
"Subscriber Type 313689 non-null object\n",
"Zip Code 313498 non-null object\n",
"dtypes: int64(5), object(6)\n",
"memory usage: 26.3+ MB\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Trip ID</th>\n",
" <th>Duration</th>\n",
" <th>Start Terminal</th>\n",
" <th>End Terminal</th>\n",
" <th>Bike #</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>3.136890e+05</td>\n",
" <td>313689.000000</td>\n",
" <td>313689.000000</td>\n",
" <td>313689.000000</td>\n",
" <td>313689.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>1.124350e+06</td>\n",
" <td>828.813870</td>\n",
" <td>58.695848</td>\n",
" <td>58.661043</td>\n",
" <td>414.204770</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>1.235891e+05</td>\n",
" <td>2384.403076</td>\n",
" <td>16.231539</td>\n",
" <td>16.266624</td>\n",
" <td>167.148791</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>9.134650e+05</td>\n",
" <td>60.000000</td>\n",
" <td>2.000000</td>\n",
" <td>2.000000</td>\n",
" <td>9.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>1.015993e+06</td>\n",
" <td>354.000000</td>\n",
" <td>50.000000</td>\n",
" <td>50.000000</td>\n",
" <td>313.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>1.123581e+06</td>\n",
" <td>519.000000</td>\n",
" <td>62.000000</td>\n",
" <td>62.000000</td>\n",
" <td>427.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>1.231897e+06</td>\n",
" <td>735.000000</td>\n",
" <td>70.000000</td>\n",
" <td>70.000000</td>\n",
" <td>538.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>1.338408e+06</td>\n",
" <td>86325.000000</td>\n",
" <td>91.000000</td>\n",
" <td>91.000000</td>\n",
" <td>878.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Trip ID Duration Start Terminal End Terminal \\\n",
"count 3.136890e+05 313689.000000 313689.000000 313689.000000 \n",
"mean 1.124350e+06 828.813870 58.695848 58.661043 \n",
"std 1.235891e+05 2384.403076 16.231539 16.266624 \n",
"min 9.134650e+05 60.000000 2.000000 2.000000 \n",
"25% 1.015993e+06 354.000000 50.000000 50.000000 \n",
"50% 1.123581e+06 519.000000 62.000000 62.000000 \n",
"75% 1.231897e+06 735.000000 70.000000 70.000000 \n",
"max 1.338408e+06 86325.000000 91.000000 91.000000 \n",
"\n",
" Bike # \n",
"count 313689.000000 \n",
"mean 414.204770 \n",
"std 167.148791 \n",
"min 9.000000 \n",
"25% 313.000000 \n",
"50% 427.000000 \n",
"75% 538.000000 \n",
"max 878.000000 "
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Let's use some methods to get a better idea of the data set that we just imported.\n",
"mydata.info()\n",
"mydata.describe()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<p style=\"text-align:justify\">From the .info() method we can see the total length of the data frame - 313,689 entries and you can also see the 11 columns of the data frame, total values in each of them, whether they are null or not (in this case, we don't have any) and also the data type of the vlaues in each column. We can see many of the columns have integer data type but some like the dates are objects, we need to fix this and convert them to the python datetime format. We can change that in the next bit. The .describe() method gives you some essential statistics about the data. In this case these statistics make the most sense for the Duration column. It shows us that the average trip duration is 58.69 seconds.</p>\n",
"<p></p>\n",
"<p style=\"text-align:justify\">The .to_datetime() method can be used to values to the datetime format. Depending on how your date and time values are formatted, you can specify arguements in this method to parse the dates accordingly. In our case here this conversion is pretty much straightforward</p>"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"#Convert Dates to datetime format & some other columsn to the appropriate data types\n",
"mydata['Start Date'] = pd.to_datetime(mydata['Start Date'])\n",
"mydata['End Date'] = pd.to_datetime(mydata['End Date'])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's quickly have a peek at the first few entries using the .head() method...specifying in parenthisis, how many entries/rows you want to see."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Trip ID</th>\n",
" <th>Duration</th>\n",
" <th>Start Date</th>\n",
" <th>Start Station</th>\n",
" <th>Start Terminal</th>\n",
" <th>End Date</th>\n",
" <th>End Station</th>\n",
" <th>End Terminal</th>\n",
" <th>Bike #</th>\n",
" <th>Subscriber Type</th>\n",
" <th>Zip Code</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>913465</td>\n",
" <td>746</td>\n",
" <td>9/1/2015 0:10</td>\n",
" <td>San Francisco Caltrain 2 (330 Townsend)</td>\n",
" <td>69</td>\n",
" <td>9/1/2015 0:23</td>\n",
" <td>San Francisco City Hall</td>\n",
" <td>58</td>\n",
" <td>238</td>\n",
" <td>Subscriber</td>\n",
" <td>94107</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>913466</td>\n",
" <td>969</td>\n",
" <td>9/1/2015 0:15</td>\n",
" <td>Clay at Battery</td>\n",
" <td>41</td>\n",
" <td>9/1/2015 0:31</td>\n",
" <td>Washington at Kearny</td>\n",
" <td>46</td>\n",
" <td>16</td>\n",
" <td>Subscriber</td>\n",
" <td>94133</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>913467</td>\n",
" <td>233</td>\n",
" <td>9/1/2015 0:15</td>\n",
" <td>Davis at Jackson</td>\n",
" <td>42</td>\n",
" <td>9/1/2015 0:19</td>\n",
" <td>Commercial at Montgomery</td>\n",
" <td>45</td>\n",
" <td>534</td>\n",
" <td>Subscriber</td>\n",
" <td>94111</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Trip ID Duration Start Date Start Station \\\n",
"0 913465 746 9/1/2015 0:10 San Francisco Caltrain 2 (330 Townsend) \n",
"1 913466 969 9/1/2015 0:15 Clay at Battery \n",
"2 913467 233 9/1/2015 0:15 Davis at Jackson \n",
"\n",
" Start Terminal End Date End Station End Terminal \\\n",
"0 69 9/1/2015 0:23 San Francisco City Hall 58 \n",
"1 41 9/1/2015 0:31 Washington at Kearny 46 \n",
"2 42 9/1/2015 0:19 Commercial at Montgomery 45 \n",
"\n",
" Bike # Subscriber Type Zip Code \n",
"0 238 Subscriber 94107 \n",
"1 16 Subscriber 94133 \n",
"2 534 Subscriber 94111 "
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mydata.head(3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h2>Subsetting Dataframes</h2>\n",
"\n",
"<p style=\"text-align:justify\">There are several ways that you can subset a dataframe in pandas. First off we look at the regular subsetting method by specifying the range in the brackets. Using this method, you can not only get subsets with all columns, but even conditional subsetting for specific columns as we shall see below.</p>"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Trip ID</th>\n",
" <th>Duration</th>\n",
" <th>Start Date</th>\n",
" <th>Start Station</th>\n",
" <th>Start Terminal</th>\n",
" <th>End Date</th>\n",
" <th>End Station</th>\n",
" <th>End Terminal</th>\n",
" <th>Bike #</th>\n",
" <th>Subscriber Type</th>\n",
" <th>Zip Code</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>913470</td>\n",
" <td>623</td>\n",
" <td>9/1/2015 1:36</td>\n",
" <td>San Jose Diridon Caltrain Station</td>\n",
" <td>2</td>\n",
" <td>9/1/2015 1:47</td>\n",
" <td>Japantown</td>\n",
" <td>9</td>\n",
" <td>261</td>\n",
" <td>Subscriber</td>\n",
" <td>95112</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>913471</td>\n",
" <td>746</td>\n",
" <td>9/1/2015 2:15</td>\n",
" <td>Embarcadero at Bryant</td>\n",
" <td>54</td>\n",
" <td>9/1/2015 2:27</td>\n",
" <td>Powell Street BART</td>\n",
" <td>39</td>\n",
" <td>436</td>\n",
" <td>Subscriber</td>\n",
" <td>94103</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>913472</td>\n",
" <td>1038</td>\n",
" <td>9/1/2015 3:38</td>\n",
" <td>Townsend at 7th</td>\n",
" <td>65</td>\n",
" <td>9/1/2015 3:56</td>\n",
" <td>Howard at 2nd</td>\n",
" <td>63</td>\n",
" <td>607</td>\n",
" <td>Subscriber</td>\n",
" <td>94107</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Trip ID Duration Start Date Start Station \\\n",
"5 913470 623 9/1/2015 1:36 San Jose Diridon Caltrain Station \n",
"6 913471 746 9/1/2015 2:15 Embarcadero at Bryant \n",
"7 913472 1038 9/1/2015 3:38 Townsend at 7th \n",
"\n",
" Start Terminal End Date End Station End Terminal Bike # \\\n",
"5 2 9/1/2015 1:47 Japantown 9 261 \n",
"6 54 9/1/2015 2:27 Powell Street BART 39 436 \n",
"7 65 9/1/2015 3:56 Howard at 2nd 63 607 \n",
"\n",
" Subscriber Type Zip Code \n",
"5 Subscriber 95112 \n",
"6 Subscriber 94103 \n",
"7 Subscriber 94107 "
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mydata[5:8] # To look at the entries in the data frame from 5 to 8"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"10 2nd at Folsom\n",
"11 Davis at Jackson\n",
"12 Powell Street BART\n",
"Name: Start Station, dtype: object"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Do the same but with a specific column\n",
"mydata['Start Station'][10:13]"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Start Date</th>\n",
" <th>Start Station</th>\n",
" <th>Duration</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>9/1/2015 1:36</td>\n",
" <td>San Jose Diridon Caltrain Station</td>\n",
" <td>623</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>9/1/2015 2:15</td>\n",
" <td>Embarcadero at Bryant</td>\n",
" <td>746</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>9/1/2015 3:38</td>\n",
" <td>Townsend at 7th</td>\n",
" <td>1038</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Start Date Start Station Duration\n",
"5 9/1/2015 1:36 San Jose Diridon Caltrain Station 623\n",
"6 9/1/2015 2:15 Embarcadero at Bryant 746\n",
"7 9/1/2015 3:38 Townsend at 7th 1038"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Or subset the dataframes selected columns on specific entries like below\n",
"mydata[['Start Date', 'Start Station', 'Duration']][5:8]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<p style=\"text-align:justify\">You can perform conditional subsetting of the data frame by putting in either single or multiple conditions within the brackets while subsetting. Some examples are shown below.</p>"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Trip ID</th>\n",
" <th>Duration</th>\n",
" <th>Start Date</th>\n",
" <th>Start Station</th>\n",
" <th>Start Terminal</th>\n",
" <th>End Date</th>\n",
" <th>End Station</th>\n",
" <th>End Terminal</th>\n",
" <th>Bike #</th>\n",
" <th>Subscriber Type</th>\n",
" <th>Zip Code</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>913472</td>\n",
" <td>1038</td>\n",
" <td>9/1/2015 3:38</td>\n",
" <td>Townsend at 7th</td>\n",
" <td>65</td>\n",
" <td>9/1/2015 3:56</td>\n",
" <td>Howard at 2nd</td>\n",
" <td>63</td>\n",
" <td>607</td>\n",
" <td>Subscriber</td>\n",
" <td>94107</td>\n",
" </tr>\n",
" <tr>\n",
" <th>44</th>\n",
" <td>913517</td>\n",
" <td>4238</td>\n",
" <td>9/1/2015 6:50</td>\n",
" <td>San Francisco Caltrain (Townsend at 4th)</td>\n",
" <td>70</td>\n",
" <td>9/1/2015 8:00</td>\n",
" <td>Townsend at 7th</td>\n",
" <td>65</td>\n",
" <td>422</td>\n",
" <td>Subscriber</td>\n",
" <td>95122</td>\n",
" </tr>\n",
" <tr>\n",
" <th>57</th>\n",
" <td>913531</td>\n",
" <td>1032</td>\n",
" <td>9/1/2015 7:06</td>\n",
" <td>San Francisco Caltrain (Townsend at 4th)</td>\n",
" <td>70</td>\n",
" <td>9/1/2015 7:23</td>\n",
" <td>Embarcadero at Sansome</td>\n",
" <td>60</td>\n",
" <td>277</td>\n",
" <td>Subscriber</td>\n",
" <td>94085</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Trip ID Duration Start Date \\\n",
"7 913472 1038 9/1/2015 3:38 \n",
"44 913517 4238 9/1/2015 6:50 \n",
"57 913531 1032 9/1/2015 7:06 \n",
"\n",
" Start Station Start Terminal End Date \\\n",
"7 Townsend at 7th 65 9/1/2015 3:56 \n",
"44 San Francisco Caltrain (Townsend at 4th) 70 9/1/2015 8:00 \n",
"57 San Francisco Caltrain (Townsend at 4th) 70 9/1/2015 7:23 \n",
"\n",
" End Station End Terminal Bike # Subscriber Type Zip Code \n",
"7 Howard at 2nd 63 607 Subscriber 94107 \n",
"44 Townsend at 7th 65 422 Subscriber 95122 \n",
"57 Embarcadero at Sansome 60 277 Subscriber 94085 "
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# To look at the first 3 entries in the dataframe where the duration of the trips is above 1000 seconds.\n",
"mydata[mydata['Duration'] > 1000][:3]"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Trip ID</th>\n",
" <th>Duration</th>\n",
" <th>Start Date</th>\n",
" <th>Start Station</th>\n",
" <th>Start Terminal</th>\n",
" <th>End Date</th>\n",
" <th>End Station</th>\n",
" <th>End Terminal</th>\n",
" <th>Bike #</th>\n",
" <th>Subscriber Type</th>\n",
" <th>Zip Code</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>44</th>\n",
" <td>913517</td>\n",
" <td>4238</td>\n",
" <td>9/1/2015 6:50</td>\n",
" <td>San Francisco Caltrain (Townsend at 4th)</td>\n",
" <td>70</td>\n",
" <td>9/1/2015 8:00</td>\n",
" <td>Townsend at 7th</td>\n",
" <td>65</td>\n",
" <td>422</td>\n",
" <td>Subscriber</td>\n",
" <td>95122</td>\n",
" </tr>\n",
" <tr>\n",
" <th>57</th>\n",
" <td>913531</td>\n",
" <td>1032</td>\n",
" <td>9/1/2015 7:06</td>\n",
" <td>San Francisco Caltrain (Townsend at 4th)</td>\n",
" <td>70</td>\n",
" <td>9/1/2015 7:23</td>\n",
" <td>Embarcadero at Sansome</td>\n",
" <td>60</td>\n",
" <td>277</td>\n",
" <td>Subscriber</td>\n",
" <td>94085</td>\n",
" </tr>\n",
" <tr>\n",
" <th>768</th>\n",
" <td>914430</td>\n",
" <td>1547</td>\n",
" <td>9/1/2015 14:54</td>\n",
" <td>San Francisco Caltrain (Townsend at 4th)</td>\n",
" <td>70</td>\n",
" <td>9/1/2015 15:20</td>\n",
" <td>South Van Ness at Market</td>\n",
" <td>66</td>\n",
" <td>260</td>\n",
" <td>Customer</td>\n",
" <td>94131</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Trip ID Duration Start Date \\\n",
"44 913517 4238 9/1/2015 6:50 \n",
"57 913531 1032 9/1/2015 7:06 \n",
"768 914430 1547 9/1/2015 14:54 \n",
"\n",
" Start Station Start Terminal End Date \\\n",
"44 San Francisco Caltrain (Townsend at 4th) 70 9/1/2015 8:00 \n",
"57 San Francisco Caltrain (Townsend at 4th) 70 9/1/2015 7:23 \n",
"768 San Francisco Caltrain (Townsend at 4th) 70 9/1/2015 15:20 \n",
"\n",
" End Station End Terminal Bike # Subscriber Type Zip Code \n",
"44 Townsend at 7th 65 422 Subscriber 95122 \n",
"57 Embarcadero at Sansome 60 277 Subscriber 94085 \n",
"768 South Van Ness at Market 66 260 Customer 94131 "
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Example of subsetting with multiple conditions- first 3 entries of trips from Start Station 70 and those that are \n",
"# above a 1000 seconds\n",
"mydata[(mydata['Duration'] > 1000) & (mydata['Start Terminal'] == 70)][:3]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<p style=\"text-align:justify\">Indexes in python are extermely useful in advanced subsetting of data frames. Here let's look at doing some basic subsetting using the .loc[] and .iloc[] methods. The Pandas documentation [here](http://pandas.pydata.org/pandas-docs/stable/indexing.html) refers to indexes as metadata that act as indicators for aligning the data in the data frame and that can be used for subsetting and visualization among other uses. Basically, indexes can be integers that are ordered or just label information. Let's take a look at how the index in our data frame looks.</p>"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<class 'pandas.core.frame.DataFrame'>\n",
"RangeIndex: 313689 entries, 0 to 313688\n",
"Data columns (total 11 columns):\n",
"Trip ID 313689 non-null int64\n",
"Duration 313689 non-null int64\n",
"Start Date 313689 non-null object\n",
"Start Station 313689 non-null object\n",
"Start Terminal 313689 non-null int64\n",
"End Date 313689 non-null object\n",
"End Station 313689 non-null object\n",
"End Terminal 313689 non-null int64\n",
"Bike # 313689 non-null int64\n",
"Subscriber Type 313689 non-null object\n",
"Zip Code 313498 non-null object\n",
"dtypes: int64(5), object(6)\n",
"memory usage: 26.3+ MB\n"
]
}
],
"source": [
"mydata.info()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<p style=\"text-align:justify\">Using the .info() method, we can see that we have a integer index that ranges from 0 to 313688. But what if we want to change the index of our data frame and instead use label indexes? We can easily do that using the .set_index() method. To make the Trip ID as the index follow the step shown below.</p>"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Duration</th>\n",
" <th>Start Date</th>\n",
" <th>Start Station</th>\n",
" <th>Start Terminal</th>\n",
" <th>End Date</th>\n",
" <th>End Station</th>\n",
" <th>End Terminal</th>\n",
" <th>Bike #</th>\n",
" <th>Subscriber Type</th>\n",
" <th>Zip Code</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Trip ID</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>913465</th>\n",
" <td>746</td>\n",
" <td>9/1/2015 0:10</td>\n",
" <td>San Francisco Caltrain 2 (330 Townsend)</td>\n",
" <td>69</td>\n",
" <td>9/1/2015 0:23</td>\n",
" <td>San Francisco City Hall</td>\n",
" <td>58</td>\n",
" <td>238</td>\n",
" <td>Subscriber</td>\n",
" <td>94107</td>\n",
" </tr>\n",
" <tr>\n",
" <th>913466</th>\n",
" <td>969</td>\n",
" <td>9/1/2015 0:15</td>\n",
" <td>Clay at Battery</td>\n",
" <td>41</td>\n",
" <td>9/1/2015 0:31</td>\n",
" <td>Washington at Kearny</td>\n",
" <td>46</td>\n",
" <td>16</td>\n",
" <td>Subscriber</td>\n",
" <td>94133</td>\n",
" </tr>\n",
" <tr>\n",
" <th>913467</th>\n",
" <td>233</td>\n",
" <td>9/1/2015 0:15</td>\n",
" <td>Davis at Jackson</td>\n",
" <td>42</td>\n",
" <td>9/1/2015 0:19</td>\n",
" <td>Commercial at Montgomery</td>\n",
" <td>45</td>\n",
" <td>534</td>\n",
" <td>Subscriber</td>\n",
" <td>94111</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Duration Start Date Start Station \\\n",
"Trip ID \n",
"913465 746 9/1/2015 0:10 San Francisco Caltrain 2 (330 Townsend) \n",
"913466 969 9/1/2015 0:15 Clay at Battery \n",
"913467 233 9/1/2015 0:15 Davis at Jackson \n",
"\n",
" Start Terminal End Date End Station \\\n",
"Trip ID \n",
"913465 69 9/1/2015 0:23 San Francisco City Hall \n",
"913466 41 9/1/2015 0:31 Washington at Kearny \n",
"913467 42 9/1/2015 0:19 Commercial at Montgomery \n",
"\n",
" End Terminal Bike # Subscriber Type Zip Code \n",
"Trip ID \n",
"913465 58 238 Subscriber 94107 \n",
"913466 46 16 Subscriber 94133 \n",
"913467 45 534 Subscriber 94111 "
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# First make a copy of the mydata data frame as mydata2 using the .copy() method\n",
"mydata2 = mydata.copy()\n",
"\n",
"#Then set the Trip ID as the index using the keys parameter and use .head() to view the results\n",
"mydata2 = mydata2.set_index(keys = 'Trip ID')\n",
"mydata2.head(3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<p style=\"text-align:justify\">We can now see that the Trip ID is no longer a column but has taken the pace of our old index. To see the difference in the way the two types of indexes are used, we will look at subsetting. Let's start with the .iloc[] which is integer index-based subsetting. So naturally we use our original data frame mydata. </p>"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Trip ID</th>\n",
" <th>Duration</th>\n",
" <th>Start Date</th>\n",
" <th>Start Station</th>\n",
" <th>Start Terminal</th>\n",
" <th>End Date</th>\n",
" <th>End Station</th>\n",
" <th>End Terminal</th>\n",
" <th>Bike #</th>\n",
" <th>Subscriber Type</th>\n",
" <th>Zip Code</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>913473</td>\n",
" <td>424</td>\n",
" <td>9/1/2015 4:23</td>\n",
" <td>Market at 10th</td>\n",
" <td>67</td>\n",
" <td>9/1/2015 4:30</td>\n",
" <td>Townsend at 7th</td>\n",
" <td>65</td>\n",
" <td>259</td>\n",
" <td>Subscriber</td>\n",
" <td>94102</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>913474</td>\n",
" <td>633</td>\n",
" <td>9/1/2015 4:57</td>\n",
" <td>Embarcadero at Bryant</td>\n",
" <td>54</td>\n",
" <td>9/1/2015 5:08</td>\n",
" <td>Embarcadero at Sansome</td>\n",
" <td>60</td>\n",
" <td>613</td>\n",
" <td>Subscriber</td>\n",
" <td>94105</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>913475</td>\n",
" <td>174</td>\n",
" <td>9/1/2015 4:58</td>\n",
" <td>2nd at Folsom</td>\n",
" <td>62</td>\n",
" <td>9/1/2015 5:01</td>\n",
" <td>Market at Sansome</td>\n",
" <td>77</td>\n",
" <td>449</td>\n",
" <td>Subscriber</td>\n",
" <td>94107</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>913476</td>\n",
" <td>777</td>\n",
" <td>9/1/2015 5:02</td>\n",
" <td>Davis at Jackson</td>\n",
" <td>42</td>\n",
" <td>9/1/2015 5:15</td>\n",
" <td>San Francisco Caltrain (Townsend at 4th)</td>\n",
" <td>70</td>\n",
" <td>86</td>\n",
" <td>Subscriber</td>\n",
" <td>94111</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Trip ID Duration Start Date Start Station Start Terminal \\\n",
"8 913473 424 9/1/2015 4:23 Market at 10th 67 \n",
"9 913474 633 9/1/2015 4:57 Embarcadero at Bryant 54 \n",
"10 913475 174 9/1/2015 4:58 2nd at Folsom 62 \n",
"11 913476 777 9/1/2015 5:02 Davis at Jackson 42 \n",
"\n",
" End Date End Station End Terminal \\\n",
"8 9/1/2015 4:30 Townsend at 7th 65 \n",
"9 9/1/2015 5:08 Embarcadero at Sansome 60 \n",
"10 9/1/2015 5:01 Market at Sansome 77 \n",
"11 9/1/2015 5:15 San Francisco Caltrain (Townsend at 4th) 70 \n",
"\n",
" Bike # Subscriber Type Zip Code \n",
"8 259 Subscriber 94102 \n",
"9 613 Subscriber 94105 \n",
"10 449 Subscriber 94107 \n",
"11 86 Subscriber 94111 "
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Let's look at subsetting all entries in mydata from 8 to 11\n",
"## Note that the ending index in the range is not included so we need to enter it as 12\n",
"mydata.iloc[8:12]"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Trip ID</th>\n",
" <th>Duration</th>\n",
" <th>Start Date</th>\n",
" <th>Start Station</th>\n",
" <th>Start Terminal</th>\n",
" <th>End Date</th>\n",
" <th>End Station</th>\n",
" <th>End Terminal</th>\n",
" <th>Bike #</th>\n",
" <th>Subscriber Type</th>\n",
" <th>Zip Code</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>913466</td>\n",
" <td>969</td>\n",
" <td>9/1/2015 0:15</td>\n",
" <td>Clay at Battery</td>\n",
" <td>41</td>\n",
" <td>9/1/2015 0:31</td>\n",
" <td>Washington at Kearny</td>\n",
" <td>46</td>\n",
" <td>16</td>\n",
" <td>Subscriber</td>\n",
" <td>94133</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>913468</td>\n",
" <td>213</td>\n",
" <td>9/1/2015 1:29</td>\n",
" <td>Clay at Battery</td>\n",
" <td>41</td>\n",
" <td>9/1/2015 1:32</td>\n",
" <td>Steuart at Market</td>\n",
" <td>74</td>\n",
" <td>312</td>\n",
" <td>Subscriber</td>\n",
" <td>94107</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>913470</td>\n",
" <td>623</td>\n",
" <td>9/1/2015 1:36</td>\n",
" <td>San Jose Diridon Caltrain Station</td>\n",
" <td>2</td>\n",
" <td>9/1/2015 1:47</td>\n",
" <td>Japantown</td>\n",
" <td>9</td>\n",
" <td>261</td>\n",
" <td>Subscriber</td>\n",
" <td>95112</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Trip ID Duration Start Date Start Station \\\n",
"1 913466 969 9/1/2015 0:15 Clay at Battery \n",
"3 913468 213 9/1/2015 1:29 Clay at Battery \n",
"5 913470 623 9/1/2015 1:36 San Jose Diridon Caltrain Station \n",
"\n",
" Start Terminal End Date End Station End Terminal Bike # \\\n",
"1 41 9/1/2015 0:31 Washington at Kearny 46 16 \n",
"3 41 9/1/2015 1:32 Steuart at Market 74 312 \n",
"5 2 9/1/2015 1:47 Japantown 9 261 \n",
"\n",
" Subscriber Type Zip Code \n",
"1 Subscriber 94133 \n",
"3 Subscriber 94107 \n",
"5 Subscriber 95112 "
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Select multiple entries like so\n",
"mydata.iloc[[1,3,5]]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<p style=\"text-align:justify\">What happens if we try specifying an index range that isn't integer-location based? Well you will only get an empty subset like below since you cannot index the data frame using .iloc[]</p>"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Trip ID</th>\n",
" <th>Duration</th>\n",
" <th>Start Date</th>\n",
" <th>Start Station</th>\n",
" <th>Start Terminal</th>\n",
" <th>End Date</th>\n",
" <th>End Station</th>\n",
" <th>End Terminal</th>\n",
" <th>Bike #</th>\n",
" <th>Subscriber Type</th>\n",
" <th>Zip Code</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"Empty DataFrame\n",
"Columns: [Trip ID, Duration, Start Date, Start Station, Start Terminal, End Date, End Station, End Terminal, Bike #, Subscriber Type, Zip Code]\n",
"Index: []"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mydata.iloc[913465: 913468]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Switching over to .loc[], we can now index based on the labels and for this we need to use the mydata2 data frame."
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Duration</th>\n",
" <th>Start Date</th>\n",
" <th>Start Station</th>\n",
" <th>Start Terminal</th>\n",
" <th>End Date</th>\n",
" <th>End Station</th>\n",
" <th>End Terminal</th>\n",
" <th>Bike #</th>\n",
" <th>Subscriber Type</th>\n",
" <th>Zip Code</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Trip ID</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>913465</th>\n",
" <td>746</td>\n",
" <td>9/1/2015 0:10</td>\n",
" <td>San Francisco Caltrain 2 (330 Townsend)</td>\n",
" <td>69</td>\n",
" <td>9/1/2015 0:23</td>\n",
" <td>San Francisco City Hall</td>\n",
" <td>58</td>\n",
" <td>238</td>\n",
" <td>Subscriber</td>\n",
" <td>94107</td>\n",
" </tr>\n",
" <tr>\n",
" <th>913468</th>\n",
" <td>213</td>\n",
" <td>9/1/2015 1:29</td>\n",
" <td>Clay at Battery</td>\n",
" <td>41</td>\n",
" <td>9/1/2015 1:32</td>\n",
" <td>Steuart at Market</td>\n",
" <td>74</td>\n",
" <td>312</td>\n",
" <td>Subscriber</td>\n",
" <td>94107</td>\n",
" </tr>\n",
" <tr>\n",
" <th>915765</th>\n",
" <td>283</td>\n",
" <td>9/2/2015 8:53</td>\n",
" <td>Market at Sansome</td>\n",
" <td>77</td>\n",
" <td>9/2/2015 8:58</td>\n",
" <td>2nd at Folsom</td>\n",
" <td>62</td>\n",
" <td>277</td>\n",
" <td>Subscriber</td>\n",
" <td>94612</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Duration Start Date Start Station \\\n",
"Trip ID \n",
"913465 746 9/1/2015 0:10 San Francisco Caltrain 2 (330 Townsend) \n",
"913468 213 9/1/2015 1:29 Clay at Battery \n",
"915765 283 9/2/2015 8:53 Market at Sansome \n",
"\n",
" Start Terminal End Date End Station End Terminal \\\n",
"Trip ID \n",
"913465 69 9/1/2015 0:23 San Francisco City Hall 58 \n",
"913468 41 9/1/2015 1:32 Steuart at Market 74 \n",
"915765 77 9/2/2015 8:58 2nd at Folsom 62 \n",
"\n",
" Bike # Subscriber Type Zip Code \n",
"Trip ID \n",
"913465 238 Subscriber 94107 \n",
"913468 312 Subscriber 94107 \n",
"915765 277 Subscriber 94612 "
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mydata2.loc[[913465, 913468, 915765]]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"And if you want to reset the index back to what it was originally, just use .reset_index()."
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Trip ID</th>\n",
" <th>Duration</th>\n",
" <th>Start Date</th>\n",
" <th>Start Station</th>\n",
" <th>Start Terminal</th>\n",
" <th>End Date</th>\n",
" <th>End Station</th>\n",
" <th>End Terminal</th>\n",
" <th>Bike #</th>\n",
" <th>Subscriber Type</th>\n",
" <th>Zip Code</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>913465</td>\n",
" <td>746</td>\n",
" <td>9/1/2015 0:10</td>\n",
" <td>San Francisco Caltrain 2 (330 Townsend)</td>\n",
" <td>69</td>\n",
" <td>9/1/2015 0:23</td>\n",
" <td>San Francisco City Hall</td>\n",
" <td>58</td>\n",
" <td>238</td>\n",
" <td>Subscriber</td>\n",
" <td>94107</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>913466</td>\n",
" <td>969</td>\n",
" <td>9/1/2015 0:15</td>\n",
" <td>Clay at Battery</td>\n",
" <td>41</td>\n",
" <td>9/1/2015 0:31</td>\n",
" <td>Washington at Kearny</td>\n",
" <td>46</td>\n",
" <td>16</td>\n",
" <td>Subscriber</td>\n",
" <td>94133</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Trip ID Duration Start Date Start Station \\\n",
"0 913465 746 9/1/2015 0:10 San Francisco Caltrain 2 (330 Townsend) \n",
"1 913466 969 9/1/2015 0:15 Clay at Battery \n",
"\n",
" Start Terminal End Date End Station End Terminal \\\n",
"0 69 9/1/2015 0:23 San Francisco City Hall 58 \n",
"1 41 9/1/2015 0:31 Washington at Kearny 46 \n",
"\n",
" Bike # Subscriber Type Zip Code \n",
"0 238 Subscriber 94107 \n",
"1 16 Subscriber 94133 "
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mydata2 = mydata2.reset_index()\n",
"mydata2.head(2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h2>Groups and Operations</h2>\n",
"\n",
"<p style=\"text-align:justify\">Often time in data analysis you will want to perform some mathematical operations on groups based on some labels from the data set. In pandas, .groupby() allows you to perform such grouping operations on your data frame. Let's try out some of these operations on the [Automobile](https://archive.ics.uci.edu/ml/machine-learning-databases/autos/) dataset from the UCI Machine Learning Repository. Using the link download the imports-85.data, rename it with a .txt file extension. I've already created a list below with the names of the columns so follow the steps below to read the data into a data frame with the column names. Now assume that you are a car dealer and this particular data set contains data about the inventory of cars that you hold at your dealership. Let's find out some of the type of questions that pandas can help you answer about your cars.</p>\n",
"\n",
"<p style=\"text-align:justify\">First use pd.read_csv() to read in the imports-85.txt. Note that I've specified the na_values parameter equal to ?. This is to convert all the ? (which I found during some prelimnary analysis) values to NA. After reading it in as the auto data frame, get some information about the file using .info().</p>"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"## Column hearders for our data set\n",
"names_cars = ['symboling','losses','make','type','aspiration','doors','style','wheels','location','base','length','width','height','curb-weight','engine-type',\n",
" 'num-of-cylinders','engine-size','fuel-system','bore','stroke','compression-ratio','horsepower','peak-rpm','city-mpg','highway-mpg','price']\n",
"\n",
"## Read in the text file as a data frame\n",
"# We use 'na_values' parameter here to define all occurences of '?' in the file as na values\n",
"auto = pd.read_csv('imports-85.txt', sep = ',', names = names_cars, na_values = '?')\n"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<class 'pandas.core.frame.DataFrame'>\n",
"RangeIndex: 205 entries, 0 to 204\n",
"Data columns (total 26 columns):\n",
"symboling 205 non-null int64\n",
"losses 164 non-null float64\n",
"make 205 non-null object\n",
"type 205 non-null object\n",
"aspiration 205 non-null object\n",
"doors 203 non-null object\n",
"style 205 non-null object\n",
"wheels 205 non-null object\n",
"location 205 non-null object\n",
"base 205 non-null float64\n",
"length 205 non-null float64\n",
"width 205 non-null float64\n",
"height 205 non-null float64\n",
"curb-weight 205 non-null int64\n",
"engine-type 205 non-null object\n",
"num-of-cylinders 205 non-null object\n",
"engine-size 205 non-null int64\n",
"fuel-system 205 non-null object\n",
"bore 201 non-null float64\n",
"stroke 201 non-null float64\n",
"compression-ratio 205 non-null float64\n",
"horsepower 203 non-null float64\n",
"peak-rpm 203 non-null float64\n",
"city-mpg 205 non-null int64\n",
"highway-mpg 205 non-null int64\n",
"price 201 non-null float64\n",
"dtypes: float64(11), int64(5), object(10)\n",
"memory usage: 41.7+ KB\n"
]
}
],
"source": [
"## Get a summary of the data frame, we can see that there are a few na values\n",
"auto.info()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<p style=\"text-align:justify\">Some quick observations- you see that there are 26 columns with 205 entries in each. Many columns have NA values. We don't want to include them in our calculations as we perform operations so we use .dropna() to delete all rows that contain NA values in any of their columns. In the parameters, axis = 0 means that we want to delete any columns that have NA values in them.</p>\n",
"\n",
"<p style=\"text-align:justify\">Since we mess up our index due to many rows being deleted, let's use .reset_index() to reset our index and reassign it to our data frame auto. Make sure you specify the parameter drop = True so that you delete the old index instead of making it a new column. Check to make sure all this works. You should be able to see that the index starts from 0 again.</p>"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>symboling</th>\n",
" <th>losses</th>\n",
" <th>make</th>\n",
" <th>type</th>\n",
" <th>aspiration</th>\n",
" <th>doors</th>\n",
" <th>style</th>\n",
" <th>wheels</th>\n",
" <th>location</th>\n",
" <th>base</th>\n",
" <th>...</th>\n",
" <th>engine-size</th>\n",
" <th>fuel-system</th>\n",
" <th>bore</th>\n",
" <th>stroke</th>\n",
" <th>compression-ratio</th>\n",
" <th>horsepower</th>\n",
" <th>peak-rpm</th>\n",
" <th>city-mpg</th>\n",
" <th>highway-mpg</th>\n",
" <th>price</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2</td>\n",
" <td>164.0</td>\n",
" <td>audi</td>\n",
" <td>gas</td>\n",
" <td>std</td>\n",
" <td>four</td>\n",
" <td>sedan</td>\n",
" <td>fwd</td>\n",
" <td>front</td>\n",
" <td>99.8</td>\n",
" <td>...</td>\n",
" <td>109</td>\n",
" <td>mpfi</td>\n",
" <td>3.19</td>\n",
" <td>3.4</td>\n",
" <td>10.0</td>\n",
" <td>102.0</td>\n",
" <td>5500.0</td>\n",
" <td>24</td>\n",
" <td>30</td>\n",
" <td>13950.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>164.0</td>\n",
" <td>audi</td>\n",
" <td>gas</td>\n",
" <td>std</td>\n",
" <td>four</td>\n",
" <td>sedan</td>\n",
" <td>4wd</td>\n",
" <td>front</td>\n",
" <td>99.4</td>\n",
" <td>...</td>\n",
" <td>136</td>\n",
" <td>mpfi</td>\n",
" <td>3.19</td>\n",
" <td>3.4</td>\n",
" <td>8.0</td>\n",
" <td>115.0</td>\n",
" <td>5500.0</td>\n",
" <td>18</td>\n",
" <td>22</td>\n",
" <td>17450.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1</td>\n",
" <td>158.0</td>\n",
" <td>audi</td>\n",
" <td>gas</td>\n",
" <td>std</td>\n",
" <td>four</td>\n",
" <td>sedan</td>\n",
" <td>fwd</td>\n",
" <td>front</td>\n",
" <td>105.8</td>\n",
" <td>...</td>\n",
" <td>136</td>\n",
" <td>mpfi</td>\n",
" <td>3.19</td>\n",
" <td>3.4</td>\n",
" <td>8.5</td>\n",
" <td>110.0</td>\n",
" <td>5500.0</td>\n",
" <td>19</td>\n",
" <td>25</td>\n",
" <td>17710.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1</td>\n",
" <td>158.0</td>\n",
" <td>audi</td>\n",
" <td>gas</td>\n",
" <td>turbo</td>\n",
" <td>four</td>\n",
" <td>sedan</td>\n",
" <td>fwd</td>\n",
" <td>front</td>\n",
" <td>105.8</td>\n",
" <td>...</td>\n",
" <td>131</td>\n",
" <td>mpfi</td>\n",
" <td>3.13</td>\n",
" <td>3.4</td>\n",
" <td>8.3</td>\n",
" <td>140.0</td>\n",
" <td>5500.0</td>\n",
" <td>17</td>\n",
" <td>20</td>\n",
" <td>23875.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2</td>\n",
" <td>192.0</td>\n",
" <td>bmw</td>\n",
" <td>gas</td>\n",
" <td>std</td>\n",
" <td>two</td>\n",
" <td>sedan</td>\n",
" <td>rwd</td>\n",
" <td>front</td>\n",
" <td>101.2</td>\n",
" <td>...</td>\n",
" <td>108</td>\n",
" <td>mpfi</td>\n",
" <td>3.50</td>\n",
" <td>2.8</td>\n",
" <td>8.8</td>\n",
" <td>101.0</td>\n",
" <td>5800.0</td>\n",
" <td>23</td>\n",
" <td>29</td>\n",
" <td>16430.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 26 columns</p>\n",
"</div>"
],
"text/plain": [
" symboling losses make type aspiration doors style wheels location \\\n",
"0 2 164.0 audi gas std four sedan fwd front \n",
"1 2 164.0 audi gas std four sedan 4wd front \n",
"2 1 158.0 audi gas std four sedan fwd front \n",
"3 1 158.0 audi gas turbo four sedan fwd front \n",
"4 2 192.0 bmw gas std two sedan rwd front \n",
"\n",
" base ... engine-size fuel-system bore stroke compression-ratio \\\n",
"0 99.8 ... 109 mpfi 3.19 3.4 10.0 \n",
"1 99.4 ... 136 mpfi 3.19 3.4 8.0 \n",
"2 105.8 ... 136 mpfi 3.19 3.4 8.5 \n",
"3 105.8 ... 131 mpfi 3.13 3.4 8.3 \n",
"4 101.2 ... 108 mpfi 3.50 2.8 8.8 \n",
"\n",
" horsepower peak-rpm city-mpg highway-mpg price \n",
"0 102.0 5500.0 24 30 13950.0 \n",
"1 115.0 5500.0 18 22 17450.0 \n",
"2 110.0 5500.0 19 25 17710.0 \n",
"3 140.0 5500.0 17 20 23875.0 \n",
"4 101.0 5800.0 23 29 16430.0 \n",
"\n",
"[5 rows x 26 columns]"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"## Drop the rows with any na values and then reset idex\n",
"auto = auto.dropna(axis = 0)\n",
"auto = auto.reset_index(drop = True) #specify drop = True so that the old index isn't made into a column\n",
"auto.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<p style=\"text-align:justify\">As the head of the dealership, you want to quickly look at what type of cars you have and how many of each make. How would you go about this? You can use .value_counts() on the data frame's make column. This groups the make Series by the unique values it has and also counts the occurence of each value. You see that Toyota bags the top spot with 31 cars followed by Nissan with 18 and in third place comes Honda with 13 cars. You're hungry for more insights and you script on!</p>"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"toyota 31\n",
"nissan 18\n",
"honda 13\n",
"subaru 12\n",
"mazda 11\n",
"volvo 11\n",
"mitsubishi 10\n",
"volkswagen 8\n",
"dodge 8\n",
"peugot 7\n",
"plymouth 6\n",
"saab 6\n",
"mercedes-benz 5\n",
"bmw 4\n",
"audi 4\n",
"chevrolet 3\n",
"porsche 1\n",
"jaguar 1\n",
"Name: make, dtype: int64"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"## How many of each cars do you have?\n",
"auto['make'].value_counts()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<p style=\"text-align:justify\">Suppose you want to categorize the cars in your inventory based on the make of the car and look at the total worth of each of these categories, you use .groupby(). specify make within the parenthesis to group the cars by make and then subset the resulting object based on the price column. What you get is a groupby object.</p>"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<pandas.core.groupby.SeriesGroupBy object at 0x112b955d0>"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"## How do we use groupby?\n",
"auto.groupby('make')['price']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<p style=\"text-align:justify\">Now let's move ahead to perform the summation operation on this object. Essentially, you have to use .sum() at the end of the object like shown below and then you will see the total price of all cars categorized by their make. Use .sort_values(ascending = False) to see which categorize fall in the top. You notice that although you have more cars in some categories, the make of the car influences the total price.</p>"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/plain": [
"make\n",
"toyota 300596.0\n",
"volvo 198695.0\n",
"nissan 187482.0\n",
"mercedes-benz 148632.0\n",
"peugot 110310.0\n",
"honda 106401.0\n",
"subaru 102495.0\n",
"mazda 99880.0\n",
"saab 91340.0\n",
"mitsubishi 78130.0\n",
"bmw 75430.0\n",
"audi 72985.0\n",
"volkswagen 69905.0\n",
"dodge 62321.0\n",
"plymouth 42980.0\n",
"jaguar 32250.0\n",
"porsche 22018.0\n",
"chevrolet 18021.0\n",
"Name: price, dtype: float64"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"##What is the total price of your inventory per make?\n",
"auto.groupby('make')['price'].sum().sort_values(ascending = False)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<p style=\"text-align:justify\">Well, making a plot will make it easier for you to communicate it to others in your dealership. So let's use .plot() from the matplotlib library. The parameters for the plot function here are kind = 'bar' to specify the plot to be a bar plot, rot = 75 makes the lables in the x- axis to be rotated to 75 degrees so they're easier to read and figsize = (10,5) specifies the dimensions of the plot. We will start using plot more often to see the results of the operations on the groupby objects.</p>"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x112b8ec50>"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nrkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x112b8e310>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"## Now let's plot this visually using the plot() method that is from matplotlib\n",
"auto.groupby('make')['price'].sum().plot(kind = 'bar', rot = 75, figsize = (10,5))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"If you want to find the number of unique values in a column then I use .nunique(). For example, you group the cars by their style and then subset it by the make column to create your groupby object to which you apply .nunique() to get the count of unique car makers that are present in each style segment."
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"style\n",
"convertible 2\n",
"hardtop 3\n",
"hatchback 12\n",
"sedan 17\n",
"wagon 8\n",
"Name: make, dtype: int64"
]
},
"execution_count": 58,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"auto.groupby('style')['make'].nunique()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<p style=\"text-align:justify\">Remember .describe() that we used earlier to get some basic statistics about our data frame? Well we can use it on a groupby object as well. So in this case you want to get some basic statistics of your cars' miles per gallon in the city grouped by the type of fuel that their engines combust. Like earlier, you use .groupby to first create a groupby object, subset it based on the city-mpg column and then perform the .describe() operation on it. You see that your cars that run on diesel are on average more fuel efficient than those that run on gas. It is however important to note here that you have way more cars in your inventory that run on gas than on diesel so this might be affecting your statistics.</p>"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/plain": [
"type \n",
"diesel count 15.000000\n",
" mean 30.400000\n",
" std 7.238784\n",
" min 22.000000\n",
" 25% 24.000000\n",
" 50% 28.000000\n",
" 75% 37.000000\n",
" max 45.000000\n",
"gas count 144.000000\n",
" mean 26.118056\n",
" std 5.848312\n",
" min 15.000000\n",
" 25% 23.000000\n",
" 50% 26.000000\n",
" 75% 31.000000\n",
" max 49.000000\n",
"Name: city-mpg, dtype: float64"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"## Descriptive statistics of the mpg\n",
"auto.groupby('type')['city-mpg'].describe()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<p style=\"text-align:justify\">Similarly, you can use .mean() to find the mean of values in the groups that you create. Like shwon beloew, you can use it to plot which car make has the highest mean prices. This is again depends on the number of cars in each category but you can see that Jaguar, Mercedez-Benz and Porsche clinch the top three spots accordingly.</p>"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x112bac190>"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA1IAAAItCAYAAAAzJUunAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3X2YXlV97/93SAaIKQEiEKRqtdUCTasVkAetiKVHRDmt\nlp6vYK0C5VTQUg49tlirZwj0QegpeBCp/JCi0Jpe34IWi0AQUFBAsIAKkUCxIqAShIQEQ4BkMr8/\n1r51c5uHWZPZuWfI+3Vdc8HsvWbv757cc9/7s9faa08bHR1FkiRJkjR2Ww26AEmSJEmaagxSkiRJ\nklTJICVJkiRJlQxSkiRJklTJICVJkiRJlQxSkiRJklTJICVJkiRJlQxSkiRJklTJICVJkiRJlQxS\nkiRJklSpKkhFxHER8c2IWN583RQRb2qtvzAi1vZ9XdG3jW0i4uMR8WhEPBERl0TELn1tdoyIf272\nsSwiPhkRs/ravCgivhARKyPi4Yg4IyImVTCMiCMHXcNYWWs3rLUb1toNa+3OVKrXWrthrd2w1m5Y\n69jUBo8HgZOBvYC9geuAyyJiz1abK4G5wK7NV//BfRR4C3A4cCCwG3BpX5vPAHsCBzdtDwTO661s\nAtMVwAxgf+DdwFHAqZXH07Up8yLEWrtird2w1m5Ya3emUr3W2g1r7Ya1dsNax2BGTePM/ELfog9F\nxPGUMHN3s+zpzPzRun4+ImYDxwBHZOb1zbKjgbsjYt/MvLUJZYcAe2fmHU2bE4AvRMT7M/PhZv0e\nwBsy81Hgzoj4MPCRiDglM9fUHJckSZIk1agKUm1Nr1AAzwNuaq06KCKWAMsoPVYfysylzbq9m31e\n22ucmfdExAPAAcCtlFC2rBeiGtcAo8B+wGVNmzubENWzEPgHYB7wzfEelyRJkiRtTPU9RRHxqxHx\nBPA0cC7wtsy8p1l9JfAu4DeBPwdeD1wREdOa9bsCz2Tmir7NLmnW9do80l6ZmSPA0r42S9axDVpt\nJEmSJKkT4+mRWgy8Etge+D3goog4MDMXZ2a22i2KiDuB7wAHAV/a1GI78nzKUMH7gacmcsPz5s3b\nnnI/2aRnrd2w1m5YazestTtTqV5r7Ya1dsNau7GF17ot8BLKaLfHNtRw2ujo6CbtKSK+CNyXmcev\nZ/0jwF9m5vkR8QbKML0d271SEXE/cFZm/r/mnqn/m5nPb62fTgk5v5eZl0XEfOC/Z+ZerTYvAf4L\neFVmrnNoXzOrx7NuSDv00EN//uijj54SLxRJkiRJ3bvwwgtvv/LKK7/ft3hBZi7ofTPue6RatgK2\nWdeKiHghpcfnh82i24A1lNn4Pte02R14MXBz0+ZmYIeIeFXrPqmDgWnALa02H4yInVr3Sb0RWA58\ne32FNge+oG/xa4Ably1bxpo1EztHxezZs1mxon8U4+Rkrd2w1m5YazestTtTqV5r7Ya1dsNau7El\n1zpjxgx23HFHjj766BOOPvromzbYtmbDEfE3lPugHgC2A36fch/UG5vnPA1TpjJ/GHgZcDpwL6Vr\njMxcEREXAGdGxDLgCeBs4MbMvLVpszgiFgLnNzMCbg18jJIAH25KuZoSmC6OiJOBFwCnAedk5uqa\nY6IZzrdmzRpWr6790Q0bHR2d8G12xVq7Ya3dsNZuWGt3plK91toNa+2GtXbDWoEx3PJTO9nELsCn\nKfdJXUOZhe+NmXkdMAK8gjKr3j3A+cDXgQP7ws1JwOXAJcCXgR9QninV9o7WPi4HbgDe01uZmWuB\nw5p93gRcBHyKEuQkSZIkqVO1z5E6dgPrngLeNIZtPA2c0Hytr83jwDs3sp0HKWFKkiRJkjar6unP\nJUmSJGlLZ5CSJEmSpEoGKUmSJEmqZJCSJEmSpEoGKUmSJEmqZJCSJEmSpEoGKUmSJEmqZJCSJEmS\npEoGKUmSJEmqZJCSJEmSpEoGKUmSJEmqZJCSJEmSpEoGKUmSJEmqZJCSJEmSpEoGKUmSJEmqZJCS\nJEmSpEoGKUmSJEmqZJCSJEmSpEoGKUmSJEmqZJCSJEmSpEoGKUmSJEmqZJCSJEmSpEoGKUmSJEmq\nZJCSJEmSpEoGKUmSJEmqNGPQBUw1Q6tWwqqVY2r75PLHGBoZGduGZ85i9cxZm1CZJEmSpM3FIFVr\n1UqeOvnYCd/stqd/EgxSkiRJ0pTg0D5JkiRJqmSQkiRJkqRKBilJkiRJqmSQkiRJkqRKBilJkiRJ\nqmSQkiRJkqRKBilJkiRJqmSQkiRJkqRKBilJkiRJqmSQkiRJkqRKBilJkiRJqmSQkiRJkqRKBilJ\nkiRJqmSQkiRJkqRKBilJkiRJqmSQkiRJkqRKBilJkiRJqjSjpnFEHAccD7ykWbQIODUzr2q1ORU4\nFtgBuBE4PjPva63fBjgTeDuwDbAQeG9mPtJqsyNwDnAYsBa4FDgxM1e22rwI+ARwEPAEcBHwgcxc\nW3NMkiRJklSrtkfqQeBkYC9gb+A64LKI2BMgIk4G/hj4I2BfYCWwMCK2bm3jo8BbgMOBA4HdKEGp\n7TPAnsDBTdsDgfN6KyNiK+AKShDcH3g3cBRwauXxSJIkSVK1qiCVmV/IzKsy8zuZeV9mfgj4MSXM\nAJwInJaZl2fmXcC7KEHprQARMRs4BjgpM6/PzDuAo4HXRsS+TZs9gUOAP8zM/8jMm4ATgCMiYtdm\nP4cAewC/n5l3ZuZC4MPA+yKiqpdNkiRJkmqN+x6piNgqIo4AngfcFBEvBXYFru21ycwVwC3AAc2i\nfSi9SO029wAPtNrsDyxrQlbPNcAosF+rzZ2Z+WirzUJge2DeeI9JkiRJksaiOkhFxK9GxBPA08C5\nwNuaMLQrJews6fuRJc06gLnAM03AWl+bXYFH2iszcwRY2tdmXfuh1UaSJEmSOjGeYXCLgVdSen9+\nD7goIg6c0KokSZIkaRKrDlKZuQb4r+bbO5p7m04EzgCmUXqd2r1Fc4HeML2Hga0jYnZfr9TcZl2v\nzS7tfUbEdGBOX5tX95U2t7VunSLiSODI9rJ58+ZtPzw8zOzZsxkdHV3fj/7Ek8sf22ib8Zg+fTrb\nzZnTybbHYmhoiDkD3H8Na+2GtXbDWrsxlWqFqVWvtXbDWrthrd3YkmudNm0aAPPnzz9r0aJFy/tW\nL8jMBb1vJmJihq2AbTLzuxHxMGWmvW/BTyaX2A/4eNP2NmBN0+ZzTZvdgRcDNzdtbgZ2iIhXte6T\nOpgS0m5ptflgROzUuk/qjcBy4NvrK7Q58AV9i/cCbluxYgWrV6/e6MEOjYxstM14jIyMsHTp0k62\nPRZz5swZ6P5rWGs3rLUb1tqNqVQrTK16rbUb1toNa+3Gllzr0NAQO++8M8PDwycBt2+obe1zpP4G\nuJIyOcR2wO8Dr6eEGChTm38oIu4D7gdOAx4CLoMy+UREXACcGRHLKM9/Ohu4MTNvbdosjoiFwPkR\ncTywNfAxSgLs9TZdTQlMFzdTrr+g2dc5mbnxNCRJkiRJm6C2R2oX4NOU4LKc0vP0xsy8DiAzz4iI\n51Ge+bQD8BXg0Mx8prWNk4AR4BLKA3mvAt7Xt593UB7Iew3lgbyXUIYP0uxnbUQcBvwDcBPleVWf\nAoYrj+c5bWjVSli1cuMNKUMWx9zbNnMWq2fO2oTKJEmSpKmtKkhl5rFjaHMKcMoG1j9NeS7UCRto\n8zjwzo3s50HgsI3Vs0VbtZKnTt7oP1m1bU//JBikJEmStAUb93OkJEmSJGlLZZCSJEmSpEoGKUmS\nJEmqZJCSJEmSpEoGKUmSJEmqZJCSJEmSpEoGKUmSJEmqZJCSJEmSpEoGKUmSJEmqZJCSJEmSpEoG\nKUmSJEmqZJCSJEmSpEoGKUmSJEmqZJCSJEmSpEoGKUmSJEmqZJCSJEmSpEoGKUmSJEmqZJCSJEmS\npEoGKUmSJEmqZJCSJEmSpEoGKUmSJEmqZJCSJEmSpEoGKUmSJEmqZJCSJEmSpEoGKUmSJEmqZJCS\nJEmSpEoGKUmSJEmqZJCSJEmSpEoGKUmSJEmqZJCSJEmSpEoGKUmSJEmqZJCSJEmSpEoGKUmSJEmq\nZJCSJEmSpEoGKUmSJEmqZJCSJEmSpEoGKUmSJEmqZJCSJEmSpEoGKUmSJEmqZJCSJEmSpEoGKUmS\nJEmqZJCSJEmSpEoGKUmSJEmqZJCSJEmSpEoGKUmSJEmqNKOmcUT8BfA2YA9gFXATcHJm3ttqcyHw\n7r4fvSoz39xqsw1wJvB2YBtgIfDezHyk1WZH4BzgMGAtcClwYmaubLV5EfAJ4CDgCeAi4AOZubbm\nuCRJkiSpRm2P1OuAjwH7Ab8FDAFXR8TMvnZXAnOBXZuvI/vWfxR4C3A4cCCwGyUotX0G2BM4uGl7\nIHBeb2VEbAVcQQmD+1PC21HAqZXHJEmSJElVqnqk2r1KABFxFPAIsDfw1daqpzPzR+vaRkTMBo4B\njsjM65tlRwN3R8S+mXlrROwJHALsnZl3NG1OAL4QEe/PzIeb9XsAb8jMR4E7I+LDwEci4pTMXFNz\nbJIkSZI0Vpt6j9QOwCiwtG/5QRGxJCIWR8S5ETGntW5vSoC7trcgM+8BHgAOaBbtDyzrhajGNc2+\n9mu1ubMJUT0Lge2BeZt2WJIkSZK0fuMOUhExjTJE76uZ+e3WqiuBdwG/Cfw58HrgiqY9lKF+z2Tm\nir5NLmnW9do80l6ZmSOUwNZus2Qd26DVRpIkSZImXNXQvj7nAr8CvLa9MDOz9e2iiLgT+A5lQogv\nbcL+NllEHEnf/Vrz5s3bfnh4mNmzZzM6OrrRbTy5/LFOaps+fTrbzZmz8YYVplKtNYaGhpgzwP3X\nsNZuWGs3rLU7U6lea+2GtXbDWruxJdc6bVrp+5k/f/5ZixYtWt63ekFmLuh9M64gFRHnAG8GXpeZ\nP9xQ28z8bkQ8CryMEqQeBraOiNl9vVJzm3U0/92lb5/TgTl9bV7dt7u5rXXrqmUBsKBv8V7AbStW\nrGD16tUbOhQAhkZGNtpmPEZGRli6tH+E5KaZSrXWmDNnzkD3X8Nau2Gt3bDW7kyleq21G9baDWvt\nxpZc69DQEDvvvDPDw8MnAbdvqG310L4mRP0OZZKHB8bQ/oXA84Fe4LoNWEOZja/XZnfgxcDNzaKb\ngR0i4lWtTR0MTANuabX5tYjYqdXmjcByoD3UUJIkSZImVO1zpM6lDI37bWBlRPR6gJZn5lMRMQsY\npkxl/jClF+p04F7KRBBk5oqIuAA4MyKWUZ7/dDZwY2be2rRZHBELgfMj4nhga8q06wuaGfsArqYE\nposj4mTgBcBpwDmZufGuJUmSJEkap9oeqeOA2cCXgR+0vqJZPwK8ArgMuAc4H/g6cGBfuDkJuBy4\npLWtw/v29Q5gMWW2vsuBG4D39FY2D909rNnnTZSH8X6KEuQkSZIkqTO1z5HaYPDKzKeAN41hO08D\nJzRf62vzOPDOjWznQUqYkiRJkqTNZlOfIyVJkiRJWxyDlCRJkiRVMkhJkiRJUiWDlCRJkiRVMkhJ\nkiRJUiWDlCRJkiRVMkhJkiRJUiWDlCRJkiRVMkhJkiRJUiWDlCRJkiRVMkhJkiRJUiWDlCRJkiRV\nMkhJkiRJUiWDlCRJkiRVMkhJkiRJUiWDlCRJkiRVMkhJkiRJUiWDlCRJkiRVMkhJkiRJUiWDlCRJ\nkiRVMkhJkiRJUiWDlCRJkiRVMkhJkiRJUiWDlCRJkiRVMkhJkiRJUiWDlCRJkiRVMkhJkiRJUqUZ\ngy5AAhhatRJWrRxT2yeXP8bQyMjYNjxzFqtnztqEyiRJkqSfZZDS5LBqJU+dfOyEb3bb0z8JBilJ\nkiRNMIf2SZIkSVIlg5QkSZIkVTJISZIkSVIlg5QkSZIkVTJISZIkSVIlg5QkSZIkVTJISZIkSVIl\ng5QkSZIkVTJISZIkSVIlg5QkSZIkVTJISZIkSVIlg5QkSZIkVTJISZIkSVIlg5QkSZIkVTJISZIk\nSVKlGTWNI+IvgLcBewCrgJuAkzPz3r52pwLHAjsANwLHZ+Z9rfXbAGcCbwe2ARYC783MR1ptdgTO\nAQ4D1gKXAidm5spWmxcBnwAOAp4ALgI+kJlra45LkiRJkmrU9ki9DvgYsB/wW8AQcHVEzOw1iIiT\ngT8G/gjYF1gJLIyIrVvb+SjwFuBw4EBgN0pQavsMsCdwcNP2QOC81n62Aq6ghMH9gXcDRwGnVh6T\nJEmSJFWpClKZ+ebMvDgz787MOynB5cXA3q1mJwKnZeblmXkX8C5KUHorQETMBo4BTsrM6zPzDuBo\n4LURsW/TZk/gEOAPM/M/MvMm4ATgiIjYtdnPIZSesd/PzDszcyHwYeB9EVHV0yZJkiRJNTb1Hqkd\ngFFgKUBEvBTYFbi21yAzVwC3AAc0i/ah9CK129wDPNBqsz+wrAlZPdc0+9qv1ebOzHy01WYhsD0w\nbxOPS5IkSZLWa9xBKiKmUYbofTUzv90s3pUSdpb0NV/SrAOYCzzTBKz1tdkVeKS9MjNHKIGt3WZd\n+6HVRpIkSZIm3KYMgTsX+BXgtRNUiyRJkiRNCeMKUhFxDvBm4HWZ+cPWqoeBaZRep3Zv0Vzgjlab\nrSNidl+v1NxmXa/NLn37nA7M6Wvz6r7S5rbWravuI4Ej28vmzZu3/fDwMLNnz2Z0dHRdP/YsTy5/\nbKNtxmP69OlsN2fOhG7TWruptcbQ0BBzBrj/GtbaDWvtxlSqFaZWvdbaDWvthrV2Y0uuddq0aQDM\nnz//rEWLFi3vW70gMxf0vqkOUk2I+h3g9Zn5QHtdZn43Ih6mzLT3rab9bMp9TR9vmt0GrGnafK5p\nsztl0oqbmzY3AztExKta90kdTAlpt7TafDAidmrdJ/VGYDnQG2r4LM2BL+hbvBdw24oVK1i9evVG\nj39oZGSjbcZjZGSEpUuXTug2rbWbWmvMmTNnoPuvYa3dsNZuTKVaYWrVa63dsNZuWGs3tuRah4aG\n2HnnnRkeHj4JuH1DbWufI3UupUfnt4GVEdHrAVqemU81//9R4EMRcR9wP3Aa8BBwGZTJJyLiAuDM\niFhGef7T2cCNmXlr02ZxRCwEzo+I44GtKdOuL8jMXm/T1ZTAdHEz5foLmn2dk5kbT0SSJEmSNE61\nk00cB8wGvgz8oPUVvQaZeQYl9JxH6T2aCRyamc+0tnMScDlwSWtbh/ft6x3AYspsfZcDNwDvae1n\nLeVhvSOUBwNfBHwKGK48JkmSJEmqUtUjlZljCl6ZeQpwygbWP015LtQJG2jzOPDOjeznQUqYkiRJ\nkqTNZlOfIyVJkiRJWxyDlCRJkiRVMkhJkiRJUiWDlCRJkiRVMkhJkiRJUiWDlCRJkiRVMkhJkiRJ\nUqWq50hJgqFVK2HVyjG1fXL5YwyNjIxtwzNnsXrmrE2oTJIkSZuLQUqqtWolT5187IRvdtvTPwkG\nKUmSpCnBoX2SJEmSVMkgJUmSJEmVDFKSJEmSVMkgJUmSJEmVDFKSJEmSVMlZ+6TnMKdqlyRJ6oZB\nSnouc6p2SZKkThikJE0aY+1Bs/dMkiQNmkFK0uTRQQ+avWeSJKkLTjYhSZIkSZUMUpIkSZJUySAl\nSZIkSZUMUpIkSZJUySAlSZIkSZUMUpIkSZJUySAlSZIkSZUMUpIkSZJUySAlSZIkSZUMUpIkSZJU\nySAlSZIkSZUMUpIkSZJUySAlSZIkSZUMUpIkSZJUySAlSZIkSZUMUpIkSZJUySAlSZIkSZUMUpIk\nSZJUySAlSZIkSZUMUpIkSZJUySAlSZIkSZUMUpIkSZJUySAlSZIkSZUMUpIkSZJUacagC5CkqWho\n1UpYtXKj7Z5c/hhDIyNj2+jMWayeOWsTK5MkSZuDQUqSxmPVSp46+dgJ3eS2p38SDFKSJE0J1UEq\nIl4H/BmwN/AC4K2Z+fnW+guBd/f92FWZ+eZWm22AM4G3A9sAC4H3ZuYjrTY7AucAhwFrgUuBEzNz\nZavNi4BPAAcBTwAXAR/IzLW1xyVJkiRJYzWee6RmAd8A3guMrqfNlcBcYNfm68i+9R8F3gIcDhwI\n7EYJSm2fAfYEDm7aHgic11sZEVsBV1DC4P6U8HYUcOo4jkmSJEmSxqy6RyozrwKuAoiIaetp9nRm\n/mhdKyJiNnAMcERmXt8sOxq4OyL2zcxbI2JP4BBg78y8o2lzAvCFiHh/Zj7crN8DeENmPgrcGREf\nBj4SEadk5praY5MkSZKksehq1r6DImJJRCyOiHMjYk5r3d6UAHdtb0Fm3gM8ABzQLNofWNYLUY1r\nKD1g+7Xa3NmEqJ6FwPbAvAk9GkmSJElq6WKyiSspw/S+C/wS8LfAFRFxQGaOUob6PZOZK/p+bkmz\njua/j7RXZuZIRCzta7NkHdvorfvmBByLJE15zjAoSdLEm/AglZnZ+nZRRNwJfIcyIcSXJnp/kqSN\ncIZBSZImXOfTn2fmdyPiUeBllCD1MLB1RMzu65Wa26yj+e8u7e1ExHRgTl+bV/ftbm5r3c+IiCPp\nm/hi3rx52w8PDzN79mxGR9c3d8ZPPbn8sY22GY/p06ez3Zw5G29YwVqtdSrVCt3Ua61Tq9axGhoa\nYs4A919rKtVrrd2w1m5Yaze25FqnTStTQMyfP/+sRYsWLe9bvSAzF/S+6TxIRcQLgecDP2wW3Qas\noczG97mmze7Ai4GbmzY3AztExKta90kdDEwDbmm1+WBE7NS6T+qNwHLg2+uqpTnwBX2L9wJuW7Fi\nBatXr97o8Yx52EulkZERli5dOqHbtFZrnUq1Qjf1WuvUqnWs5syZM9D915pK9VprN6y1G9bajS25\n1qGhIXbeeWeGh4dPAm7fUNvxPEdqFqV3qTdj3y9GxCuBpc3XMOUeqYebdqcD91ImgiAzV0TEBcCZ\nEbGM8vyns4EbM/PWps3iiFgInB8RxwNbAx+jpMBeb9PVlMB0cUScTHmm1WnAOZm58UQkSZIkSeM0\nnln79gHuoPQsjQJ/T0lr84ER4BXAZcA9wPnA14ED+8LNScDlwCXAl4EfUJ4p1fYOYDFltr7LgRuA\n9/RWNg/dPazZ502Uh/F+ihLkJEmSJKkz43mO1PVsOIC9aQzbeBo4oflaX5vHgXduZDsPUsKUJEmS\nJG02XT1HSpIkSZKeswxSkiRJklTJICVJkiRJlQxSkiRJklTJICVJkiRJlQxSkiRJklTJICVJkiRJ\nlQxSkiRJklTJICVJkiRJlQxSkiRJklTJICVJkiRJlQxSkiRJklTJICVJkiRJlQxSkiRJklTJICVJ\nkiRJlQxSkiRJklTJICVJkiRJlQxSkiRJklTJICVJkiRJlQxSkiRJklTJICVJkiRJlQxSkiRJklTJ\nICVJkiRJlQxSkiRJklTJICVJkiRJlQxSkiRJklTJICVJkiRJlQxSkiRJklTJICVJkiRJlQxSkiRJ\nklTJICVJkiRJlQxSkiRJklTJICVJkiRJlQxSkiRJklTJICVJkiRJlQxSkiRJklTJICVJkiRJlQxS\nkiRJklTJICVJkiRJlQxSkiRJklTJICVJkiRJlQxSkiRJklTJICVJkiRJlQxSkiRJklTJICVJkiRJ\nlWbU/kBEvA74M2Bv4AXAWzPz831tTgWOBXYAbgSOz8z7Wuu3Ac4E3g5sAywE3puZj7Ta7AicAxwG\nrAUuBU7MzJWtNi8CPgEcBDwBXAR8IDPX1h6XJEmSJI1VdZACZgHfAC4APtu/MiJOBv4YeBdwP/BX\nwMKI2DMzn2mafRQ4FDgcWAF8nBKUXtfa1GeAucDBwNbAp4DzgHc2+9kKuAL4AbA/sBtwMfAM8KFx\n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\nmBLSbllfLc2BL+hbvBdw24oVK1i9evVGj2doZGSjbcZjZGSEpUuXTug2rdVap1Kt0E291mqt1mqt\n1jq1Pg+s1VoHWevQ0BA777wzw8PDJwG3b6htF8+R+jvg3ynD+X4emA+sBv6lafJR4EMRcR9wP3Aa\n8BBwGZTJJyLiAuDMiFgGPAGcDdyYmbc2bRZHxELg/Ig4Htga+BglJTpjnyRJkqROdTHZxAspz3ha\nTAlPPwL2z8zHADLzDEroOY/SezQTODQzn2lt4yTgcuASynDAH1CeKdX2jmYf1zRtbwDe08HxSJIk\nSdKzdDHZxJFjaHMKcMoG1j8NnNB8ra/N48A76yuUJEmSpE3T1XOkJEmSJOk5yyAlSZIkSZUMUpIk\nSZJUySAlSZIkSZUMUpIkSZJUySAlSZIkSZUMUpIkSZJUySAlSZIkSZUMUpIkSZJUySAlSZIkSZUM\nUpIkSZJUySAlSZIkSZUMUpIkSZJUySAlSZIkSZUMUpIkSZJUySAlSZIkSZUMUpIkSZJUySAlSZIk\nSZUMUpIkSZJUySAlSZIkSZUMUpIkSZJUySAlSZIkSZUMUpIkSZJUySAlSZIkSZUMUpIkSZJUySAl\nSZIkSZUMUpIkSZJUySAlSZIkSZUMUpIkSZJUySAlSZIkSZUMUpIkSZJUySAlSZIkSZUMUpIkSZJU\nySAlSZIkSZUMUpIkSZJUySAlSZIkSZUMUpIkSZJUySAlSZIkSZUMUpIkSZJUySAlSZIkSZUMUpIk\nSZJUySAlSZIkSZUMUpIkSZJUySAlSZIkSZVmDLqATRUR7wPeD+wKfBM4ITO/PtiqJEmSJD2XTeke\nqYh4O/D3wDDwKkqQWhgROw20MEmSJEnPaVM6SAEnAedl5kWZuRg4DngSOGawZUmSJEl6LpuyQSoi\nhoC9gWt7yzJzFLgGOGBQdUmSJEl67puyQQrYCZgOLOlbvoRyv5QkSZIkdWLKTzYxAbYFmDFjbL+K\nGdvOZOiXdp/wImZsOxOGhiZ8m9ZqrVOl1t52J7pea7VWa7VWa51anwfWaq2DrLWVCbbd2PamjY6O\nTkBZm18ztO9J4PDM/Hxr+aeA7TPzbev4mSOBI9vLDj300J8/+uij9+q4XEmSJElTxIUXXnj7lVde\n+f2+xQsyc0HvmykbpAAi4mvALZl5YvP9NOAB4OzM/Lsxbub5wCHA/cBTE1nf/PnzzxoeHj5pIrfZ\n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\nyf8DvpnvJIQrXHMAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x112932510>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#Mean price across all makes\n",
"auto.groupby('make')['price'].mean().sort_values(ascending = False).plot(kind = 'bar', rot = 75, figsize = (10,5))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<p style=\"text-align:justify\">You can also group by two columns by passing a list with the column names as parameters in .groupby(). Like shown below we've used this style of grouping to compute the mean price of cars grouped first by their make and then by the style.</p>"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/plain": [
"make style \n",
"audi sedan 18246.250000\n",
"bmw sedan 18857.500000\n",
"chevrolet hatchback 5723.000000\n",
" sedan 6575.000000\n",
"dodge hatchback 7819.800000\n",
" sedan 7150.500000\n",
" wagon 8921.000000\n",
"honda hatchback 7054.428571\n",
" sedan 9945.000000\n",
" wagon 7295.000000\n",
"jaguar sedan 32250.000000\n",
"mazda hatchback 8128.333333\n",
" sedan 10222.000000\n",
"mercedes-benz convertible 35056.000000\n",
" hardtop 28176.000000\n",
" sedan 28576.000000\n",
" wagon 28248.000000\n",
"mitsubishi hatchback 7399.000000\n",
" sedan 8434.000000\n",
"nissan hardtop 8249.000000\n",
" hatchback 14409.000000\n",
" sedan 8604.555556\n",
" wagon 9915.666667\n",
"peugot sedan 15758.571429\n",
"plymouth hatchback 6586.000000\n",
" sedan 7150.500000\n",
" wagon 8921.000000\n",
"porsche hatchback 22018.000000\n",
"saab hatchback 15013.333333\n",
" sedan 15433.333333\n",
"subaru hatchback 6591.333333\n",
" sedan 9070.600000\n",
" wagon 9342.000000\n",
"toyota convertible 17669.000000\n",
" hardtop 9762.333333\n",
" hatchback 9616.000000\n",
" sedan 9542.200000\n",
" wagon 7864.666667\n",
"volkswagen hatchback 9980.000000\n",
" sedan 8560.714286\n",
"volvo sedan 18726.875000\n",
" wagon 16293.333333\n",
"Name: price, dtype: float64"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"auto.groupby(['make', 'style'])['price'].mean()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<p style=\"text-align:justify\">Suppose you would like to compare the avegrage miles per gallon values both in the city and on the highway for the cars grouped by their style, simple create the groupby object and then subset it based on both the city-mpg and highway-mpg column and then plot it to get a nice visual like below.</p>"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x113c4f590>"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABLsAAAIRCAYAAACiUb9JAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3XuYVnW9P/z3DIwgJCCJRzwk4QnTAAXJQwc7qGmZ4jKy\nJ8TLXdrOQmunlrsRyXrKbZZte7bGjtrtJFcllHnKrbYt89Aje/9KNC3FQxqEcgyFkJnnjxnmYYaD\nDMx4D4vX67rmyvVd33utz33LJ+Z6+13fu665uTkAAAAAUAX1tS4AAAAAALqKsAsAAACAyhB2AQAA\nAFAZwi4AAAAAKkPYBQAAAEBlCLsAAAAAqAxhFwAAAACVIewCAAAAoDKEXQAAAABUhrCL10xRFBNq\nXQOwYXoUei79CT2bHoWeS39um3p3ZnJRFOckOTfJPq1Dc5JcVpblba3npyeZ2OFlt5VlecIW1kk1\nTEgyo9ZFABukR6Hn0p/Qs+lR6Ln05zaosyu7nk1yYZJRSUYnuSvJT4uiOHCtObcm2SXJrq0/UlQA\nAAAAXhOdWtlVluXNHYYuKYri3CRHJHm0dWxlWZYLuqI4AAAAAOiMToVdayuKoj5JkaRfkt+sdept\nRVHMT7IoLSu/LinLcuEWVQkAAAAAm6DTYVdRFAcnuS9J3yTLknygLMvHWk/fmuQnSeYmGZbky0lu\nKYpiXFmWzZ281euTvCfJU0lWdLZOep4RI0YMTMsjsEAPpEeh59Kf0LPpUei59Gel9E3LHvK3J3lx\nYxPrmps7l0EVRdE7yV5JBiYZn+QfkhxTluUf1jP3DUmeSHJsWZZ3b+SaE9Jhb6/jjz9+j0mTJvkD\nCQAAAECSZPr06bNvvfXW5zoMzyjLsu2LCDoddnVUFMUdSf5UluW5Gzj/1ySfL8vy25289FuS3Lto\n0aK88sorW1QjPcOAAQOydOnSWpcBbIAehZ5Lf0LPpkeh59Kf1dG7d+/suOOOSXJk2m+nte7cLrhf\nfZI+6ztRFMXQtDyO+JfNuO6KJHnllVeyatWqza+OHqO5udm/S+jB9Cj0XPoTejY9Cj2X/qykV93q\nqlNhV1EUX0rLvlzPJNkhyRlJ3prk3UVR9E/SmJY9u+YleWOSryR5PC3PUwIAAABAt6rv5Pydk3wv\nyR+S/FeS0UneXZblXUlWJzkkyU+TPJbk20l+m5b9vMSoAAAAAHS7Tq3sKsvy7I2cW5HkuC2uCAAA\nAAA2U2dXdgEAAABAjyXsAgAAAKAyhF0AAAAAVEan9uzqaQYNGpT6ennd1qK+vj6DBw+udRk11dTU\nlMWLF9e6DAAAAKisrTrsqq+vz8KFC2tdBmyybT3sAwAAgO5mWRQAAAAAlbFVr+wCANgWzFv8tyxZ\n0VzrMrpdv4b69O9V/fcJAHQvYRcAQA+3bOUrOfsnj9W6jG437dT9079XXa3LAAC2ch5jBAAAAKAy\nhF0AAAAAVIawayt13333ZejQobn//vtrXQoAAABAjyHs2orV1bXf02LWrFmZNm1ajaoBAAAAqL3K\nblDf8PLy5OXltS1i+/5ZtX3/brn0uHHj8sQTT2S77bZrG5s5c2Yef/zxnH322d1yTwAAAICerrJh\nV15enhUX1jb06fuVaUk3hV1J2gVdAAAAAHiMsUebN29ePv3pT2f06NHZd999M27cuFx88cV55ZVX\n1tmza/z48bnzzjvz5z//OUOHDs3QoUMzbty4vPTSSxk+fHgaGxvXuf5f/vKX7LXXXrnmmms2WseV\nV16ZoUOH5sknn8x5552XAw88MIccckiuuOKKJMlzzz2Xs846KwcccEBGjhyZa6+9tt3r19T6s5/9\nLF/+8pczcuTIDB8+PJMmTcrzzz+/zv2++93v5i1veUuGDRuWE088MQ8++GDGjx+f0047bXM/SgAA\nAGAbUd2VXVu5+fPn573vfW+WLVuWD3/4wxk2bFjmzZuXm2++OS+//HKS9nt2fepTn8qyZcsyb968\nTJkyJc3Nzenfv3/69euX4447LjfddFMuvfTSdq+ZNWtWkuSUU07ZaC1rXnPuuedmv/32y+c+97nc\neeedufrqqzNo0KD853/+Z4466qh8/vOfz8yZM/PFL34xI0eOzJgxY9pd5+qrr059fX3+8R//MS+8\n8EK+/e1vZ8KECfnFL36RPn36JEm+973v5ZJLLskRRxyRj370o3n22Wdz1llnZeDAgdl99923/IMF\nAAAAKk3Y1UN96UtfygsvvJCbb745Bx98cNv4pz/96fXOP/roo7Prrrtm6dKlOfnkk9udO+200zJr\n1qzcc889eetb39o2fuONN2bs2LHZbbfdNqmmUaNG5ctf/nKS5IwzzsjYsWMzderUfO5zn8s555yT\nJHn/+9+fUaNG5Yc//OE6YdeSJUtyzz33ZPvtt0+SHHzwwTnnnHNy/fXXZ9KkSVm1alX+5V/+JSNH\njkxZlqmvb1l4eOCBB2by5MnCLgAAAOBVeYyxB2pubs4vfvGLvPvd724XdG2uo48+OjvvvHNuvPHG\ntrE//OEPefTRRzN+/PhNukZdXV0mTJjQdlxfX59DDz00zc3NOf3009vGBwwYkGHDhuWZZ55Z5xqn\nnXZaW9CVJCeeeGJ22WWX3HXXXUmS//3f/82iRYtyxhlntAVdSfKBD3wgAwcO3PQ3DAAAAGyzrOzq\ngV588cUsW7Ys++23X5dcr66uLqecckq+//3vZ8WKFenbt29mzpyZvn375r3vfW+SpKmpKS+++GK7\n1w0aNCgNDQ1tx3vssUe78zvssEP69OmTHXfccZ3xxYsXr1PHPvvss96xZ599Nkny/PPPp66uLnvv\nvXe7Ob169cqee+656W8YAAAA2GZZ2bWNGD9+fP72t7/l9ttvT9KyX9e73vWuvO51r0vSEjSNHDky\no0aNavvfhx56qN011l5ttUavXr26v3gAAACATWRlVw/0+te/PjvssEMee+yxTr1u7c3nO9p///1z\n8MEH58Ybb8yuu+6a5557Lpdffnnb+SFDhuSHP/xhu9ccdNBBnSv8VcydO3edsaeeeqrtPnvssUea\nm5vz1FNPZdy4cW1zVq9enWeffbbL6wEAAACqx8quHqiuri7vec97cscdd+T3v//9Jr+uX79+Wbp0\n6QbPn3rqqfnv//7vTJs2LYMHD87b3/72tnN9+vTJUUcd1e5nwIABW/Q+Ovrxj3+c5cuXtx3fdNNN\nmT9/ft7xjnckSQ499NDsuOOO+cEPfpCmpqa2eT/5yU+yZMmSLq0FAAAAqCYru3qoiy66KL/61a9y\nyimn5Iwzzsjw4cMzf/783HzzzZk1a1aSlo3s13bIIYfkpptuypQpU/LmN785/fr1y7ve9a628x/4\nwAdy+eWX57bbbsvEiRNf80cQBw0alJNPPjmnn356FixYkGnTpmXfffdt2/i+oaEhn/70p/PP//zP\nOe2003LSSSfl2WefzQ033JB99tlnoyvXAAAAAJIqh13b90/fr0yreQ2ba9ddd81NN92UK664IrNm\nzcqyZcuy66675thjj237RsOO4c/EiRMzZ86clGWZadOmZejQoe3Crp122inHHHNM7r777pxyyimb\nXdvaNjWAqqury3nnnZdHH30011xzTf72t7/lmGOOyeWXX56+ffu2zTvzzDOTJNdee22mTp2aAw88\nMNOnT09jY2P69OnTJTUDAAAA1VXXcXVQDzIqyUMLFizIqlWr1jth8ODBWbhw4Wtb1Vbu7LPPzh/+\n8If8+te/fs3ued999+W0007LddddlxNOOKHTr29ubs6b3vSmnHDCCfnqV7/aDRW+dvyZpSfz5xN6\nrhdX1ees8pFal9Htpp26f4b0tZKbrY+/Q6Hn0p/V0dDQkCFDhiTJ6CSzNzbXnl3bkPnz5+fOO+/M\n+PHja13KBq1cuXKdsbIss3jx4hx55JE1qAgAAADYmlT3MUbaPPvss3nwwQczY8aMNDQ05MMf/nCt\nS9qg2bNn59JLL82JJ56YHXfcMb/73e9yww035MADD8x73/veWpcHAAAA9HDCrm3AfffdlwsuuCB7\n7rlnvvGNb2SnnXZ6zWvY1L299txzz+yxxx6ZPn16Fi9enEGDBqUoilx88cXp3dsfVwAAAGDjpAfb\ngKIoUhRFze4/bty4PPvss5s0d+jQofnOd77TzRUBAAAAVWXPLgAAAAAqQ9gFAAAAQGUIuwAAAACo\nDGEXAAAAAJVhg3oAAIAtMG/x37JkRXOty+h2/Rrq079X9d8nsPUTdgEAAGyBZStfydk/eazWZXS7\naafun/696mpdBsCr8hgjAAAAAJUh7OqhrrzyygwdOjSLFi3a6LyxY8fmggsu2Kx7jB07NmeeeeZm\nvRYAAACgJxJ29VB1dXWpq3v1JcL19fWbNG9D9wAAAACoksru2bV8dV1eWtVU0xpeiw0c77nnntTX\nyywBAAAAkgqHXS+taqr5JpGvxQaODQ0N3Xp9AAAAgK2JJUE93JIlSzJ58uQcdNBBOfDAA3PBBRdk\nxYoVbefXt2fXI488klNPPTXDhg3LYYcdlm984xu54YYbMnTo0Dz33HPr3OO3v/1tTjzxxAwbNixv\nectb8uMf/7jt3NKlS7PXXntl+vTpbWMLFy7M0KFD86Y3vanddS666KKMGjWq7fjBBx/Mxz72sYwZ\nMyb77rtvDj/88Fx66aXt6l9T15w5c9ap6+qrr85ee+2V+fPnb/QzWrP32H333ZcTTjghw4YNyzvf\n+c7cd999SZJbbrkl73znOzNs2LAcf/zxefjhh9u9fvLkydlvv/3yzDPP5EMf+lCGDx+e0aNH56qr\nrlrnXosWLcp5552XAw44IAcddFDOP//8PPLIIxk6dGh+9KMfbbROAAAAoPsJu3qw5ubmnHPOOXnp\npZdy8cUX56STTsqPfvSjdiFMx3235s2bl9NOOy1//OMf88lPfjIf/ehHM2vWrPz7v//7evfomjt3\nbj72sY/lmGOOyRe+8IUMGjQoF1xwQf74xz8mSQYMGJD9998/999/f9trfvvb36a+vj6LFy9um7dm\nfMyYMW3HP//5z7NixYpMnDgxX/ziF/P2t78906dPz+TJk9vmnHjiienbt29mzpy5Tm2zZs3KkUce\nmV122WWjn1NdXV3mzp2bT3ziE3nXu96Vz33uc1m8eHEmTZqUmTNn5rLLLsv48ePzmc98Jk8//XTO\nPffcdV7f1NSUM844IzvvvHMuueSSHHLIIbnyyitz5ZVXtvv3MXHixNx0000piiIXXnhh/vrXv2by\n5Mn2PwMAAIAeorKPMVbFIYcckq9+9attx4sWLcqMGTNy8cUXr3f+Nddck2XLluX222/PgQcemCQ5\n/fTTc+SRR653/pNPPpkbb7wxhx9+eJLkpJNOyuGHH54bbrghl1xySZKWlVO33HJL22seeOCBjBkz\nJk888UQeeOCBDB8+PIsXL87jjz+eD3/4w23zPv/5z6dPnz5txx/60Iey99575ytf+Uqef/757L77\n7unfv3+OO+64zJo1q+1+SfLwww/n8ccfz8c//vFN+pyefPLJ/OxnP8vIkSOTJMOHD8+HPvShfPaz\nn80999yT3XbbLUlLeHfRRRfl/vvvzxFHHNH2+pUrV+Yd73hHpkyZkiSZOHFiJk6cmG9961s566yz\nsuOOO+bWW2/N7NmzM3Xq1EyaNKlt3umnn75JNQIAAADdz8quHqyurq5deJQkY8aMyaJFi7J8+fL1\nvuaXv/xlRo8e3RZ0JcnAgQNzyimnrHf+fvvt1xZ0JcngwYOz77775umnn253zwULFuTJJ59M0vJ4\n4hFHHJExY8bkgQceaBtbM3eNtYOul19+OQsXLszo0aPT1NTU7lHC8ePHZ/78+bn33nvbxm688cZs\nv/32OeGEEzbw6az7PtYEXUna/vmoo45qC7rWjDc3N7d7f2uceeaZ7Y4nTZqUlStX5le/+lWSls92\nu+22y4QJE9Z5XXNz934RAQAAALBpOrWyqyiKc5Kcm2Sf1qE5SS4ry/K2teZcluTsJIOS3Jvk3LIs\n/9Ql1W6D9thjj3bHAwcOTJIsXrw4/fv3X2f+c889l8MOO2yd8X322We91999993XGRs4cGCWLFnS\n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\n/5KT1Nu7df9DAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x112bca390>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"##For each make, howw does the mean city mpg compare to the mean high-way mpg?\n",
"auto.groupby('style')['city-mpg', 'highway-mpg'].mean().plot(kind = 'bar', rot = 75, figsize = (15,5))"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"<h2>Aggregation</h2>\n",
"\n",
"<p style=\"text-align:justify\">Lastly, let's explore aggregation which allows you to compute mulitple statistics for columns in your groupby object through the .agg() function. The parameter this function takes in a python dictionary that contains the columns to compute staistics on and the operation to be performed. \n",
"\n",
"Say you wanted to create a report on the mean price of each car categorizes by their make and also the total number of cars in each category. You first create the dictionary with the price key to signify that you want operations to be performed on the price column and then define its value as mean which referes to the mean operation to be performed on that column. Similarly, you create another key, make referring to the make column and the value is count to find the total cars in each.</p>"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>price</th>\n",
" <th>make</th>\n",
" </tr>\n",
" <tr>\n",
" <th>make</th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>audi</th>\n",
" <td>18246.250000</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>bmw</th>\n",
" <td>18857.500000</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>chevrolet</th>\n",
" <td>6007.000000</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>dodge</th>\n",
" <td>7790.125000</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>honda</th>\n",
" <td>8184.692308</td>\n",
" <td>13</td>\n",
" </tr>\n",
" <tr>\n",
" <th>jaguar</th>\n",
" <td>32250.000000</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mazda</th>\n",
" <td>9080.000000</td>\n",
" <td>11</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mercedes-benz</th>\n",
" <td>29726.400000</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mitsubishi</th>\n",
" <td>7813.000000</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>nissan</th>\n",
" <td>10415.666667</td>\n",
" <td>18</td>\n",
" </tr>\n",
" <tr>\n",
" <th>peugot</th>\n",
" <td>15758.571429</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>plymouth</th>\n",
" <td>7163.333333</td>\n",
" <td>6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>porsche</th>\n",
" <td>22018.000000</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>saab</th>\n",
" <td>15223.333333</td>\n",
" <td>6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>subaru</th>\n",
" <td>8541.250000</td>\n",
" <td>12</td>\n",
" </tr>\n",
" <tr>\n",
" <th>toyota</th>\n",
" <td>9696.645161</td>\n",
" <td>31</td>\n",
" </tr>\n",
" <tr>\n",
" <th>volkswagen</th>\n",
" <td>8738.125000</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>volvo</th>\n",
" <td>18063.181818</td>\n",
" <td>11</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" price make\n",
"make \n",
"audi 18246.250000 4\n",
"bmw 18857.500000 4\n",
"chevrolet 6007.000000 3\n",
"dodge 7790.125000 8\n",
"honda 8184.692308 13\n",
"jaguar 32250.000000 1\n",
"mazda 9080.000000 11\n",
"mercedes-benz 29726.400000 5\n",
"mitsubishi 7813.000000 10\n",
"nissan 10415.666667 18\n",
"peugot 15758.571429 7\n",
"plymouth 7163.333333 6\n",
"porsche 22018.000000 1\n",
"saab 15223.333333 6\n",
"subaru 8541.250000 12\n",
"toyota 9696.645161 31\n",
"volkswagen 8738.125000 8\n",
"volvo 18063.181818 11"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ops = { 'price': 'mean',\n",
" 'make': 'count'}\n",
"auto.groupby('make').agg(ops)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<p style=\"text-align:justify\">But really, you want this to be more clean in terms of naming the new columns that you have created. And if you also want to compute multiple statistics per column, then we must pass a nested dictionary as the parameter.</p>"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr>\n",
" <th></th>\n",
" <th colspan=\"3\" halign=\"left\">horsepower</th>\n",
" <th colspan=\"3\" halign=\"left\">price</th>\n",
" </tr>\n",
" <tr>\n",
" <th></th>\n",
" <th>mean_bhp</th>\n",
" <th>min_bhp</th>\n",
" <th>max_bhp</th>\n",
" <th>min_price</th>\n",
" <th>max_price</th>\n",
" <th>avg_price</th>\n",
" </tr>\n",
" <tr>\n",
" <th>make</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>audi</th>\n",
" <td>116.750000</td>\n",
" <td>102.0</td>\n",
" <td>140.0</td>\n",
" <td>13950.0</td>\n",
" <td>23875.0</td>\n",
" <td>18246.250000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>bmw</th>\n",
" <td>111.000000</td>\n",
" <td>101.0</td>\n",
" <td>121.0</td>\n",
" <td>16430.0</td>\n",
" <td>21105.0</td>\n",
" <td>18857.500000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>chevrolet</th>\n",
" <td>62.666667</td>\n",
" <td>48.0</td>\n",
" <td>70.0</td>\n",
" <td>5151.0</td>\n",
" <td>6575.0</td>\n",
" <td>6007.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>dodge</th>\n",
" <td>84.375000</td>\n",
" <td>68.0</td>\n",
" <td>145.0</td>\n",
" <td>5572.0</td>\n",
" <td>12964.0</td>\n",
" <td>7790.125000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>honda</th>\n",
" <td>80.230769</td>\n",
" <td>58.0</td>\n",
" <td>101.0</td>\n",
" <td>5399.0</td>\n",
" <td>12945.0</td>\n",
" <td>8184.692308</td>\n",
" </tr>\n",
" <tr>\n",
" <th>jaguar</th>\n",
" <td>176.000000</td>\n",
" <td>176.0</td>\n",
" <td>176.0</td>\n",
" <td>32250.0</td>\n",
" <td>32250.0</td>\n",
" <td>32250.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mazda</th>\n",
" <td>80.000000</td>\n",
" <td>68.0</td>\n",
" <td>120.0</td>\n",
" <td>5195.0</td>\n",
" <td>18280.0</td>\n",
" <td>9080.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mercedes-benz</th>\n",
" <td>129.400000</td>\n",
" <td>123.0</td>\n",
" <td>155.0</td>\n",
" <td>25552.0</td>\n",
" <td>35056.0</td>\n",
" <td>29726.400000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mitsubishi</th>\n",
" <td>91.800000</td>\n",
" <td>68.0</td>\n",
" <td>116.0</td>\n",
" <td>5389.0</td>\n",
" <td>9959.0</td>\n",
" <td>7813.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>nissan</th>\n",
" <td>102.555556</td>\n",
" <td>55.0</td>\n",
" <td>200.0</td>\n",
" <td>5499.0</td>\n",
" <td>19699.0</td>\n",
" <td>10415.666667</td>\n",
" </tr>\n",
" <tr>\n",
" <th>peugot</th>\n",
" <td>102.285714</td>\n",
" <td>95.0</td>\n",
" <td>142.0</td>\n",
" <td>11900.0</td>\n",
" <td>18150.0</td>\n",
" <td>15758.571429</td>\n",
" </tr>\n",
" <tr>\n",
" <th>plymouth</th>\n",
" <td>77.000000</td>\n",
" <td>68.0</td>\n",
" <td>102.0</td>\n",
" <td>5572.0</td>\n",
" <td>8921.0</td>\n",
" <td>7163.333333</td>\n",
" </tr>\n",
" <tr>\n",
" <th>porsche</th>\n",
" <td>143.000000</td>\n",
" <td>143.0</td>\n",
" <td>143.0</td>\n",
" <td>22018.0</td>\n",
" <td>22018.0</td>\n",
" <td>22018.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>saab</th>\n",
" <td>126.666667</td>\n",
" <td>110.0</td>\n",
" <td>160.0</td>\n",
" <td>11850.0</td>\n",
" <td>18620.0</td>\n",
" <td>15223.333333</td>\n",
" </tr>\n",
" <tr>\n",
" <th>subaru</th>\n",
" <td>86.250000</td>\n",
" <td>69.0</td>\n",
" <td>111.0</td>\n",
" <td>5118.0</td>\n",
" <td>11694.0</td>\n",
" <td>8541.250000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>toyota</th>\n",
" <td>90.741935</td>\n",
" <td>56.0</td>\n",
" <td>161.0</td>\n",
" <td>5348.0</td>\n",
" <td>17669.0</td>\n",
" <td>9696.645161</td>\n",
" </tr>\n",
" <tr>\n",
" <th>volkswagen</th>\n",
" <td>77.125000</td>\n",
" <td>52.0</td>\n",
" <td>100.0</td>\n",
" <td>7775.0</td>\n",
" <td>9995.0</td>\n",
" <td>8738.125000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>volvo</th>\n",
" <td>128.000000</td>\n",
" <td>106.0</td>\n",
" <td>162.0</td>\n",
" <td>12940.0</td>\n",
" <td>22625.0</td>\n",
" <td>18063.181818</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" horsepower price \n",
" mean_bhp min_bhp max_bhp min_price max_price avg_price\n",
"make \n",
"audi 116.750000 102.0 140.0 13950.0 23875.0 18246.250000\n",
"bmw 111.000000 101.0 121.0 16430.0 21105.0 18857.500000\n",
"chevrolet 62.666667 48.0 70.0 5151.0 6575.0 6007.000000\n",
"dodge 84.375000 68.0 145.0 5572.0 12964.0 7790.125000\n",
"honda 80.230769 58.0 101.0 5399.0 12945.0 8184.692308\n",
"jaguar 176.000000 176.0 176.0 32250.0 32250.0 32250.000000\n",
"mazda 80.000000 68.0 120.0 5195.0 18280.0 9080.000000\n",
"mercedes-benz 129.400000 123.0 155.0 25552.0 35056.0 29726.400000\n",
"mitsubishi 91.800000 68.0 116.0 5389.0 9959.0 7813.000000\n",
"nissan 102.555556 55.0 200.0 5499.0 19699.0 10415.666667\n",
"peugot 102.285714 95.0 142.0 11900.0 18150.0 15758.571429\n",
"plymouth 77.000000 68.0 102.0 5572.0 8921.0 7163.333333\n",
"porsche 143.000000 143.0 143.0 22018.0 22018.0 22018.000000\n",
"saab 126.666667 110.0 160.0 11850.0 18620.0 15223.333333\n",
"subaru 86.250000 69.0 111.0 5118.0 11694.0 8541.250000\n",
"toyota 90.741935 56.0 161.0 5348.0 17669.0 9696.645161\n",
"volkswagen 77.125000 52.0 100.0 7775.0 9995.0 8738.125000\n",
"volvo 128.000000 106.0 162.0 12940.0 22625.0 18063.181818"
]
},
"execution_count": 53,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ops = { 'price': { 'max_price': 'max',\n",
" 'min_price': 'min',\n",
" 'avg_price': 'mean'},\n",
" 'horsepower': { 'max_bhp': 'max', \n",
" 'min_bhp': 'min',\n",
" 'mean_bhp': 'mean'}\n",
" }\n",
"auto.groupby('make').agg(ops)"
]
}
],
"metadata": {
"anaconda-cloud": {},
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.1"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment