Skip to content

Instantly share code, notes, and snippets.

@wonderphil
Created January 26, 2023 15:04
Show Gist options
  • Save wonderphil/11851901e8a5a634bd7c66c37940275b to your computer and use it in GitHub Desktop.
Save wonderphil/11851901e8a5a634bd7c66c37940275b to your computer and use it in GitHub Desktop.
multi-index-example
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"id": "69b32179",
"metadata": {},
"source": [
"# Example of ordering multi-index data\n",
"\n",
"first import the libs and the data\n"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "9b592818",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import yfinance as yf\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "8b902dd1",
"metadata": {},
"outputs": [],
"source": [
"ticker = [\"AAPL\", \"BA\" ]"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "db0c55f3",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[*********************100%***********************] 2 of 2 completed\n"
]
}
],
"source": [
"stocks = yf.download(ticker, start = \"2022-01-01\", end = \"2022-12-24\")"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "729e5846",
"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\">Adj Close</th>\n",
" <th colspan=\"2\" halign=\"left\">Close</th>\n",
" <th colspan=\"2\" halign=\"left\">High</th>\n",
" <th colspan=\"2\" halign=\"left\">Low</th>\n",
" <th colspan=\"2\" halign=\"left\">Open</th>\n",
" <th colspan=\"2\" halign=\"left\">Volume</th>\n",
" </tr>\n",
" <tr>\n",
" <th></th>\n",
" <th>AAPL</th>\n",
" <th>BA</th>\n",
" <th>AAPL</th>\n",
" <th>BA</th>\n",
" <th>AAPL</th>\n",
" <th>BA</th>\n",
" <th>AAPL</th>\n",
" <th>BA</th>\n",
" <th>AAPL</th>\n",
" <th>BA</th>\n",
" <th>AAPL</th>\n",
" <th>BA</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Date</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2022-01-03 00:00:00-05:00</th>\n",
" <td>180.959732</td>\n",
" <td>207.860001</td>\n",
" <td>182.009995</td>\n",
" <td>207.860001</td>\n",
" <td>182.880005</td>\n",
" <td>210.550003</td>\n",
" <td>177.710007</td>\n",
" <td>203.339996</td>\n",
" <td>177.830002</td>\n",
" <td>204.000000</td>\n",
" <td>104487900</td>\n",
" <td>9060200</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2022-01-04 00:00:00-05:00</th>\n",
" <td>178.663086</td>\n",
" <td>213.630005</td>\n",
" <td>179.699997</td>\n",
" <td>213.630005</td>\n",
" <td>182.940002</td>\n",
" <td>214.559998</td>\n",
" <td>179.119995</td>\n",
" <td>209.779999</td>\n",
" <td>182.630005</td>\n",
" <td>211.300003</td>\n",
" <td>99310400</td>\n",
" <td>11414600</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2022-01-05 00:00:00-05:00</th>\n",
" <td>173.910660</td>\n",
" <td>213.070007</td>\n",
" <td>174.919998</td>\n",
" <td>213.070007</td>\n",
" <td>180.169998</td>\n",
" <td>218.929993</td>\n",
" <td>174.639999</td>\n",
" <td>211.809998</td>\n",
" <td>179.610001</td>\n",
" <td>216.639999</td>\n",
" <td>94537600</td>\n",
" <td>11564700</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2022-01-06 00:00:00-05:00</th>\n",
" <td>171.007507</td>\n",
" <td>211.339996</td>\n",
" <td>172.000000</td>\n",
" <td>211.339996</td>\n",
" <td>175.300003</td>\n",
" <td>216.000000</td>\n",
" <td>171.639999</td>\n",
" <td>207.860001</td>\n",
" <td>172.699997</td>\n",
" <td>214.639999</td>\n",
" <td>96904000</td>\n",
" <td>7142200</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2022-01-07 00:00:00-05:00</th>\n",
" <td>171.176544</td>\n",
" <td>215.500000</td>\n",
" <td>172.169998</td>\n",
" <td>215.500000</td>\n",
" <td>174.139999</td>\n",
" <td>218.320007</td>\n",
" <td>171.029999</td>\n",
" <td>212.380005</td>\n",
" <td>172.889999</td>\n",
" <td>212.979996</td>\n",
" <td>86709100</td>\n",
" <td>9526400</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Adj Close Close \\\n",
" AAPL BA AAPL BA \n",
"Date \n",
"2022-01-03 00:00:00-05:00 180.959732 207.860001 182.009995 207.860001 \n",
"2022-01-04 00:00:00-05:00 178.663086 213.630005 179.699997 213.630005 \n",
"2022-01-05 00:00:00-05:00 173.910660 213.070007 174.919998 213.070007 \n",
"2022-01-06 00:00:00-05:00 171.007507 211.339996 172.000000 211.339996 \n",
"2022-01-07 00:00:00-05:00 171.176544 215.500000 172.169998 215.500000 \n",
"\n",
" High Low \\\n",
" AAPL BA AAPL BA \n",
"Date \n",
"2022-01-03 00:00:00-05:00 182.880005 210.550003 177.710007 203.339996 \n",
"2022-01-04 00:00:00-05:00 182.940002 214.559998 179.119995 209.779999 \n",
"2022-01-05 00:00:00-05:00 180.169998 218.929993 174.639999 211.809998 \n",
"2022-01-06 00:00:00-05:00 175.300003 216.000000 171.639999 207.860001 \n",
"2022-01-07 00:00:00-05:00 174.139999 218.320007 171.029999 212.380005 \n",
"\n",
" Open Volume \n",
" AAPL BA AAPL BA \n",
"Date \n",
"2022-01-03 00:00:00-05:00 177.830002 204.000000 104487900 9060200 \n",
"2022-01-04 00:00:00-05:00 182.630005 211.300003 99310400 11414600 \n",
"2022-01-05 00:00:00-05:00 179.610001 216.639999 94537600 11564700 \n",
"2022-01-06 00:00:00-05:00 172.699997 214.639999 96904000 7142200 \n",
"2022-01-07 00:00:00-05:00 172.889999 212.979996 86709100 9526400 "
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"stocks.head()"
]
},
{
"cell_type": "markdown",
"id": "77c294cb",
"metadata": {},
"source": [
"See how the above is listed as Adj Close and then the ticker, then Close and then Ticker and so on and so forth, it much better to have the ticker with all the Adj close, close, high, lowe, open and Volume\n"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "86cfc0c4",
"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=\"6\" halign=\"left\">AAPL</th>\n",
" <th colspan=\"6\" halign=\"left\">BA</th>\n",
" </tr>\n",
" <tr>\n",
" <th></th>\n",
" <th>Adj Close</th>\n",
" <th>Close</th>\n",
" <th>High</th>\n",
" <th>Low</th>\n",
" <th>Open</th>\n",
" <th>Volume</th>\n",
" <th>Adj Close</th>\n",
" <th>Close</th>\n",
" <th>High</th>\n",
" <th>Low</th>\n",
" <th>Open</th>\n",
" <th>Volume</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Date</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2022-01-03 00:00:00-05:00</th>\n",
" <td>180.959732</td>\n",
" <td>182.009995</td>\n",
" <td>182.880005</td>\n",
" <td>177.710007</td>\n",
" <td>177.830002</td>\n",
" <td>104487900</td>\n",
" <td>207.860001</td>\n",
" <td>207.860001</td>\n",
" <td>210.550003</td>\n",
" <td>203.339996</td>\n",
" <td>204.000000</td>\n",
" <td>9060200</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2022-01-04 00:00:00-05:00</th>\n",
" <td>178.663086</td>\n",
" <td>179.699997</td>\n",
" <td>182.940002</td>\n",
" <td>179.119995</td>\n",
" <td>182.630005</td>\n",
" <td>99310400</td>\n",
" <td>213.630005</td>\n",
" <td>213.630005</td>\n",
" <td>214.559998</td>\n",
" <td>209.779999</td>\n",
" <td>211.300003</td>\n",
" <td>11414600</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2022-01-05 00:00:00-05:00</th>\n",
" <td>173.910660</td>\n",
" <td>174.919998</td>\n",
" <td>180.169998</td>\n",
" <td>174.639999</td>\n",
" <td>179.610001</td>\n",
" <td>94537600</td>\n",
" <td>213.070007</td>\n",
" <td>213.070007</td>\n",
" <td>218.929993</td>\n",
" <td>211.809998</td>\n",
" <td>216.639999</td>\n",
" <td>11564700</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2022-01-06 00:00:00-05:00</th>\n",
" <td>171.007507</td>\n",
" <td>172.000000</td>\n",
" <td>175.300003</td>\n",
" <td>171.639999</td>\n",
" <td>172.699997</td>\n",
" <td>96904000</td>\n",
" <td>211.339996</td>\n",
" <td>211.339996</td>\n",
" <td>216.000000</td>\n",
" <td>207.860001</td>\n",
" <td>214.639999</td>\n",
" <td>7142200</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2022-01-07 00:00:00-05:00</th>\n",
" <td>171.176544</td>\n",
" <td>172.169998</td>\n",
" <td>174.139999</td>\n",
" <td>171.029999</td>\n",
" <td>172.889999</td>\n",
" <td>86709100</td>\n",
" <td>215.500000</td>\n",
" <td>215.500000</td>\n",
" <td>218.320007</td>\n",
" <td>212.380005</td>\n",
" <td>212.979996</td>\n",
" <td>9526400</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>2022-12-19 00:00:00-05:00</th>\n",
" <td>132.369995</td>\n",
" <td>132.369995</td>\n",
" <td>135.199997</td>\n",
" <td>131.320007</td>\n",
" <td>135.110001</td>\n",
" <td>79592600</td>\n",
" <td>185.679993</td>\n",
" <td>185.679993</td>\n",
" <td>188.039993</td>\n",
" <td>184.710007</td>\n",
" <td>184.919998</td>\n",
" <td>6605400</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2022-12-20 00:00:00-05:00</th>\n",
" <td>132.300003</td>\n",
" <td>132.300003</td>\n",
" <td>133.250000</td>\n",
" <td>129.889999</td>\n",
" <td>131.389999</td>\n",
" <td>77432800</td>\n",
" <td>188.289993</td>\n",
" <td>188.289993</td>\n",
" <td>189.910004</td>\n",
" <td>185.740005</td>\n",
" <td>186.179993</td>\n",
" <td>6156800</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2022-12-21 00:00:00-05:00</th>\n",
" <td>135.449997</td>\n",
" <td>135.449997</td>\n",
" <td>136.809998</td>\n",
" <td>132.750000</td>\n",
" <td>132.979996</td>\n",
" <td>85928000</td>\n",
" <td>196.000000</td>\n",
" <td>196.000000</td>\n",
" <td>196.399994</td>\n",
" <td>189.720001</td>\n",
" <td>190.039993</td>\n",
" <td>9175400</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2022-12-22 00:00:00-05:00</th>\n",
" <td>132.229996</td>\n",
" <td>132.229996</td>\n",
" <td>134.559998</td>\n",
" <td>130.300003</td>\n",
" <td>134.350006</td>\n",
" <td>77852100</td>\n",
" <td>188.250000</td>\n",
" <td>188.250000</td>\n",
" <td>194.169998</td>\n",
" <td>185.669998</td>\n",
" <td>193.820007</td>\n",
" <td>6924800</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2022-12-23 00:00:00-05:00</th>\n",
" <td>131.860001</td>\n",
" <td>131.860001</td>\n",
" <td>132.419998</td>\n",
" <td>129.639999</td>\n",
" <td>130.919998</td>\n",
" <td>63814900</td>\n",
" <td>189.059998</td>\n",
" <td>189.059998</td>\n",
" <td>189.429993</td>\n",
" <td>184.720001</td>\n",
" <td>188.250000</td>\n",
" <td>3983600</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>247 rows × 12 columns</p>\n",
"</div>"
],
"text/plain": [
" AAPL \\\n",
" Adj Close Close High Low \n",
"Date \n",
"2022-01-03 00:00:00-05:00 180.959732 182.009995 182.880005 177.710007 \n",
"2022-01-04 00:00:00-05:00 178.663086 179.699997 182.940002 179.119995 \n",
"2022-01-05 00:00:00-05:00 173.910660 174.919998 180.169998 174.639999 \n",
"2022-01-06 00:00:00-05:00 171.007507 172.000000 175.300003 171.639999 \n",
"2022-01-07 00:00:00-05:00 171.176544 172.169998 174.139999 171.029999 \n",
"... ... ... ... ... \n",
"2022-12-19 00:00:00-05:00 132.369995 132.369995 135.199997 131.320007 \n",
"2022-12-20 00:00:00-05:00 132.300003 132.300003 133.250000 129.889999 \n",
"2022-12-21 00:00:00-05:00 135.449997 135.449997 136.809998 132.750000 \n",
"2022-12-22 00:00:00-05:00 132.229996 132.229996 134.559998 130.300003 \n",
"2022-12-23 00:00:00-05:00 131.860001 131.860001 132.419998 129.639999 \n",
"\n",
" BA \\\n",
" Open Volume Adj Close Close \n",
"Date \n",
"2022-01-03 00:00:00-05:00 177.830002 104487900 207.860001 207.860001 \n",
"2022-01-04 00:00:00-05:00 182.630005 99310400 213.630005 213.630005 \n",
"2022-01-05 00:00:00-05:00 179.610001 94537600 213.070007 213.070007 \n",
"2022-01-06 00:00:00-05:00 172.699997 96904000 211.339996 211.339996 \n",
"2022-01-07 00:00:00-05:00 172.889999 86709100 215.500000 215.500000 \n",
"... ... ... ... ... \n",
"2022-12-19 00:00:00-05:00 135.110001 79592600 185.679993 185.679993 \n",
"2022-12-20 00:00:00-05:00 131.389999 77432800 188.289993 188.289993 \n",
"2022-12-21 00:00:00-05:00 132.979996 85928000 196.000000 196.000000 \n",
"2022-12-22 00:00:00-05:00 134.350006 77852100 188.250000 188.250000 \n",
"2022-12-23 00:00:00-05:00 130.919998 63814900 189.059998 189.059998 \n",
"\n",
" \n",
" High Low Open Volume \n",
"Date \n",
"2022-01-03 00:00:00-05:00 210.550003 203.339996 204.000000 9060200 \n",
"2022-01-04 00:00:00-05:00 214.559998 209.779999 211.300003 11414600 \n",
"2022-01-05 00:00:00-05:00 218.929993 211.809998 216.639999 11564700 \n",
"2022-01-06 00:00:00-05:00 216.000000 207.860001 214.639999 7142200 \n",
"2022-01-07 00:00:00-05:00 218.320007 212.380005 212.979996 9526400 \n",
"... ... ... ... ... \n",
"2022-12-19 00:00:00-05:00 188.039993 184.710007 184.919998 6605400 \n",
"2022-12-20 00:00:00-05:00 189.910004 185.740005 186.179993 6156800 \n",
"2022-12-21 00:00:00-05:00 196.399994 189.720001 190.039993 9175400 \n",
"2022-12-22 00:00:00-05:00 194.169998 185.669998 193.820007 6924800 \n",
"2022-12-23 00:00:00-05:00 189.429993 184.720001 188.250000 3983600 \n",
"\n",
"[247 rows x 12 columns]"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"stocks.swaplevel(axis = 1).sort_index(axis = 1)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "9ed80221",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.9.13"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment