Skip to content

Instantly share code, notes, and snippets.

@WaylonWalker
Created February 7, 2018 17:36
Show Gist options
  • Save WaylonWalker/39e65d8280732c4fc077ec4fb44666d2 to your computer and use it in GitHub Desktop.
Save WaylonWalker/39e65d8280732c4fc077ec4fb44666d2 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# My favorite pandas pattern\n",
"\n",
"\n",
"I work with a lot of transactional timeseries data that includes categories. I often want to create timeseries plots with each category as its own line. This is the method that I use almost data to achieve this result. Typically the data that am working with changes very slowly and trends happen over years not days or weeks. Plotting daily/weekly data tends to be noisy and hides the trend. I use this pattern because it works well with my data and is easy to explain to my stakeholders.\n"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"% matplotlib inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Lets Fake some data\n",
"\n",
"\n",
"Here I am trying to simulate a subset of a large transactional data set. This could be something like sales data, production data, hourly billing, anything that has a date, category, and value. Since we generated this data we know that it is clean. I am still going to assume that it contains some nulls, and an irregular date range."
]
},
{
"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>date</th>\n",
" <th>item</th>\n",
" <th>qty</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2017-01-01</td>\n",
" <td>paper</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2017-01-01</td>\n",
" <td>pencils</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2017-01-01</td>\n",
" <td>note cards</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2017-01-01</td>\n",
" <td>markers</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2017-01-02</td>\n",
" <td>paper</td>\n",
" <td>3</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" date item qty\n",
"0 2017-01-01 paper 1\n",
"1 2017-01-01 pencils 4\n",
"2 2017-01-01 note cards 5\n",
"3 2017-01-01 markers 9\n",
"4 2017-01-02 paper 3"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"n = 365*5\n",
"cols = {'level_0': 'date',\n",
" 'level_1': 'item',\n",
" 0: 'qty', }\n",
"data = (pd.DataFrame(np.random.randint(0, 10, size=(n, 4)),\n",
" columns=['paper', 'pencils', 'note cards', 'markers'],\n",
" index=pd.date_range('1/1/2017', periods=n, freq='d'),\n",
" )\n",
" .stack()\n",
" .to_frame()\n",
" .reset_index()\n",
" .rename(columns=cols))\n",
"data.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## The pattern\n",
"\n",
"Here I am going to take my groupby date and item, this will take care of duplicate entries with the same time stamp. Select the value I want to sum on. unstack the items index into columns. Resample the data by month. I could easily use any of the [available rules](http://pandas.pydata.org/pandas-docs/stable/timeseries.html#offset-aliases). Fill any missing months with 0, since there wasnt a transaction during that month. Apply a rolling window to get the annual sum. I find that this helps to ground values in values that my stakeholders are used to seeing on a regular basis and reduces the need for them to recalculate in their head. Then I am going to drop the nulls created by the rolling window for the first 11 rows."
]
},
{
"cell_type": "code",
"execution_count": 3,
"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>item</th>\n",
" <th>markers</th>\n",
" <th>note cards</th>\n",
" <th>paper</th>\n",
" <th>pencils</th>\n",
" </tr>\n",
" <tr>\n",
" <th>date</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2017-12-31</th>\n",
" <td>1543.0</td>\n",
" <td>1739.0</td>\n",
" <td>1613.0</td>\n",
" <td>1657.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-01-31</th>\n",
" <td>1572.0</td>\n",
" <td>1744.0</td>\n",
" <td>1635.0</td>\n",
" <td>1635.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-02-28</th>\n",
" <td>1563.0</td>\n",
" <td>1717.0</td>\n",
" <td>1645.0</td>\n",
" <td>1645.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-03-31</th>\n",
" <td>1596.0</td>\n",
" <td>1703.0</td>\n",
" <td>1629.0</td>\n",
" <td>1600.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-04-30</th>\n",
" <td>1557.0</td>\n",
" <td>1693.0</td>\n",
" <td>1648.0</td>\n",
" <td>1581.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"item markers note cards paper pencils\n",
"date \n",
"2017-12-31 1543.0 1739.0 1613.0 1657.0\n",
"2018-01-31 1572.0 1744.0 1635.0 1635.0\n",
"2018-02-28 1563.0 1717.0 1645.0 1645.0\n",
"2018-03-31 1596.0 1703.0 1629.0 1600.0\n",
"2018-04-30 1557.0 1693.0 1648.0 1581.0"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"plot_data = (data\n",
" .groupby(['date', 'item'])\n",
" .sum()\n",
" ['qty']\n",
" .unstack()\n",
" .resample('m')\n",
" .sum()\n",
" .fillna(0)\n",
" .rolling(12)\n",
" .sum()\n",
" .dropna()\n",
" )\n",
"plot_data.head()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x2836e706ac8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot_data.plot(title='Rolling annual sum of Categorical Random Data');"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## For the Visual Learners\n",
"\n",
"I will break down the pattern here"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Groupby"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th></th>\n",
" <th>qty</th>\n",
" </tr>\n",
" <tr>\n",
" <th>date</th>\n",
" <th>item</th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th rowspan=\"4\" valign=\"top\">2017-01-01</th>\n",
" <th>markers</th>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>note cards</th>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>paper</th>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>pencils</th>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-01-02</th>\n",
" <th>markers</th>\n",
" <td>4</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" qty\n",
"date item \n",
"2017-01-01 markers 9\n",
" note cards 5\n",
" paper 1\n",
" pencils 4\n",
"2017-01-02 markers 4"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"plot_data = (data\n",
" .groupby(['date', 'item'])\n",
" .sum()\n",
" )\n",
"plot_data.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Select Values\n",
"\n",
"In this case I chose to do this to avoid working with a multiple levels in the columns that would be created in the unstack() step."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"date item \n",
"2017-01-01 markers 9\n",
" note cards 5\n",
" paper 1\n",
" pencils 4\n",
"2017-01-02 markers 4\n",
"Name: qty, dtype: int32"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"plot_data = plot_data['qty']\n",
"\n",
"plot_data.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### unstack\n",
"\n",
"transform the last column in the index ('item') into rows."
]
},
{
"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>item</th>\n",
" <th>markers</th>\n",
" <th>note cards</th>\n",
" <th>paper</th>\n",
" <th>pencils</th>\n",
" </tr>\n",
" <tr>\n",
" <th>date</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2017-01-01</th>\n",
" <td>9</td>\n",
" <td>5</td>\n",
" <td>1</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-01-02</th>\n",
" <td>4</td>\n",
" <td>2</td>\n",
" <td>3</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-01-03</th>\n",
" <td>9</td>\n",
" <td>5</td>\n",
" <td>2</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-01-04</th>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-01-05</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>6</td>\n",
" <td>2</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"item markers note cards paper pencils\n",
"date \n",
"2017-01-01 9 5 1 4\n",
"2017-01-02 4 2 3 7\n",
"2017-01-03 9 5 2 3\n",
"2017-01-04 2 0 0 5\n",
"2017-01-05 0 1 6 2"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"plot_data = plot_data.unstack()\n",
"\n",
"plot_data.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### resample\n",
"\n",
"This step is important for irregular data in order to get the data into regular intervals."
]
},
{
"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>item</th>\n",
" <th>markers</th>\n",
" <th>note cards</th>\n",
" <th>paper</th>\n",
" <th>pencils</th>\n",
" </tr>\n",
" <tr>\n",
" <th>date</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2017-01-31</th>\n",
" <td>145</td>\n",
" <td>128</td>\n",
" <td>117</td>\n",
" <td>146</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-02-28</th>\n",
" <td>136</td>\n",
" <td>140</td>\n",
" <td>133</td>\n",
" <td>135</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-03-31</th>\n",
" <td>112</td>\n",
" <td>145</td>\n",
" <td>125</td>\n",
" <td>163</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-04-30</th>\n",
" <td>143</td>\n",
" <td>148</td>\n",
" <td>112</td>\n",
" <td>147</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-05-31</th>\n",
" <td>86</td>\n",
" <td>134</td>\n",
" <td>139</td>\n",
" <td>141</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"item markers note cards paper pencils\n",
"date \n",
"2017-01-31 145 128 117 146\n",
"2017-02-28 136 140 133 135\n",
"2017-03-31 112 145 125 163\n",
"2017-04-30 143 148 112 147\n",
"2017-05-31 86 134 139 141"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"plot_data = plot_data.resample('m').sum()\n",
"\n",
"plot_data.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### rolling\n",
"\n",
"I like to use rolling because it get the data into annual numbers, and reduces noise. I have found that most of my datasets have patterns and trends that are greater than 1y. This is just due to the industry that I am in. Play with the resample and rolling rules to fit the need of your own data."
]
},
{
"cell_type": "code",
"execution_count": 9,
"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>item</th>\n",
" <th>markers</th>\n",
" <th>note cards</th>\n",
" <th>paper</th>\n",
" <th>pencils</th>\n",
" </tr>\n",
" <tr>\n",
" <th>date</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2017-01-31</th>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-02-28</th>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-03-31</th>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-04-30</th>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-05-31</th>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-06-30</th>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-07-31</th>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-08-31</th>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-09-30</th>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-10-31</th>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-11-30</th>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-12-31</th>\n",
" <td>1543.0</td>\n",
" <td>1739.0</td>\n",
" <td>1613.0</td>\n",
" <td>1657.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-01-31</th>\n",
" <td>1572.0</td>\n",
" <td>1744.0</td>\n",
" <td>1635.0</td>\n",
" <td>1635.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-02-28</th>\n",
" <td>1563.0</td>\n",
" <td>1717.0</td>\n",
" <td>1645.0</td>\n",
" <td>1645.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-03-31</th>\n",
" <td>1596.0</td>\n",
" <td>1703.0</td>\n",
" <td>1629.0</td>\n",
" <td>1600.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-04-30</th>\n",
" <td>1557.0</td>\n",
" <td>1693.0</td>\n",
" <td>1648.0</td>\n",
" <td>1581.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-05-31</th>\n",
" <td>1624.0</td>\n",
" <td>1674.0</td>\n",
" <td>1632.0</td>\n",
" <td>1592.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-06-30</th>\n",
" <td>1582.0</td>\n",
" <td>1645.0</td>\n",
" <td>1657.0</td>\n",
" <td>1593.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-07-31</th>\n",
" <td>1662.0</td>\n",
" <td>1654.0</td>\n",
" <td>1680.0</td>\n",
" <td>1613.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-08-31</th>\n",
" <td>1654.0</td>\n",
" <td>1617.0</td>\n",
" <td>1650.0</td>\n",
" <td>1616.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"item markers note cards paper pencils\n",
"date \n",
"2017-01-31 NaN NaN NaN NaN\n",
"2017-02-28 NaN NaN NaN NaN\n",
"2017-03-31 NaN NaN NaN NaN\n",
"2017-04-30 NaN NaN NaN NaN\n",
"2017-05-31 NaN NaN NaN NaN\n",
"2017-06-30 NaN NaN NaN NaN\n",
"2017-07-31 NaN NaN NaN NaN\n",
"2017-08-31 NaN NaN NaN NaN\n",
"2017-09-30 NaN NaN NaN NaN\n",
"2017-10-31 NaN NaN NaN NaN\n",
"2017-11-30 NaN NaN NaN NaN\n",
"2017-12-31 1543.0 1739.0 1613.0 1657.0\n",
"2018-01-31 1572.0 1744.0 1635.0 1635.0\n",
"2018-02-28 1563.0 1717.0 1645.0 1645.0\n",
"2018-03-31 1596.0 1703.0 1629.0 1600.0\n",
"2018-04-30 1557.0 1693.0 1648.0 1581.0\n",
"2018-05-31 1624.0 1674.0 1632.0 1592.0\n",
"2018-06-30 1582.0 1645.0 1657.0 1593.0\n",
"2018-07-31 1662.0 1654.0 1680.0 1613.0\n",
"2018-08-31 1654.0 1617.0 1650.0 1616.0"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"plot_data = plot_data.rolling(12).sum()\n",
"\n",
"plot_data.head(20)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### dropna\n",
"\n",
"get rid of the first 11 null rows"
]
},
{
"cell_type": "code",
"execution_count": 10,
"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>item</th>\n",
" <th>markers</th>\n",
" <th>note cards</th>\n",
" <th>paper</th>\n",
" <th>pencils</th>\n",
" </tr>\n",
" <tr>\n",
" <th>date</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2017-12-31</th>\n",
" <td>1543.0</td>\n",
" <td>1739.0</td>\n",
" <td>1613.0</td>\n",
" <td>1657.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-01-31</th>\n",
" <td>1572.0</td>\n",
" <td>1744.0</td>\n",
" <td>1635.0</td>\n",
" <td>1635.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-02-28</th>\n",
" <td>1563.0</td>\n",
" <td>1717.0</td>\n",
" <td>1645.0</td>\n",
" <td>1645.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-03-31</th>\n",
" <td>1596.0</td>\n",
" <td>1703.0</td>\n",
" <td>1629.0</td>\n",
" <td>1600.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-04-30</th>\n",
" <td>1557.0</td>\n",
" <td>1693.0</td>\n",
" <td>1648.0</td>\n",
" <td>1581.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-05-31</th>\n",
" <td>1624.0</td>\n",
" <td>1674.0</td>\n",
" <td>1632.0</td>\n",
" <td>1592.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-06-30</th>\n",
" <td>1582.0</td>\n",
" <td>1645.0</td>\n",
" <td>1657.0</td>\n",
" <td>1593.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-07-31</th>\n",
" <td>1662.0</td>\n",
" <td>1654.0</td>\n",
" <td>1680.0</td>\n",
" <td>1613.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-08-31</th>\n",
" <td>1654.0</td>\n",
" <td>1617.0</td>\n",
" <td>1650.0</td>\n",
" <td>1616.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-09-30</th>\n",
" <td>1669.0</td>\n",
" <td>1648.0</td>\n",
" <td>1638.0</td>\n",
" <td>1634.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"item markers note cards paper pencils\n",
"date \n",
"2017-12-31 1543.0 1739.0 1613.0 1657.0\n",
"2018-01-31 1572.0 1744.0 1635.0 1635.0\n",
"2018-02-28 1563.0 1717.0 1645.0 1645.0\n",
"2018-03-31 1596.0 1703.0 1629.0 1600.0\n",
"2018-04-30 1557.0 1693.0 1648.0 1581.0\n",
"2018-05-31 1624.0 1674.0 1632.0 1592.0\n",
"2018-06-30 1582.0 1645.0 1657.0 1593.0\n",
"2018-07-31 1662.0 1654.0 1680.0 1613.0\n",
"2018-08-31 1654.0 1617.0 1650.0 1616.0\n",
"2018-09-30 1669.0 1648.0 1638.0 1634.0"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"plot_data = plot_data.dropna()\n",
"\n",
"plot_data.head(10)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python (adhoc)",
"language": "python",
"name": "adhoc"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment