{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Merging DataFrames: “Merging” two datasets is the process of bringing two datasets \n",
    "together into one, and aligning the rows from each based on common attributes or columns.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "pd.merge(....)\n",
    "Parameters:\n",
    "left : DataFrame\n",
    "right : DataFrame\n",
    "how : {‘left’, ‘right’, ‘outer’, ‘inner’}, default ‘inner’\n",
    "\n",
    "left: use only keys from left frame, similar to a SQL left outer join; preserve key order\n",
    "right: use only keys from right frame, similar to a SQL right outer join; preserve key order\n",
    "outer: use union of keys from both frames, similar to a SQL full outer join; sort keys \n",
    "    lexicographically\n",
    "inner: use intersection of keys from both frames, similar to a SQL inner join; preserve the order of\n",
    "       the left keys\n",
    "on : label or list:Column or index level names to join on. These must be found in both DataFrames. \n",
    "     If on is None and not merging on indexes then this defaults to the intersection of the columns \n",
    "      in both DataFrames."
   ]
  },
  {
   "attachments": {
    "join-types-merge-names.jpg": {
     "image/jpeg": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![join-types-merge-names.jpg](attachment:join-types-merge-names.jpg)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "  employee        group\n",
      "0      Bob   Accounting\n",
      "1     Jake  Engineering\n",
      "2     Lisa  Engineering\n",
      "3      Sue           HR\n",
      "  employee  hire_date\n",
      "0     Lisa       2004\n",
      "1      Bob       2008\n",
      "2     Jake       2012\n",
      "3      Sue       2014\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "df1 = pd.DataFrame({'employee': ['Bob', 'Jake', 'Lisa', 'Sue'],\n",
    "                    'group': ['Accounting', 'Engineering', 'Engineering', 'HR']})\n",
    "df2 = pd.DataFrame({'employee': ['Lisa', 'Bob', 'Jake', 'Sue'],\n",
    "                    'hire_date': [2004, 2008, 2012, 2014]})\n",
    "print(df1)\n",
    "print(df2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "  employee        group  hire_date\n",
      "0      Bob   Accounting       2008\n",
      "1     Jake  Engineering       2012\n",
      "2     Lisa  Engineering       2004\n",
      "3      Sue           HR       2014\n",
      "  employee        group  hire_date\n",
      "0      Bob   Accounting       2008\n",
      "1     Jake  Engineering       2012\n",
      "2     Lisa  Engineering       2004\n",
      "3      Sue           HR       2014\n",
      "  employee        group  hire_date\n",
      "0      Bob   Accounting       2008\n",
      "1     Jake  Engineering       2012\n",
      "2     Lisa  Engineering       2004\n",
      "3      Sue           HR       2014\n"
     ]
    }
   ],
   "source": [
    "print(pd.merge(df1, df2))#by default the common column in the dataframe\n",
    "print(pd.merge(df1, df2, on='employee'))\n",
    "df3 = pd.merge(df1, df2, on='employee')\n",
    "print(df3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "  employee        group  hire_date\n",
      "0      Bob   Accounting       2008\n",
      "1     Jake  Engineering       2012\n",
      "2     Lisa  Engineering       2004\n",
      "3      Sue           HR       2014\n",
      "         group supervisor\n",
      "0   Accounting      Carly\n",
      "1  Engineering      Guido\n",
      "2           HR      Steve\n"
     ]
    }
   ],
   "source": [
    "df4 = pd.DataFrame({'group': ['Accounting', 'Engineering', 'HR'],\n",
    "                    'supervisor': ['Carly', 'Guido', 'Steve']})\n",
    "print(df3)\n",
    "print(df4)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "  employee        group  hire_date supervisor\n",
      "0      Bob   Accounting       2008      Carly\n",
      "1     Jake  Engineering       2012      Guido\n",
      "2     Lisa  Engineering       2004      Guido\n",
      "3      Sue           HR       2014      Steve\n"
     ]
    }
   ],
   "source": [
    "print(pd.merge(df3, df4))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "  employee        group\n",
      "0      Bob   Accounting\n",
      "1     Jake  Engineering\n",
      "2     Lisa  Engineering\n",
      "3      Sue           HR\n",
      "         group        skills\n",
      "0   Accounting          math\n",
      "1   Accounting  spreadsheets\n",
      "2  Engineering        coding\n",
      "3  Engineering         linux\n",
      "4           HR  spreadsheets\n",
      "5           HR  organization\n"
     ]
    }
   ],
   "source": [
    "#Many-to-one joins\n",
    "df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',\n",
    "                              'Engineering', 'Engineering', 'HR', 'HR'],\n",
    "                    'skills': ['math', 'spreadsheets', 'coding', 'linux',\n",
    "                               'spreadsheets', 'organization']})\n",
    "print(df1)\n",
    "print(df5)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "  employee        group        skills\n",
      "0      Bob   Accounting          math\n",
      "1      Bob   Accounting  spreadsheets\n",
      "2     Jake  Engineering        coding\n",
      "3     Jake  Engineering         linux\n",
      "4     Lisa  Engineering        coding\n",
      "5     Lisa  Engineering         linux\n",
      "6      Sue           HR  spreadsheets\n",
      "7      Sue           HR  organization\n"
     ]
    }
   ],
   "source": [
    "print(pd.merge(df1, df5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "  employee        group\n",
      "0      Bob   Accounting\n",
      "1     Jake  Engineering\n",
      "2     Lisa  Engineering\n",
      "3      Sue           HR\n",
      "   name  salary\n",
      "0   Bob   70000\n",
      "1  Jake   80000\n",
      "2  Lisa  120000\n",
      "3   Sue   90000\n"
     ]
    }
   ],
   "source": [
    "#The left_on and right_on keywords\n",
    "#At times you may wish to merge two datasets with different column names;\n",
    "#for example, we may have a dataset in which the employee name is labeled as \"name\" rather than \n",
    "#\"employee\".\n",
    "df3 = pd.DataFrame({'name': ['Bob', 'Jake', 'Lisa', 'Sue'],\n",
    "                    'salary': [70000, 80000, 120000, 90000]})\n",
    "print(df1)\n",
    "print(df3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "  employee        group  name  salary\n",
      "0      Bob   Accounting   Bob   70000\n",
      "1     Jake  Engineering  Jake   80000\n",
      "2     Lisa  Engineering  Lisa  120000\n",
      "3      Sue           HR   Sue   90000\n"
     ]
    }
   ],
   "source": [
    "print(pd.merge(df1, df3, left_on=\"employee\", right_on=\"name\"))#treating dataframes with diff. column names"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    name   food\n",
      "0  Peter   fish\n",
      "1   Paul  beans\n",
      "2   Mary  bread\n",
      "     name drink\n",
      "0    Mary  wine\n",
      "1  Joseph  beer\n"
     ]
    }
   ],
   "source": [
    "df6 = pd.DataFrame({'name': ['Peter', 'Paul', 'Mary'],\n",
    "                    'food': ['fish', 'beans', 'bread']},\n",
    "                   columns=['name', 'food'])\n",
    "df7 = pd.DataFrame({'name': ['Mary', 'Joseph'],\n",
    "                    'drink': ['wine', 'beer']},\n",
    "                   columns=['name', 'drink'])\n",
    "print(df6)\n",
    "print(df7)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   name   food drink\n",
      "0  Mary  bread  wine\n"
     ]
    }
   ],
   "source": [
    "print(pd.merge(df6, df7))#by default it is inner merge"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>name</th>\n",
       "      <th>food</th>\n",
       "      <th>drink</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Mary</td>\n",
       "      <td>bread</td>\n",
       "      <td>wine</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   name   food drink\n",
       "0  Mary  bread  wine"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.merge(df6, df7, how='inner')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    name   food\n",
      "0  Peter   fish\n",
      "1   Paul  beans\n",
      "2   Mary  bread\n",
      "     name drink\n",
      "0    Mary  wine\n",
      "1  Joseph  beer\n"
     ]
    }
   ],
   "source": [
    "print(df6)\n",
    "print(df7)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    name   food drink\n",
      "0  Peter   fish   NaN\n",
      "1   Paul  beans   NaN\n",
      "2   Mary  bread  wine\n",
      "     name   food drink\n",
      "0    Mary  bread  wine\n",
      "1  Joseph    NaN  beer\n",
      "     name   food drink\n",
      "0   Peter   fish   NaN\n",
      "1    Paul  beans   NaN\n",
      "2    Mary  bread  wine\n",
      "3  Joseph    NaN  beer\n"
     ]
    }
   ],
   "source": [
    "print(pd.merge(df6, df7, how='left'))\n",
    "print(pd.merge(df6, df7, how='right'))\n",
    "print(pd.merge(df6, df7, how='outer'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "print(df6)\n",
    "print(df7)\n",
    "print(pd.merge(df6, df7, how='left'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "print(df6)\n",
    "print(df7)\n",
    "print(pd.merge(df6, df7, how='right'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "strng ='ABC'\n",
    "for i in range(len(strng)):\n",
    "    print(strng[i] + str(i))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "GroupBy function:\n",
    "Pandas’ GroupBy is a powerful and versatile function in Python. \n",
    "It allows you to split your data into separate groups to perform computations for better analysis."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Item_Identifier</th>\n",
       "      <th>Item_Weight</th>\n",
       "      <th>Item_Fat_Content</th>\n",
       "      <th>Item_Visibility</th>\n",
       "      <th>Item_Type</th>\n",
       "      <th>Item_MRP</th>\n",
       "      <th>Outlet_Identifier</th>\n",
       "      <th>Outlet_Establishment_Year</th>\n",
       "      <th>Outlet_Size</th>\n",
       "      <th>Outlet_Location_Type</th>\n",
       "      <th>Outlet_Type</th>\n",
       "      <th>Item_Outlet_Sales</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>FDA15</td>\n",
       "      <td>9.30</td>\n",
       "      <td>Low Fat</td>\n",
       "      <td>0.016047</td>\n",
       "      <td>Dairy</td>\n",
       "      <td>249.8092</td>\n",
       "      <td>OUT049</td>\n",
       "      <td>1999</td>\n",
       "      <td>Medium</td>\n",
       "      <td>Tier 1</td>\n",
       "      <td>Supermarket Type1</td>\n",
       "      <td>3735.1380</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>DRC01</td>\n",
       "      <td>5.92</td>\n",
       "      <td>Regular</td>\n",
       "      <td>0.019278</td>\n",
       "      <td>Soft Drinks</td>\n",
       "      <td>48.2692</td>\n",
       "      <td>OUT018</td>\n",
       "      <td>2009</td>\n",
       "      <td>Medium</td>\n",
       "      <td>Tier 3</td>\n",
       "      <td>Supermarket Type2</td>\n",
       "      <td>443.4228</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>FDN15</td>\n",
       "      <td>17.50</td>\n",
       "      <td>Low Fat</td>\n",
       "      <td>0.016760</td>\n",
       "      <td>Meat</td>\n",
       "      <td>141.6180</td>\n",
       "      <td>OUT049</td>\n",
       "      <td>1999</td>\n",
       "      <td>Medium</td>\n",
       "      <td>Tier 1</td>\n",
       "      <td>Supermarket Type1</td>\n",
       "      <td>2097.2700</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>FDX07</td>\n",
       "      <td>19.20</td>\n",
       "      <td>Regular</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>Fruits and Vegetables</td>\n",
       "      <td>182.0950</td>\n",
       "      <td>OUT010</td>\n",
       "      <td>1998</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Tier 3</td>\n",
       "      <td>Grocery Store</td>\n",
       "      <td>732.3800</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>NCD19</td>\n",
       "      <td>8.93</td>\n",
       "      <td>Low Fat</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>Household</td>\n",
       "      <td>53.8614</td>\n",
       "      <td>OUT013</td>\n",
       "      <td>1987</td>\n",
       "      <td>High</td>\n",
       "      <td>Tier 3</td>\n",
       "      <td>Supermarket Type1</td>\n",
       "      <td>994.7052</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  Item_Identifier  Item_Weight Item_Fat_Content  Item_Visibility  \\\n",
       "0           FDA15         9.30          Low Fat         0.016047   \n",
       "1           DRC01         5.92          Regular         0.019278   \n",
       "2           FDN15        17.50          Low Fat         0.016760   \n",
       "3           FDX07        19.20          Regular         0.000000   \n",
       "4           NCD19         8.93          Low Fat         0.000000   \n",
       "\n",
       "               Item_Type  Item_MRP Outlet_Identifier  \\\n",
       "0                  Dairy  249.8092            OUT049   \n",
       "1            Soft Drinks   48.2692            OUT018   \n",
       "2                   Meat  141.6180            OUT049   \n",
       "3  Fruits and Vegetables  182.0950            OUT010   \n",
       "4              Household   53.8614            OUT013   \n",
       "\n",
       "   Outlet_Establishment_Year Outlet_Size Outlet_Location_Type  \\\n",
       "0                       1999      Medium               Tier 1   \n",
       "1                       2009      Medium               Tier 3   \n",
       "2                       1999      Medium               Tier 1   \n",
       "3                       1998         NaN               Tier 3   \n",
       "4                       1987        High               Tier 3   \n",
       "\n",
       "         Outlet_Type  Item_Outlet_Sales  \n",
       "0  Supermarket Type1          3735.1380  \n",
       "1  Supermarket Type2           443.4228  \n",
       "2  Supermarket Type1          2097.2700  \n",
       "3      Grocery Store           732.3800  \n",
       "4  Supermarket Type1           994.7052  "
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "df = pd.read_csv('train_mart.csv')\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "dfg = df.groupby('Outlet_Location_Type')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'Tier 1': [0, 2, 10, 11, 12, 13, 15, 17, 23, 24, 29, 34, 35, 40, 42, 48, 49, 50, 57, 58, 59, 63, 69, 70, 74, 75, 76, 77, 80, 81, 83, 88, 89, 91, 95, 96, 99, 102, 108, 110, 112, 115, 126, 131, 135, 143, 145, 154, 163, 164, 178, 182, 186, 187, 189, 190, 191, 195, 196, 197, 204, 206, 208, 220, 222, 225, 227, 234, 236, 248, 250, 252, 255, 270, 274, 284, 289, 295, 297, 299, 301, 308, 311, 312, 321, 324, 334, 336, 344, 345, 346, 347, 348, 353, 354, 355, 356, 358, 361, 363, ...], 'Tier 2': [8, 9, 19, 22, 25, 26, 33, 46, 47, 53, 54, 56, 61, 66, 67, 68, 72, 73, 78, 79, 85, 86, 92, 93, 94, 97, 100, 107, 111, 114, 116, 117, 118, 120, 121, 123, 124, 125, 127, 129, 137, 138, 140, 141, 142, 144, 146, 147, 148, 149, 150, 157, 158, 165, 166, 170, 171, 176, 179, 181, 188, 192, 200, 201, 202, 207, 210, 211, 212, 213, 219, 221, 223, 228, 232, 233, 240, 241, 242, 243, 244, 245, 247, 249, 254, 256, 258, 259, 261, 262, 263, 264, 268, 273, 277, 281, 283, 285, 288, 290, ...], 'Tier 3': [1, 3, 4, 5, 6, 7, 14, 16, 18, 20, 21, 27, 28, 30, 31, 32, 36, 37, 38, 39, 41, 43, 44, 45, 51, 52, 55, 60, 62, 64, 65, 71, 82, 84, 87, 90, 98, 101, 103, 104, 105, 106, 109, 113, 119, 122, 128, 130, 132, 133, 134, 136, 139, 151, 152, 153, 155, 156, 159, 160, 161, 162, 167, 168, 169, 172, 173, 174, 175, 177, 180, 183, 184, 185, 193, 194, 198, 199, 203, 205, 209, 214, 215, 216, 217, 218, 224, 226, 229, 230, 231, 235, 237, 238, 239, 246, 251, 253, 257, 260, ...]}"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dfg.groups"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Item_Identifier</th>\n",
       "      <th>Item_Weight</th>\n",
       "      <th>Item_Fat_Content</th>\n",
       "      <th>Item_Visibility</th>\n",
       "      <th>Item_Type</th>\n",
       "      <th>Item_MRP</th>\n",
       "      <th>Outlet_Identifier</th>\n",
       "      <th>Outlet_Establishment_Year</th>\n",
       "      <th>Outlet_Size</th>\n",
       "      <th>Outlet_Type</th>\n",
       "      <th>Item_Outlet_Sales</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Outlet_Location_Type</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>Tier 1</th>\n",
       "      <td>2388</td>\n",
       "      <td>1860</td>\n",
       "      <td>2388</td>\n",
       "      <td>2388</td>\n",
       "      <td>2388</td>\n",
       "      <td>2388</td>\n",
       "      <td>2388</td>\n",
       "      <td>2388</td>\n",
       "      <td>2388</td>\n",
       "      <td>2388</td>\n",
       "      <td>2388</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Tier 2</th>\n",
       "      <td>2785</td>\n",
       "      <td>2785</td>\n",
       "      <td>2785</td>\n",
       "      <td>2785</td>\n",
       "      <td>2785</td>\n",
       "      <td>2785</td>\n",
       "      <td>2785</td>\n",
       "      <td>2785</td>\n",
       "      <td>930</td>\n",
       "      <td>2785</td>\n",
       "      <td>2785</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Tier 3</th>\n",
       "      <td>3350</td>\n",
       "      <td>2415</td>\n",
       "      <td>3350</td>\n",
       "      <td>3350</td>\n",
       "      <td>3350</td>\n",
       "      <td>3350</td>\n",
       "      <td>3350</td>\n",
       "      <td>3350</td>\n",
       "      <td>2795</td>\n",
       "      <td>3350</td>\n",
       "      <td>3350</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                      Item_Identifier  Item_Weight  Item_Fat_Content  \\\n",
       "Outlet_Location_Type                                                   \n",
       "Tier 1                           2388         1860              2388   \n",
       "Tier 2                           2785         2785              2785   \n",
       "Tier 3                           3350         2415              3350   \n",
       "\n",
       "                      Item_Visibility  Item_Type  Item_MRP  Outlet_Identifier  \\\n",
       "Outlet_Location_Type                                                            \n",
       "Tier 1                           2388       2388      2388               2388   \n",
       "Tier 2                           2785       2785      2785               2785   \n",
       "Tier 3                           3350       3350      3350               3350   \n",
       "\n",
       "                      Outlet_Establishment_Year  Outlet_Size  Outlet_Type  \\\n",
       "Outlet_Location_Type                                                        \n",
       "Tier 1                                     2388         2388         2388   \n",
       "Tier 2                                     2785          930         2785   \n",
       "Tier 3                                     3350         2795         3350   \n",
       "\n",
       "                      Item_Outlet_Sales  \n",
       "Outlet_Location_Type                     \n",
       "Tier 1                             2388  \n",
       "Tier 2                             2785  \n",
       "Tier 3                             3350  "
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.groupby('Outlet_Location_Type').count()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "#GroupBy object supports column indexing\n",
    "dfgi = df.groupby('Outlet_Location_Type')['Item_Outlet_Sales']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'Tier 1': [0, 2, 10, 11, 12, 13, 15, 17, 23, 24, 29, 34, 35, 40, 42, 48, 49, 50, 57, 58, 59, 63, 69, 70, 74, 75, 76, 77, 80, 81, 83, 88, 89, 91, 95, 96, 99, 102, 108, 110, 112, 115, 126, 131, 135, 143, 145, 154, 163, 164, 178, 182, 186, 187, 189, 190, 191, 195, 196, 197, 204, 206, 208, 220, 222, 225, 227, 234, 236, 248, 250, 252, 255, 270, 274, 284, 289, 295, 297, 299, 301, 308, 311, 312, 321, 324, 334, 336, 344, 345, 346, 347, 348, 353, 354, 355, 356, 358, 361, 363, ...], 'Tier 2': [8, 9, 19, 22, 25, 26, 33, 46, 47, 53, 54, 56, 61, 66, 67, 68, 72, 73, 78, 79, 85, 86, 92, 93, 94, 97, 100, 107, 111, 114, 116, 117, 118, 120, 121, 123, 124, 125, 127, 129, 137, 138, 140, 141, 142, 144, 146, 147, 148, 149, 150, 157, 158, 165, 166, 170, 171, 176, 179, 181, 188, 192, 200, 201, 202, 207, 210, 211, 212, 213, 219, 221, 223, 228, 232, 233, 240, 241, 242, 243, 244, 245, 247, 249, 254, 256, 258, 259, 261, 262, 263, 264, 268, 273, 277, 281, 283, 285, 288, 290, ...], 'Tier 3': [1, 3, 4, 5, 6, 7, 14, 16, 18, 20, 21, 27, 28, 30, 31, 32, 36, 37, 38, 39, 41, 43, 44, 45, 51, 52, 55, 60, 62, 64, 65, 71, 82, 84, 87, 90, 98, 101, 103, 104, 105, 106, 109, 113, 119, 122, 128, 130, 132, 133, 134, 136, 139, 151, 152, 153, 155, 156, 159, 160, 161, 162, 167, 168, 169, 172, 173, 174, 175, 177, 180, 183, 184, 185, 193, 194, 198, 199, 203, 205, 209, 214, 215, 216, 217, 218, 224, 226, 229, 230, 231, 235, 237, 238, 239, 246, 251, 253, 257, 260, ...]}"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dfgi.groups"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Outlet_Location_Type\n",
       "Tier 1     9779.9362\n",
       "Tier 2     9664.7528\n",
       "Tier 3    13086.9648\n",
       "Name: Item_Outlet_Sales, dtype: float64"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.groupby('Outlet_Location_Type')['Item_Outlet_Sales'].max()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "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>Gender</th>\n",
       "      <th>Height</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>m</td>\n",
       "      <td>172</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>f</td>\n",
       "      <td>171</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>f</td>\n",
       "      <td>169</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>m</td>\n",
       "      <td>173</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>f</td>\n",
       "      <td>170</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>m</td>\n",
       "      <td>175</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>m</td>\n",
       "      <td>178</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  Gender  Height\n",
       "0      m     172\n",
       "1      f     171\n",
       "2      f     169\n",
       "3      m     173\n",
       "4      f     170\n",
       "5      m     175\n",
       "6      m     178"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Split-Apply-Combine Strategy\n",
    "#Using this strategy, a data analyst can break down a big problem into manageable parts, \n",
    "#perform operations on individual parts and combine them back together to answer a specific question.\n",
    "import pandas as pd\n",
    "data = {\n",
    "        'Gender':['m','f','f','m','f','m','m'],\n",
    "        'Height':[172,171,169,173,170,175,178]\n",
    "       }\n",
    "df_sample = pd.DataFrame(data)\n",
    "df_sample"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "  Gender  Height\n",
      "1      f     171\n",
      "2      f     169\n",
      "4      f     170\n"
     ]
    }
   ],
   "source": [
    "#Splitting the data into separate groups:\n",
    "f_filter = df_sample['Gender']=='f'\n",
    "print(df_sample[f_filter])\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "  Gender  Height\n",
      "0      m     172\n",
      "3      m     173\n",
      "5      m     175\n",
      "6      m     178\n"
     ]
    }
   ],
   "source": [
    "m_filter = df_sample['Gender']=='m'\n",
    "print(df_sample[m_filter])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "170.0\n"
     ]
    }
   ],
   "source": [
    "#Applying the operation that we need to perform (average in this case):\n",
    "f_avg = df_sample[f_filter]['Height'].mean()\n",
    "print(f_avg)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "174.5\n"
     ]
    }
   ],
   "source": [
    "m_avg = df_sample[m_filter]['Height'].mean()\n",
    "print(m_avg)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Gender</th>\n",
       "      <th>Height</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>f</td>\n",
       "      <td>170.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>m</td>\n",
       "      <td>174.5</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  Gender  Height\n",
       "0      f   170.0\n",
       "1      m   174.5"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Combine the result to output a DataFrame\n",
    "df_output = pd.DataFrame({\n",
    "                          'Gender':['f','m'],\n",
    "                          'Height':[f_avg,m_avg]\n",
    "                         })\n",
    "df_output"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Gender</th>\n",
       "      <th>Height</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>m</td>\n",
       "      <td>172</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>f</td>\n",
       "      <td>171</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>f</td>\n",
       "      <td>169</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>m</td>\n",
       "      <td>173</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>f</td>\n",
       "      <td>170</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>m</td>\n",
       "      <td>175</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>m</td>\n",
       "      <td>178</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  Gender  Height\n",
       "0      m     172\n",
       "1      f     171\n",
       "2      f     169\n",
       "3      m     173\n",
       "4      f     170\n",
       "5      m     175\n",
       "6      m     178"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_sample"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "#All these three steps can be achieved by using GroupBy with just a single line of code! Here’s how:\n",
    "fg = df_sample.groupby('Gender')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'f': [1, 2, 4], 'm': [0, 3, 5, 6]}"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fg.groups"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fg.groups['f'][0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Gender</th>\n",
       "      <th>Height</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>m</td>\n",
       "      <td>172</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>m</td>\n",
       "      <td>173</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>m</td>\n",
       "      <td>175</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>m</td>\n",
       "      <td>178</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  Gender  Height\n",
       "0      m     172\n",
       "3      m     173\n",
       "5      m     175\n",
       "6      m     178"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fg.get_group('m')"
   ]
  },
  {
   "attachments": {
    "image.png": {
     "image/png": "iVBORw0KGgoAAAANSUhEUgAAAyYAAAGQCAYAAABbO3RzAAAgAElEQVR4Ae2dB5jjxPn/fZSjt6NdIJBc6CQQWEwNBELvBEINgQWWHnrnH2ooywFLC4TeQm8LP8gSCC2hd1g6S47QW+hwdHj/z8gaWxpLlmRLVvv4ee5sadr7fma0fr+eGakivCAAAQhAAAIQgAAEIAABCKRMoJJy+zQPAQhAAAIQgAAEIAABCEBAECYMAghAAAIQgAAEIAABCEAgdQIIk9S7AAMgAAEIQAACEIAABCAAAYQJYwACEIAABCAAAQhAAAIQSJ0AwiT1LsAACEAAAhCAAAQgAAEIQABhwhiAAAQyQaBSqYjzXxijJkyYYJW55557xPlZHau6eEEAAhCAAAQgkB8CfHPnp6+wFAKFJTDPPPPI+PHj6/6pz2GEhVOM1AuLCMLESYPPEIAABCAAgXwQQJjko5+wEgKFJaDFhXp3vpQwueKKK+ozIVqs6PMqry5rzpioPOqfEjy8IAABCEAAAhDIBwGEST76CSshUGgCa6yxhiUklBAxX1p8qDzqpWdD1HmdZgoTncesi2MIQAACEIAABLJLAGGS3b7BMgiUioASJXqmw29WRANRIkXNoCBMNBHeIQABCEAAAvkngDDJfx/iAQQKR0DPeDhnQpQI0S+EiSbBOwQgAAEIQKA4BBAmxelLPIFALgmomRK9TMvpgNof4txjokSKfnmlOWdPtLDR+XmHAAQgAAEIQCD7BBAm2e8jLIRA4Qk4l24pZ/WyLiU2tODYZZddLA5adDjTnDMr6rPOU3hwOAgBCEAAAhAoEAGESYE6E1cgkGcCzv0l6rMSHurlFCY6jxIezjRTmKg0ndfKyH8QgAAEIAABCGSeAMIk812EgRAoNwEtTLRQKTcNvIcABCAAAQgUlwDCpLh9i2cQKAQBhEkhuhEnIAABCEAAAoEEECaBiMgAAQhAAAIQgAAEIAABCCRNAGGSNGHqhwAEIAABCEAAAhCAAAQCCSBMAhGRAQIQgAAEIAABCEAAAhBImgDCJGnC1A8BCEAAAhCAAAQgAAEIBBJAmAQiIgMEIAABCEAAAhCAAAQgkDQBhEnShKkfAhCAAAQgAAEIQAACEAgkgDAJREQGCEAAAhCAAAQgAAEIQCBpAgiTpAlTPwQgAAEIQAACEIAABCAQSABhEoiIDBCAAAQgAAEIQAACEIBA0gQQJkkTpn4IQAACEIAABCAAAQhAIJAAwiQQERkgAAEIQAACEIAABCAAgaQJIEySJkz9EIAABCAAAQhAAAIQgEAgAYRJICIyQAACEIAABCAAAQhAAAJJE0CYJE2Y+iEAAQhAAAIQgAAEIACBQAIIk0BEZIAABCAAAQhAAAIQgAAEkiaAMEmaMPVDAAIQgAAEIAABCEAAAoEEECaBiMgAAQhAAAIQgAAEIAABCCRNAGGSNGHqhwAEIAABCEAAAhCAAAQCCSBMAhGRAQIQgAAEIAABCEAAAhBImgDCJGnC1A8BCEAAAhAoGIEJEyZIpVKRK664omPPdF333HNPx3VRAQQgkG8CCJN89x/WQwACEIAABLpOYPz48bLGGmvILrvs0nHbCJOOEVIBBApDAGFSmK7EEQhAAAIQgEB3CMwzzzyiBYVuUR8r0aJmU5wzKmHS1IyJqlfPnKjZmDiEj7aPdwhAIPsEECbZ7yMshAAEIAABCGSGgBIZarZEvZRw0Mu5tPjQaUpgKHGizodJU/mVqFH/zLqtE/wHAQgUngDCpPBdjIMQgAAEIACB+Ag4xYNzVkOLDz3joVpUIkXlD5umympho2ZPeEEAAuUigDApV3/jLQQgAAEIQKAjAko46KVa+l1VqMWHetcvU5i0StOCRs+yaIGi6+IdAhAoPgGESfH7GA8hAAEIQAACsRDwEh9qZkPNnOg0LTBUg+2kqeVh6p9e0hWL4VQCAQjkggDCJBfdhJEQgAAEIACB9AkosWDOZGghoYWJOlYvJVD07EeYNC1olMhR5fRx+l5jAQQg0C0CCJNukaYdCEAAAhCAQM4JqBkQcyZDCwmn+NBLvLS4CJPmzMv+kpwPFMyHQJsEECZtgqMYBCAAAQhAAAINAlp8qHfz1SrNzOvcUG+mcQwBCBSbAMKk2P2LdxDonMDIgFTtZxLoX0Er1QEZ6bxmnxpGZKCqnoHQJ0M+OZI5PSR9ys8+Z6tRbYma324zUZ7J0KJWCJgEWomPVmnOepyzL87zfIYABMpBAGFSjn7GSwi0R2Coz1rrXR1wyBAtVBILpqMG9+251lwqo8JE8XaJpWbLOQMBCEAAAhAoAgGESRF6ER8gkAiBtH7Nz7MwidoRAYy1CESYRAVLfghAAAIQyCEBhEkOOw2TIdAVAl6zJb4N2wG2XvLlmk1pBN8DfWqJVu2fK9bWAbi1lGrAYylXmPqr9pKzdpeA2W24DYtoi4eocvpW7ZM+1zI1zUbb7mSj69LM2vXLt9NIgAAEIAABCGSKAMIkU92BMRDIDoGRgaolIlxxuqd5OrjW+058jitVqa0I80nXYqYeyOtAPCC/2On1+j2NDHFS16OFgPM9rC1aTPjkt8VeY/+MbtOHjWYR3Akh/CMLBCAAAQhAINsEECbZ7h+sg0BqBJqFiQ66dcBuB9MeMyu1sj7Btuh67OC9qXxQukjr+ttFZosElwiIaktQfiNdiyotykw2CJN2O5NyEIAABCCQQwIIkxx2GiZDoCsEmgRDo9Uha0lWTXhoAaOXaDnfazG+HfD7BN+6fEMPuIN3ne6sV3/2rr9hZ7RPwcIk2BZv2/18E4RJtC4iNwQgAAEIFJoAwqTQ3YtzEOiEgCkoGnU5hYm0EDC1EmY97uC9uXxQesMO7/rN9LDHwcKk2Vaz7iDbjXSEiQmQYwhAAAIQKDEBhEmJOx/XIRBIwBYdzmd7NGYNQi7VCgq+zXTdZv05JgHCxiwf6JRfhhDCpKktU2iYx4bt7frWmHLxM57zEIAABCAAgdwTQJjkvgtxAAJJE7CDa33HLa+7aumAvZ5Hb/5WthnBubmPQmXReynC3pWrLlq86m+XRxhh4mjP01dTmCj3a8+CsZaf9Zl3HAtmU5udUvt6tBBs1z/KQQACEIAABLJNAGGS7f7BOghAoFAEPIRLofzDGQhAAAIQgED7BBAm7bOjJAQgAIHWBOozQXoGyWtWpnUVpEIAAhCAAATKQgBhUpaexk8IQCAVAo09Ofo2y1qkpGIOjUIAAhCAAAQySwBhktmuwTAIQAACEIAABCAAAQiUhwDCpDx9jacQgAAEIAABCEAAAhDILAGESWa7BsMgAAEIQAACEIAABCBQHgIIk/L0NZ5CAAIQgAAEIAABCEAgswQQJpntGgyDAAQgAAEIQAACEIBAeQggTMrT13gKAQhAAAIQgAAEIACBzBJAmGS2azAMAhCAAAQgAAEIQAAC5SGQG2FSqehnADTed9lll1A9dc8994gqH/SaMGGClc9s64orrggqSjoEukLAHJscN/4elJ1FVwYgjUAAAhCAAAQSJBAcrSfYeJSqVdBhCoR55plHwoiTqMJECRReEMgigYkTJwr/YOA1BrI4XrEJAhCAAAQgEIVAroWJFhxaSCjh4vzVVIsWfU4JGfXyy6dnTHR9TpC6rTXWWKM+++JXjyqn2hw/fnzdHmWLM79Kc760jerdq31nXj6Xl4BXQMo5hIoaA7wgAAEIQAACeSeQa2Gi4KtAXokG87MWASrI16JCd5azjDNfGGGi8uuXXz3aFi2MdPv6WLep61GCSQsVM03n4R0CigAiBBHiNwa4QiAAAQhAAAJ5J5B7YaKCehXMm7MMTpGhhYHqrFb5dBklOPQ/NUOiXroOXV6/6wGgy+rzTtGi8jiPnXl1vboe9a59cp7jMwQUAb+glPMIFq6QghIYGZCq4zvJ+m6qDshIYu6OyEBVfQf2yVBibXhVPCR9ys8+Z6tRbYma324zUZ5evnIOAhDwI5B7YeIM+J1Lp6w/3vayKDP498vnFAwmMF2HFh4q3a8elea0yzx2tqPr1fbqdz2DYtrBcbkJIEAQIH5joNxXRkG9H+qzvkuqAw4ZooVKYsF01OA+LvYZFSaKt0ssxeUv9UAAAl4Eci1MdFCvHNOftXDwCv6D8jnLmLDM+s1js2wUYaL3vphtcgwBk4BfUMp5BIs5VjjOO4G0fs3PszCJ2ucBjLUIRJhEBUt+CLRNINfCxLk3QwsFTUJvUleCwZnm/KzyOvOZ4kLXpd51OZXHeazzOOtR58IKE5XXuXRLt6PeeUHAJIAAQYD4jQFzrHCccwJesyW+LtkBtl7y5ZpNaQTfA32NZcquWFsH4NZSqgGPpVxh6q/aS87aXQJmt+E2LKItHqLK6Vu1T/pcy9Q0G217jU/NBF2XZtauX76dRgIEIOBBIFfCRC9z0u/mcictDlS62nfiDPh1GcXAL18UYdKqHpWm2nOKC+exVzvaPvWubOcFAS8CfkEp5xEsXuOFc/klMDJQtb5HXHG6pzs6uNb7TnyOK1WprQjzSddiph7I60A8IL/Y6fX6PY0McVLXo4WA8z2sLVpM+OS3xV5j/4xu04eNZhHcCSH8IwsEIBCGQG6ESRhnyAOBohNAgCBA/MZA0cd+2fxrFiY66NYBux1Me8ys1Mr6BNui67GD96byQekiretvt6dskeASAVFtCcpvpGtRpUWZyQZh0m5nUg4CbRNAmLSNjoIQ6D4Bv6C0fn64X3r0co5KrwzyQMZs3MnM6hdHfwz2Wr+GO2dK1eee/uGava5+rEjvYLAg6/5opMVECTQJhkZrQ9aSrJrw0ALGHEvquBbj2wG/T/Ctyzf0gDt41+nh62/YGe1TsDAJtsXbdj/fBGESrYvIDYEuEECYdAEyTUAgLgJ1AeIpOIalv6cild5BmTjR/tzTL8OeeYMD3dZtUT48n0HptcSiQ5iYfWIJFZ1ey18XI1Zaj/QPt2Ye1xijnqwQMAVFwy6nMJEWAqZWwqzHHbw3lw9Kb9jhXb+ZHvY4WJg022rWHWS7kY4wMQFyDIHUCSBMUu8CDIBAeAItg2H7V3b9q/twf49UKsEBbcs6zQCa40gzMLU+qEhPb6/0+M5geQgRl6Csicy6UPHpg/CjiJy5IWCLDuezPRqzBiGXagUF32a6brP+HJMAYWOWbxtuCGHS1JYpNMxjw/Z2fWtMubTtHQUhAIFwBBAm4TiRCwKZINBSRNjLg+oBrHnsE9C2rDNTZewAvd+xXE3NDjmXPVmzRa1nFrrp7/DgYG3GylzK5eBqiReXEDHtN4SLo6zTl0wMUIxIgIAdXNeXaNb2mLhjZTOP3vytzDGCc3Mfhcqi91KEvStXXbR41d8uAttOl2Om0HC0V+fh9NUjf12MqIc3mnccC2ZTm51SzLUQbNc/ykEAAmEIIEzCUCIPBDJCwBmImp/1r/OmMNEzKGb+/B2by9PsJVI6qLeC/4zOEPkKk+DZkGDhUhMyGRmimAGBDBPwEC4ZthbTIFBGAgiTMvY6PueWQCsxURZhUhde9j4a/2Nz5iHFYz9h4nfenhWp9anee9La/twOagyHQFIE6jNBelbFa1YmqcapFwIQaIcAwqQdapSBQEoEWgmTiebSLfPYZwlQyzozVcacXQg6bh3Id9VvHwFiCQ+f5Wc1URJ+BiilIUmzEMg0gcaeHH2bZS1SMm02xkGgtAQQJqXtehzPI4GWwbQtRPTSraiBbcu6MyFQgoSImZ59YTLY67hFsINxlJkS3W95HM/YDAEIQAACEHASQJg4afAZAhknoINQ7/daYF7c2wWbwiPoOOvCxLTftteaXQk/U6LHQsaHbunMO/744+X5558vnd84DAEIQKATAgiTTuhRFgJdJqCDUP93e0N40HMzHL/O+9eVocDestcM5IOOM2S/51Iu1VfNAkTNong9zK6xl8bbry4PRZoLIPD444/LqFGjZJNNNpEnn3wyIDfJEIAABCCgCCBMGAcQyBGB/IgI7+AZ+5PjkqNhXBpTf/e738lkk00mU001lay33nry0EMPlcZ3HIUABCDQDgGESTvUKAOBlAgQ2CcX2OedbUpDkmZbEHj22Wdl9OjR1gzYdNNNJ9NOO638+te/ln//+98tSpEEAQhAoLwEECbl7Xs8zyGBvAfP2J+csMrhcA5t8rfffitfffWVfP755/LJJ5/IBx98IO+995689dZb8vrrr8srr7wi//nPf+TFF18UJQaeeuopUUupHnnkEXnggQfk3nvvtcTAHXfcIf/85z/l5ptvlptuukmuv/56ufbaa+XKK6+Uyy67TC6++GK54IIL5Nxzz5UzzzxTTj/9dDnllFNkYGBAxo8fL8cee6z8+c9/lsMPP1wOOeQQOeigg2T//feXvffeW/bYYw/ZddddZaeddpK+vj7ZZpttZKuttpJx48bVxYlaojfJJJNYMyirrrqqZUtoCGSEAAQgUAICCJMSdDIuFocAgX1ygX2e2apA2yvgvuqqq6yA+29/+5tvwK02aauA+6ijjgoMuLfffvt6wL3FFlvIpptuKhtttJFssMEGss4668iaa64pq622mvzmN7+xZgaWW245WXrppWWJJZaQxRZbTH7xi1/IQgstJPPPP7/87Gc/k5/85Ccy55xzytixY2WWWWaRmWaaSdTMwtRTTy1TTDGFTDrppNZsg3pXx+r89NNPb+WbddZZrXI//vGPrXpUfapeVf8iiyxitVetVq32f/WrX1n2rLzyypZ9a621lqy77rqW3Wq5lfLj97//vSUktt12W1F+7rzzzvLHP/5R9txzT9lnn30sAXLwwQdbguSII46wePX394vid9JJJ8mpp54qZ5xxhpx11lmWsLnwwgtFcZ9nnnksn/S+oRlnnFEWXHBBSxQV5y8TnmgCSrQqQcwLAhBojwDCpD1ulIJAKgTyHDxje3KiasUVVxT1C7wSBkogKKGgBIMKuJWAUL/cq1/wVcCtftFXAbf6hV/90q9+8Ve//KsZABVUKYGihIoKuNVMgQq41cyBDrjVjIIKuNUMgxI+asbhhhtusGYg/vGPf1gC6c4777RmKO677z558MEHrUDtiSeesGYynnvuOWtmY8KECdZMxxtvvCFvv/22/O9//5MPP/xQPv30U1FjRc2QfPfdd6lcZ3E1qjjMMMMMlrhSy7iUcFK89EuLFd69b/iQJy66T8855xxLFOd9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BOIggDCJgyJ1JE5gq622ks033zzxdvLcgL67hg50a0u50r/DRnxMg4SImR5fyx3X1CQ2VI1+9tbO635kKVfH9KkAAhBImMBaa60lf/7znxNuherLQABhUoZezrmP22yzjWyyySY596I75jeewqqexlq05T9mIB903B3moVrxFCYtZkKs/PE/UTeUrWSCAAQgEJHA66+/LmPHjpUbb7wxYkmyQ8BNAGHi5sFRxgioO29ttNFGGbMKcyAAAQhAAAIQcBK46aabLHGiRAovCLRLAGHSLjnKJU5APaNkgw02SLwdGoAABCAAAQhAoHMCajmXWtbFCwLtEkCYtEuOcokSUE9zX3fddRNtg8ohAAEIQAACEIiXgNoIrzbEm69LL73UPMUxBJoIRBImxdtM28TD80R93X7WHnRmrlu378JUUQ9lc/zTm2jrzpnl6gnZ+LD77rvzi0s2ugIrIAABCEAAApEIqFsHq1sIq1sJ69eXX34p1WpVH/IOAV8CIYVJbZNpLdgt0l1+fLk4ElpsUHXk6v5HZZcSIC36wxIqZnqIct13pt7iXnvtJauvvrp899139XN8gAAEIAABCEAgPwTUQxfVwxfVQxjV6/DDD5dRo0blxwEsTY1ACGGiA1n9K7wZ6KZme3cazuDsQv22sH19UvUVJrV+cz7DIly57mD1amXfffeVVVZZRb7++muvZM5BAAIQgAAEIJATAieccIKstNJK8u2338p0000n00wzjTz55JM5sR4z0yIQUpgoMaJnTUokTFy37KyIM8hPq8NUuyNDqjfUhwFfYWKJEGPpWZhyafl1wAEHWH/Avvjii7RMoF0IQAACEIAABGIkoB6MvOyyy8rss88uM800k1x88cUx1k5VRSQQQphot0soTJTrLYJ/TSa1d1/bzOc7GBb6ljPydelQbZJbYYUV5LPPPutSizQDAQhAAAIQgEDcBNStgtVtg9WPjWuuuaZ1++BJJpmkvu9V3diGFwRaEUCYtKKj0jIWxLvM9bPN77wuHJSu83Xh/ZBDDrF+Tfn444+70BpNQAACEIAABCCQFIFXX31VdtttN0uITD755HVBom/Is/jiiyfVNPUWhADCJKgjMxTEN5nqY5u1jKvVujOfck31J3xCbYZbaqml5IMPPki4JaqHAAQgAAEIQKBbBN544w3ZZpttRM2WzDzzzHWBMvXUU8dr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MwKbbbaZnHTSSZ1VQmkI5JgAwiTHnYfpEAgmUEJhoqA0BfTBpLqWw7RNPTOhOiBDA1VRz5pwP29CCZHG8yf0plxWc3Wtt7rS0IILLihTTTWVjB07Vk499dSutEkj2SPw+OOPy+yzzy7ff/999ozDIgh0iQDCpEugaQYC6RBAmKTDvUWrXsKkUhG9j0Ssh7vpPSZaZOlN8UMyUG0IlRatkJQjArfccovMMMMMliiddtppZcyYMXL88cfLN998kyMvMLVTAr29vXLsscd2Wg3lIZBrAgiTXHcfxkMgiADCJIhQ19O9hIne+G4ZU+sz71kRlnJ1o7/UL9Zff/21fPHFF/Lpp5/KRx99JO+//76888478uabb8qrr74qL7/8soyMjMjzzz8vTz/9tDz55JPy2GOPyUMPPSRqn8Ddd98td911l9x2222ihMff//53Ucu21NO8r776arniiitE7S+56KKL5LzzzpNx48aJEiV61my22WaTaaaZRg488MBuuEwbKRN47rnnLHGqxhwvCJSZAMKkzL2P7yUggDDJXCebwsQ8tvcFeQqTprzRvFMBt/oVXgU/n332WWDA/cwzzwQG3ENDQy0D7rPPPtu6w9Bpp50mJ598spxwwgly3HHHydFHHy1HHnmkHHroofL//t//swLwfffdV/baay/ZbbfdZJdddpEddthBtttuO9l6661lyy23FLX+fuONN5YNN9xQ1ltvPVl77bVl9dVXl1VWWUXUU7KXX355WWaZZWTJJZeUnp4eWXTRReXnP/+5devVeeedV37605/KXHPNJT/60Y9EBf4zzzyzFQwqQTDllFPK5JNPLqNGjZJJJpnE+qyWV6m0GWec0cqrltnMMcccMvfcc1tCQtWplmGpNtTD8FSbSy21lCy77LKywgoryEorrSSrrrqqqGdSKFvXX399y/ZNNtlENt98c/nDH/4g6lfyvr4+mW+++WT06NF1YTLppJNaduy99971c1q08K5v6pHvd+fVu9NOO8lhhx3mPMVnCJSSAMKklN2O0+UhgDDJXF97iAt1u2D3Ui69Od49Q2LdVthTsYTzUgXdk002mRWEq1/j1fIhtWxIBekqWFdBuwreVcCtnqOgAm4V3C+++OJWsK+CfhX8KxGgxIASBSrgViJBiQUlGlTArUSEEhNKVChxoUSGEhtKdCjxoWYBlBhRgZgS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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![image.png](attachment:image.png)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<pandas.core.groupby.generic.DataFrameGroupBy object at 0x000001FAA4BA8430>"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Loop over GroupBy Groups\n",
    "obj = df.groupby('Outlet_Location_Type')\n",
    "obj"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'Tier 1': [0, 2, 10, 11, 12, 13, 15, 17, 23, 24, 29, 34, 35, 40, 42, 48, 49, 50, 57, 58, 59, 63, 69, 70, 74, 75, 76, 77, 80, 81, 83, 88, 89, 91, 95, 96, 99, 102, 108, 110, 112, 115, 126, 131, 135, 143, 145, 154, 163, 164, 178, 182, 186, 187, 189, 190, 191, 195, 196, 197, 204, 206, 208, 220, 222, 225, 227, 234, 236, 248, 250, 252, 255, 270, 274, 284, 289, 295, 297, 299, 301, 308, 311, 312, 321, 324, 334, 336, 344, 345, 346, 347, 348, 353, 354, 355, 356, 358, 361, 363, ...], 'Tier 2': [8, 9, 19, 22, 25, 26, 33, 46, 47, 53, 54, 56, 61, 66, 67, 68, 72, 73, 78, 79, 85, 86, 92, 93, 94, 97, 100, 107, 111, 114, 116, 117, 118, 120, 121, 123, 124, 125, 127, 129, 137, 138, 140, 141, 142, 144, 146, 147, 148, 149, 150, 157, 158, 165, 166, 170, 171, 176, 179, 181, 188, 192, 200, 201, 202, 207, 210, 211, 212, 213, 219, 221, 223, 228, 232, 233, 240, 241, 242, 243, 244, 245, 247, 249, 254, 256, 258, 259, 261, 262, 263, 264, 268, 273, 277, 281, 283, 285, 288, 290, ...], 'Tier 3': [1, 3, 4, 5, 6, 7, 14, 16, 18, 20, 21, 27, 28, 30, 31, 32, 36, 37, 38, 39, 41, 43, 44, 45, 51, 52, 55, 60, 62, 64, 65, 71, 82, 84, 87, 90, 98, 101, 103, 104, 105, 106, 109, 113, 119, 122, 128, 130, 132, 133, 134, 136, 139, 151, 152, 153, 155, 156, 159, 160, 161, 162, 167, 168, 169, 172, 173, 174, 175, 177, 180, 183, 184, 185, 193, 194, 198, 199, 203, 205, 209, 214, 215, 216, 217, 218, 224, 226, 229, 230, 231, 235, 237, 238, 239, 246, 251, 253, 257, 260, ...]}"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "obj.groups"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Tier 1 contains 12 rows\n",
      "Tier 2 contains 12 rows\n",
      "Tier 3 contains 12 rows\n"
     ]
    }
   ],
   "source": [
    "for name,group in obj:\n",
    "    print(name,'contains',group.shape[0],'rows')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Item_Identifier</th>\n",
       "      <th>Item_Weight</th>\n",
       "      <th>Item_Fat_Content</th>\n",
       "      <th>Item_Visibility</th>\n",
       "      <th>Item_Type</th>\n",
       "      <th>Item_MRP</th>\n",
       "      <th>Outlet_Identifier</th>\n",
       "      <th>Outlet_Establishment_Year</th>\n",
       "      <th>Outlet_Size</th>\n",
       "      <th>Outlet_Location_Type</th>\n",
       "      <th>Outlet_Type</th>\n",
       "      <th>Item_Outlet_Sales</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>FDA15</td>\n",
       "      <td>9.30</td>\n",
       "      <td>Low Fat</td>\n",
       "      <td>0.016047</td>\n",
       "      <td>Dairy</td>\n",
       "      <td>249.8092</td>\n",
       "      <td>OUT049</td>\n",
       "      <td>1999</td>\n",
       "      <td>Medium</td>\n",
       "      <td>Tier 1</td>\n",
       "      <td>Supermarket Type1</td>\n",
       "      <td>3735.1380</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>FDN15</td>\n",
       "      <td>17.50</td>\n",
       "      <td>Low Fat</td>\n",
       "      <td>0.016760</td>\n",
       "      <td>Meat</td>\n",
       "      <td>141.6180</td>\n",
       "      <td>OUT049</td>\n",
       "      <td>1999</td>\n",
       "      <td>Medium</td>\n",
       "      <td>Tier 1</td>\n",
       "      <td>Supermarket Type1</td>\n",
       "      <td>2097.2700</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>FDY07</td>\n",
       "      <td>11.80</td>\n",
       "      <td>Low Fat</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>Fruits and Vegetables</td>\n",
       "      <td>45.5402</td>\n",
       "      <td>OUT049</td>\n",
       "      <td>1999</td>\n",
       "      <td>Medium</td>\n",
       "      <td>Tier 1</td>\n",
       "      <td>Supermarket Type1</td>\n",
       "      <td>1516.0266</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>FDA03</td>\n",
       "      <td>18.50</td>\n",
       "      <td>Regular</td>\n",
       "      <td>0.045464</td>\n",
       "      <td>Dairy</td>\n",
       "      <td>144.1102</td>\n",
       "      <td>OUT046</td>\n",
       "      <td>1997</td>\n",
       "      <td>Small</td>\n",
       "      <td>Tier 1</td>\n",
       "      <td>Supermarket Type1</td>\n",
       "      <td>2187.1530</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>FDX32</td>\n",
       "      <td>15.10</td>\n",
       "      <td>Regular</td>\n",
       "      <td>0.100014</td>\n",
       "      <td>Fruits and Vegetables</td>\n",
       "      <td>145.4786</td>\n",
       "      <td>OUT049</td>\n",
       "      <td>1999</td>\n",
       "      <td>Medium</td>\n",
       "      <td>Tier 1</td>\n",
       "      <td>Supermarket Type1</td>\n",
       "      <td>1589.2646</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",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8480</th>\n",
       "      <td>FDQ58</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Low Fat</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>Snack Foods</td>\n",
       "      <td>154.5340</td>\n",
       "      <td>OUT019</td>\n",
       "      <td>1985</td>\n",
       "      <td>Small</td>\n",
       "      <td>Tier 1</td>\n",
       "      <td>Grocery Store</td>\n",
       "      <td>459.4020</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8490</th>\n",
       "      <td>FDU44</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Regular</td>\n",
       "      <td>0.102296</td>\n",
       "      <td>Fruits and Vegetables</td>\n",
       "      <td>162.3552</td>\n",
       "      <td>OUT019</td>\n",
       "      <td>1985</td>\n",
       "      <td>Small</td>\n",
       "      <td>Tier 1</td>\n",
       "      <td>Grocery Store</td>\n",
       "      <td>487.3656</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8492</th>\n",
       "      <td>FDT34</td>\n",
       "      <td>9.30</td>\n",
       "      <td>Low Fat</td>\n",
       "      <td>0.174350</td>\n",
       "      <td>Snack Foods</td>\n",
       "      <td>104.4964</td>\n",
       "      <td>OUT046</td>\n",
       "      <td>1997</td>\n",
       "      <td>Small</td>\n",
       "      <td>Tier 1</td>\n",
       "      <td>Supermarket Type1</td>\n",
       "      <td>2419.5172</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8517</th>\n",
       "      <td>FDF53</td>\n",
       "      <td>20.75</td>\n",
       "      <td>reg</td>\n",
       "      <td>0.083607</td>\n",
       "      <td>Frozen Foods</td>\n",
       "      <td>178.8318</td>\n",
       "      <td>OUT046</td>\n",
       "      <td>1997</td>\n",
       "      <td>Small</td>\n",
       "      <td>Tier 1</td>\n",
       "      <td>Supermarket Type1</td>\n",
       "      <td>3608.6360</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8522</th>\n",
       "      <td>DRG01</td>\n",
       "      <td>14.80</td>\n",
       "      <td>Low Fat</td>\n",
       "      <td>0.044878</td>\n",
       "      <td>Soft Drinks</td>\n",
       "      <td>75.4670</td>\n",
       "      <td>OUT046</td>\n",
       "      <td>1997</td>\n",
       "      <td>Small</td>\n",
       "      <td>Tier 1</td>\n",
       "      <td>Supermarket Type1</td>\n",
       "      <td>765.6700</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>2388 rows × 12 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     Item_Identifier  Item_Weight Item_Fat_Content  Item_Visibility  \\\n",
       "0              FDA15         9.30          Low Fat         0.016047   \n",
       "2              FDN15        17.50          Low Fat         0.016760   \n",
       "10             FDY07        11.80          Low Fat         0.000000   \n",
       "11             FDA03        18.50          Regular         0.045464   \n",
       "12             FDX32        15.10          Regular         0.100014   \n",
       "...              ...          ...              ...              ...   \n",
       "8480           FDQ58          NaN          Low Fat         0.000000   \n",
       "8490           FDU44          NaN          Regular         0.102296   \n",
       "8492           FDT34         9.30          Low Fat         0.174350   \n",
       "8517           FDF53        20.75              reg         0.083607   \n",
       "8522           DRG01        14.80          Low Fat         0.044878   \n",
       "\n",
       "                  Item_Type  Item_MRP Outlet_Identifier  \\\n",
       "0                     Dairy  249.8092            OUT049   \n",
       "2                      Meat  141.6180            OUT049   \n",
       "10    Fruits and Vegetables   45.5402            OUT049   \n",
       "11                    Dairy  144.1102            OUT046   \n",
       "12    Fruits and Vegetables  145.4786            OUT049   \n",
       "...                     ...       ...               ...   \n",
       "8480            Snack Foods  154.5340            OUT019   \n",
       "8490  Fruits and Vegetables  162.3552            OUT019   \n",
       "8492            Snack Foods  104.4964            OUT046   \n",
       "8517           Frozen Foods  178.8318            OUT046   \n",
       "8522            Soft Drinks   75.4670            OUT046   \n",
       "\n",
       "      Outlet_Establishment_Year Outlet_Size Outlet_Location_Type  \\\n",
       "0                          1999      Medium               Tier 1   \n",
       "2                          1999      Medium               Tier 1   \n",
       "10                         1999      Medium               Tier 1   \n",
       "11                         1997       Small               Tier 1   \n",
       "12                         1999      Medium               Tier 1   \n",
       "...                         ...         ...                  ...   \n",
       "8480                       1985       Small               Tier 1   \n",
       "8490                       1985       Small               Tier 1   \n",
       "8492                       1997       Small               Tier 1   \n",
       "8517                       1997       Small               Tier 1   \n",
       "8522                       1997       Small               Tier 1   \n",
       "\n",
       "            Outlet_Type  Item_Outlet_Sales  \n",
       "0     Supermarket Type1          3735.1380  \n",
       "2     Supermarket Type1          2097.2700  \n",
       "10    Supermarket Type1          1516.0266  \n",
       "11    Supermarket Type1          2187.1530  \n",
       "12    Supermarket Type1          1589.2646  \n",
       "...                 ...                ...  \n",
       "8480      Grocery Store           459.4020  \n",
       "8490      Grocery Store           487.3656  \n",
       "8492  Supermarket Type1          2419.5172  \n",
       "8517  Supermarket Type1          3608.6360  \n",
       "8522  Supermarket Type1           765.6700  \n",
       "\n",
       "[2388 rows x 12 columns]"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "obj.get_group('Tier 1')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#Applying Functions to GroupBy Groups\n",
    "count() – Number of non-null observations\n",
    "sum() – Sum of values\n",
    "mean() – Mean of values\n",
    "median() – Arithmetic median of values\n",
    "min() – Minimum\n",
    "max() – Maximum\n",
    "mode() – Mode\n",
    "std() – Standard deviation\n",
    "var() – Variance\n",
    "\n",
    "agg() function in Pandas gives us the flexibility to perform several statistical computations all at once!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr:last-of-type th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th colspan=\"2\" halign=\"left\">Item_Weight</th>\n",
       "      <th colspan=\"2\" halign=\"left\">Item_Visibility</th>\n",
       "      <th colspan=\"2\" halign=\"left\">Item_MRP</th>\n",
       "      <th colspan=\"2\" halign=\"left\">Outlet_Establishment_Year</th>\n",
       "      <th colspan=\"2\" halign=\"left\">Item_Outlet_Sales</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th>mean</th>\n",
       "      <th>median</th>\n",
       "      <th>mean</th>\n",
       "      <th>median</th>\n",
       "      <th>mean</th>\n",
       "      <th>median</th>\n",
       "      <th>mean</th>\n",
       "      <th>median</th>\n",
       "      <th>mean</th>\n",
       "      <th>median</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Outlet_Location_Type</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>Tier 1</th>\n",
       "      <td>12.892124</td>\n",
       "      <td>12.625</td>\n",
       "      <td>0.071205</td>\n",
       "      <td>0.056450</td>\n",
       "      <td>140.870106</td>\n",
       "      <td>143.2641</td>\n",
       "      <td>1995.125628</td>\n",
       "      <td>1997</td>\n",
       "      <td>1876.909159</td>\n",
       "      <td>1487.3972</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Tier 2</th>\n",
       "      <td>12.768628</td>\n",
       "      <td>12.500</td>\n",
       "      <td>0.061038</td>\n",
       "      <td>0.051766</td>\n",
       "      <td>141.167196</td>\n",
       "      <td>143.2812</td>\n",
       "      <td>2004.330341</td>\n",
       "      <td>2004</td>\n",
       "      <td>2323.990559</td>\n",
       "      <td>2004.0580</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Tier 3</th>\n",
       "      <td>12.933745</td>\n",
       "      <td>12.650</td>\n",
       "      <td>0.066751</td>\n",
       "      <td>0.053906</td>\n",
       "      <td>140.935232</td>\n",
       "      <td>142.2483</td>\n",
       "      <td>1994.358507</td>\n",
       "      <td>1987</td>\n",
       "      <td>2279.627651</td>\n",
       "      <td>1812.3076</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                     Item_Weight         Item_Visibility            \\\n",
       "                            mean  median            mean    median   \n",
       "Outlet_Location_Type                                                 \n",
       "Tier 1                 12.892124  12.625        0.071205  0.056450   \n",
       "Tier 2                 12.768628  12.500        0.061038  0.051766   \n",
       "Tier 3                 12.933745  12.650        0.066751  0.053906   \n",
       "\n",
       "                        Item_MRP           Outlet_Establishment_Year         \\\n",
       "                            mean    median                      mean median   \n",
       "Outlet_Location_Type                                                          \n",
       "Tier 1                140.870106  143.2641               1995.125628   1997   \n",
       "Tier 2                141.167196  143.2812               2004.330341   2004   \n",
       "Tier 3                140.935232  142.2483               1994.358507   1987   \n",
       "\n",
       "                     Item_Outlet_Sales             \n",
       "                                  mean     median  \n",
       "Outlet_Location_Type                               \n",
       "Tier 1                     1876.909159  1487.3972  \n",
       "Tier 2                     2323.990559  2004.0580  \n",
       "Tier 3                     2279.627651  1812.3076  "
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.groupby('Outlet_Location_Type').agg([np.mean,np.median])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Outlet_Location_Type</th>\n",
       "      <th>Outlet_Establishment_Year</th>\n",
       "      <th>Outlet_Size</th>\n",
       "      <th>Item_Outlet_Sales</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Tier 1</td>\n",
       "      <td>1985</td>\n",
       "      <td>Small</td>\n",
       "      <td>340.329723</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Tier 1</td>\n",
       "      <td>1997</td>\n",
       "      <td>Small</td>\n",
       "      <td>2277.844267</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Tier 1</td>\n",
       "      <td>1999</td>\n",
       "      <td>Medium</td>\n",
       "      <td>2348.354635</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Tier 2</td>\n",
       "      <td>2002</td>\n",
       "      <td>[]</td>\n",
       "      <td>2192.384798</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Tier 2</td>\n",
       "      <td>2004</td>\n",
       "      <td>Small</td>\n",
       "      <td>2438.841866</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Tier 2</td>\n",
       "      <td>2007</td>\n",
       "      <td>[]</td>\n",
       "      <td>2340.675263</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>Tier 3</td>\n",
       "      <td>1985</td>\n",
       "      <td>Medium</td>\n",
       "      <td>3694.038558</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>Tier 3</td>\n",
       "      <td>1987</td>\n",
       "      <td>High</td>\n",
       "      <td>2298.995256</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>Tier 3</td>\n",
       "      <td>1998</td>\n",
       "      <td>[]</td>\n",
       "      <td>339.351662</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>Tier 3</td>\n",
       "      <td>2009</td>\n",
       "      <td>Medium</td>\n",
       "      <td>1995.498739</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  Outlet_Location_Type  Outlet_Establishment_Year Outlet_Size  \\\n",
       "0               Tier 1                       1985       Small   \n",
       "1               Tier 1                       1997       Small   \n",
       "2               Tier 1                       1999      Medium   \n",
       "3               Tier 2                       2002          []   \n",
       "4               Tier 2                       2004       Small   \n",
       "5               Tier 2                       2007          []   \n",
       "6               Tier 3                       1985      Medium   \n",
       "7               Tier 3                       1987        High   \n",
       "8               Tier 3                       1998          []   \n",
       "9               Tier 3                       2009      Medium   \n",
       "\n",
       "   Item_Outlet_Sales  \n",
       "0         340.329723  \n",
       "1        2277.844267  \n",
       "2        2348.354635  \n",
       "3        2192.384798  \n",
       "4        2438.841866  \n",
       "5        2340.675263  \n",
       "6        3694.038558  \n",
       "7        2298.995256  \n",
       "8         339.351662  \n",
       "9        1995.498739  "
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#GroupBy with multiple indexes to get better insights from our data:\n",
    "df.groupby(['Outlet_Location_Type','Outlet_Establishment_Year'],as_index=False).agg({'Outlet_Size':pd.Series.mode,'Item_Outlet_Sales':np.mean})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "df.groupby(['Outlet_Type','Item_Type']).agg(mean_MRP=('Item_MRP',np.mean),\n",
    "                                            mean_Sales=('Item_Outlet_Sales',np.mean))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Transformation\n",
    "#Transformation allows us to perform some computation on the groups as a whole and then return the\n",
    "#combined DataFrame. This is done using the transform() function.\n",
    "df['Item_Weight'] = df.groupby(['Item_Fat_Content','Item_Type'])['Item_Weight'].transform(lambda x: x.fillna(x.mean()))\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Filtration\n",
    "#Filtration allows us to discard certain values based on computation and return only a subset of \n",
    "#the group. We can do this using the filter() function in Pandas.\n",
    "\n",
    "df.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def filter_func(x):\n",
    "    return x['Item_Weight'].std() < 3\n",
    "\n",
    "df_filter = df.groupby(['Item_Weight']).filter(filter_func)\n",
    "df_filter.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Applying our own functions\n",
    "#Pandas’ apply() function applies a function along an axis of the DataFrame.\n",
    "#When using it with the GroupBy function, we can apply any function to the grouped result.\n",
    "df_apply = df.groupby(['Outlet_Establishment_Year'])['Item_MRP'].apply(lambda x: x - x.mean())\n",
    "df_apply"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     Name subject_id  Marks_scored\n",
      "1    Alex       sub1            98\n",
      "2     Amy       sub2            90\n",
      "3   Allen       sub4            87\n",
      "4   Alice       sub6            69\n",
      "5  Ayoung       sub5            78\n",
      "    Name subject_id  Marks_scored\n",
      "1  Billy       sub2            89\n",
      "2  Brian       sub4            80\n",
      "3   Bran       sub3            79\n",
      "4  Bryce       sub6            97\n",
      "5  Betty       sub5            88\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "one = pd.DataFrame({\n",
    "                     'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],\n",
    "                     'subject_id':['sub1','sub2','sub4','sub6','sub5'],\n",
    "                     'Marks_scored':[98,90,87,69,78]},\n",
    "                      index=[1,2,3,4,5])\n",
    "\n",
    "two = pd.DataFrame({\n",
    "                    'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],\n",
    "                    'subject_id':['sub2','sub4','sub3','sub6','sub5'],\n",
    "                    'Marks_scored':[89,80,79,97,88]},\n",
    "                     index=[1,2,3,4,5])\n",
    "print(one)\n",
    "print(two)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     Name subject_id  Marks_scored\n",
      "1    Alex       sub1            98\n",
      "2     Amy       sub2            90\n",
      "3   Allen       sub4            87\n",
      "4   Alice       sub6            69\n",
      "5  Ayoung       sub5            78\n",
      "1   Billy       sub2            89\n",
      "2   Brian       sub4            80\n",
      "3    Bran       sub3            79\n",
      "4   Bryce       sub6            97\n",
      "5   Betty       sub5            88\n"
     ]
    }
   ],
   "source": [
    "print(pd.concat([one,two]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "one = pd.DataFrame({\n",
    "   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],\n",
    "   'subject_id':['sub1','sub2','sub4','sub6','sub5'],\n",
    "   'Marks_scored':[98,90,87,69,78]},\n",
    "   index=[1,2,3,4,5])\n",
    "\n",
    "two = pd.DataFrame({\n",
    "   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],\n",
    "   'subject_id':['sub2','sub4','sub3','sub6','sub5'],\n",
    "   'Marks_scored':[89,80,79,97,88]},\n",
    "   index=[1,2,3,4,5])\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "       Name subject_id  Marks_scored\n",
      "x 1    Alex       sub1            98\n",
      "  2     Amy       sub2            90\n",
      "  3   Allen       sub4            87\n",
      "  4   Alice       sub6            69\n",
      "  5  Ayoung       sub5            78\n",
      "y 1   Billy       sub2            89\n",
      "  2   Brian       sub4            80\n",
      "  3    Bran       sub3            79\n",
      "  4   Bryce       sub6            97\n",
      "  5   Betty       sub5            88\n"
     ]
    }
   ],
   "source": [
    "print(pd.concat([one,two],keys=['x','y']))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "one = pd.DataFrame({\n",
    "   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],\n",
    "   'subject_id':['sub1','sub2','sub4','sub6','sub5'],\n",
    "   'Marks_scored':[98,90,87,69,78]},\n",
    "   index=[1,2,3,4,5])\n",
    "\n",
    "two = pd.DataFrame({\n",
    "   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],\n",
    "   'subject_id':['sub2','sub4','sub3','sub6','sub5'],\n",
    "   'Marks_scored':[89,80,79,97,88]},\n",
    "   index=[1,2,3,4,5])\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     Name subject_id  Marks_scored\n",
      "0    Alex       sub1            98\n",
      "1     Amy       sub2            90\n",
      "2   Allen       sub4            87\n",
      "3   Alice       sub6            69\n",
      "4  Ayoung       sub5            78\n",
      "5   Billy       sub2            89\n",
      "6   Brian       sub4            80\n",
      "7    Bran       sub3            79\n",
      "8   Bryce       sub6            97\n",
      "9   Betty       sub5            88\n"
     ]
    }
   ],
   "source": [
    "print( pd.concat([one,two],keys=['x','y'],ignore_index=True))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     Name subject_id  Marks_scored   Name subject_id  Marks_scored\n",
      "1    Alex       sub1            98  Billy       sub2            89\n",
      "2     Amy       sub2            90  Brian       sub4            80\n",
      "3   Allen       sub4            87   Bran       sub3            79\n",
      "4   Alice       sub6            69  Bryce       sub6            97\n",
      "5  Ayoung       sub5            78  Betty       sub5            88\n"
     ]
    }
   ],
   "source": [
    "one = pd.DataFrame({\n",
    "   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],\n",
    "   'subject_id':['sub1','sub2','sub4','sub6','sub5'],\n",
    "   'Marks_scored':[98,90,87,69,78]},\n",
    "   index=[1,2,3,4,5])\n",
    "\n",
    "two = pd.DataFrame({\n",
    "   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],\n",
    "   'subject_id':['sub2','sub4','sub3','sub6','sub5'],\n",
    "   'Marks_scored':[89,80,79,97,88]},\n",
    "   index=[1,2,3,4,5])\n",
    "print (pd.concat([one,two],axis=1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [],
   "source": [
    "one = pd.DataFrame({\n",
    "   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],\n",
    "   'subject_id':['sub1','sub2','sub4','sub6','sub5'],\n",
    "   'Marks_scored':[98,90,87,69,78]},\n",
    "   index=[1,2,3,4,5])\n",
    "\n",
    "two = pd.DataFrame({\n",
    "   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],\n",
    "   'subject_id':['sub2','sub4','sub3','sub6','sub5'],\n",
    "   'Marks_scored':[89,80,79,97,88]},\n",
    "   index=[1,2,3,4,5])\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     Name subject_id  Marks_scored\n",
      "1    Alex       sub1            98\n",
      "2     Amy       sub2            90\n",
      "3   Allen       sub4            87\n",
      "4   Alice       sub6            69\n",
      "5  Ayoung       sub5            78\n",
      "1   Billy       sub2            89\n",
      "2   Brian       sub4            80\n",
      "3    Bran       sub3            79\n",
      "4   Bryce       sub6            97\n",
      "5   Betty       sub5            88\n"
     ]
    }
   ],
   "source": [
    "print(one.append(two))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     Name subject_id  Marks_scored\n",
      "1    Alex       sub1            98\n",
      "2     Amy       sub2            90\n",
      "3   Allen       sub4            87\n",
      "4   Alice       sub6            69\n",
      "5  Ayoung       sub5            78\n",
      "1   Billy       sub2            89\n",
      "2   Brian       sub4            80\n",
      "3    Bran       sub3            79\n",
      "4   Bryce       sub6            97\n",
      "5   Betty       sub5            88\n",
      "1    Alex       sub1            98\n",
      "2     Amy       sub2            90\n",
      "3   Allen       sub4            87\n",
      "4   Alice       sub6            69\n",
      "5  Ayoung       sub5            78\n",
      "1   Billy       sub2            89\n",
      "2   Brian       sub4            80\n",
      "3    Bran       sub3            79\n",
      "4   Bryce       sub6            97\n",
      "5   Betty       sub5            88\n"
     ]
    }
   ],
   "source": [
    "one = pd.DataFrame({\n",
    "   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],\n",
    "   'subject_id':['sub1','sub2','sub4','sub6','sub5'],\n",
    "   'Marks_scored':[98,90,87,69,78]},\n",
    "   index=[1,2,3,4,5])\n",
    "\n",
    "two = pd.DataFrame({\n",
    "   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],\n",
    "   'subject_id':['sub2','sub4','sub3','sub6','sub5'],\n",
    "   'Marks_scored':[89,80,79,97,88]},\n",
    "   index=[1,2,3,4,5])\n",
    "print (one.append([two,one,two]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
