diff --git a/notebook.ipynb b/notebook.ipynb
index 924b879..6dcb8f1 100644
--- a/notebook.ipynb
+++ b/notebook.ipynb
@@ -21,840 +21,102 @@
},
{
"cell_type": "code",
- "execution_count": 73,
- "metadata": {},
- "outputs": [],
- "source": [
- "colNames = ['date', 'value']\n",
- "meditateChecks = pd.read_csv('LoopHabits/002 Meditate/Checkmarks.csv', names=colNames, header=None)\n",
- "meditateScore = pd.read_csv('LoopHabits/002 Meditate/Scores.csv', names=colNames, header=None)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 79,
+ "execution_count": 159,
"metadata": {},
"outputs": [
{
- "data": {
- "text/html": [
- "
\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " date | \n",
- " Meditate | \n",
- " Exercise | \n",
- " Read | \n",
- " Journal | \n",
- " devlog | \n",
- " Plants | \n",
- " Draw | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 0 | \n",
- " 2020-01-17 | \n",
- " 2 | \n",
- " 2 | \n",
- " 0 | \n",
- " 1 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 1 | \n",
- " 2020-01-16 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 1 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2020-01-15 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 1 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 2020-01-14 | \n",
- " 2 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 2020-01-13 | \n",
- " 0 | \n",
- " 1 | \n",
- " 2 | \n",
- " 2 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 2020-01-12 | \n",
- " 0 | \n",
- " 1 | \n",
- " 2 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 2020-01-11 | \n",
- " 0 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 2020-01-10 | \n",
- " 0 | \n",
- " 2 | \n",
- " 2 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 2020-01-09 | \n",
- " 0 | \n",
- " 2 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 2020-01-08 | \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " 2020-01-07 | \n",
- " 2 | \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " 2020-01-06 | \n",
- " 0 | \n",
- " 0 | \n",
- " 2 | \n",
- " 1 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 12 | \n",
- " 2020-01-05 | \n",
- " 2 | \n",
- " 0 | \n",
- " 0 | \n",
- " 1 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 13 | \n",
- " 2020-01-04 | \n",
- " 0 | \n",
- " 2 | \n",
- " 0 | \n",
- " 1 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 14 | \n",
- " 2020-01-03 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 1 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 15 | \n",
- " 2020-01-02 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 2 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 16 | \n",
- " 2020-01-01 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 17 | \n",
- " 2019-12-31 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 18 | \n",
- " 2019-12-30 | \n",
- " 0 | \n",
- " 1 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 19 | \n",
- " 2019-12-29 | \n",
- " 0 | \n",
- " 2 | \n",
- " 1 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 20 | \n",
- " 2019-12-28 | \n",
- " 0 | \n",
- " 0 | \n",
- " 2 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 21 | \n",
- " 2019-12-27 | \n",
- " 0 | \n",
- " 2 | \n",
- " 2 | \n",
- " 0 | \n",
- " 1 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 22 | \n",
- " 2019-12-26 | \n",
- " 0 | \n",
- " 1 | \n",
- " 0 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 23 | \n",
- " 2019-12-25 | \n",
- " 0 | \n",
- " 1 | \n",
- " 0 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 24 | \n",
- " 2019-12-24 | \n",
- " 2 | \n",
- " 2 | \n",
- " 0 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 25 | \n",
- " 2019-12-23 | \n",
- " 1 | \n",
- " 0 | \n",
- " 0 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 26 | \n",
- " 2019-12-22 | \n",
- " 1 | \n",
- " 0 | \n",
- " 0 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 27 | \n",
- " 2019-12-21 | \n",
- " 2 | \n",
- " 2 | \n",
- " 0 | \n",
- " 1 | \n",
- " 2 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 28 | \n",
- " 2019-12-20 | \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- " 2 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 29 | \n",
- " 2019-12-19 | \n",
- " 0 | \n",
- " 0 | \n",
- " 2 | \n",
- " 1 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " 717 | \n",
- " 2018-01-30 | \n",
- " 2 | \n",
- " 0 | \n",
- " 0 | \n",
- " 2 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 718 | \n",
- " 2018-01-29 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 2 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 719 | \n",
- " 2018-01-28 | \n",
- " 0 | \n",
- " 1 | \n",
- " 0 | \n",
- " 1 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 720 | \n",
- " 2018-01-27 | \n",
- " 0 | \n",
- " 1 | \n",
- " 0 | \n",
- " 1 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 721 | \n",
- " 2018-01-26 | \n",
- " 0 | \n",
- " 2 | \n",
- " 0 | \n",
- " 1 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 722 | \n",
- " 2018-01-25 | \n",
- " 1 | \n",
- " 0 | \n",
- " 0 | \n",
- " 2 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 723 | \n",
- " 2018-01-24 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- " 1 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 724 | \n",
- " 2018-01-23 | \n",
- " 2 | \n",
- " 2 | \n",
- " 0 | \n",
- " 2 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 725 | \n",
- " 2018-01-22 | \n",
- " 2 | \n",
- " 2 | \n",
- " 0 | \n",
- " 2 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 726 | \n",
- " 2018-01-21 | \n",
- " 0 | \n",
- " 1 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 727 | \n",
- " 2018-01-20 | \n",
- " 0 | \n",
- " 1 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 728 | \n",
- " 2018-01-19 | \n",
- " 0 | \n",
- " 1 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 729 | \n",
- " 2018-01-18 | \n",
- " 0 | \n",
- " 2 | \n",
- " 0 | \n",
- " 1 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 730 | \n",
- " 2018-01-17 | \n",
- " 2 | \n",
- " 2 | \n",
- " 0 | \n",
- " 1 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 731 | \n",
- " 2018-01-16 | \n",
- " 0 | \n",
- " 1 | \n",
- " 0 | \n",
- " 1 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 732 | \n",
- " 2018-01-15 | \n",
- " 0 | \n",
- " 2 | \n",
- " 0 | \n",
- " 1 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 733 | \n",
- " 2018-01-14 | \n",
- " 1 | \n",
- " 2 | \n",
- " 0 | \n",
- " 1 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 734 | \n",
- " 2018-01-13 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- " 1 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 735 | \n",
- " 2018-01-12 | \n",
- " 2 | \n",
- " 1 | \n",
- " 0 | \n",
- " 2 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 736 | \n",
- " 2018-01-11 | \n",
- " 2 | \n",
- " 1 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 737 | \n",
- " 2018-01-10 | \n",
- " 0 | \n",
- " 2 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 738 | \n",
- " 2018-01-09 | \n",
- " 0 | \n",
- " 1 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 739 | \n",
- " 2018-01-08 | \n",
- " 0 | \n",
- " 2 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 740 | \n",
- " 2018-01-07 | \n",
- " 0 | \n",
- " 2 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 741 | \n",
- " 2018-01-06 | \n",
- " 0 | \n",
- " 1 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 742 | \n",
- " 2018-01-05 | \n",
- " 0 | \n",
- " 2 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 743 | \n",
- " 2018-01-04 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 744 | \n",
- " 2018-01-03 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 745 | \n",
- " 2018-01-02 | \n",
- " 2 | \n",
- " 2 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 746 | \n",
- " 2018-01-01 | \n",
- " 0 | \n",
- " 2 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- "
\n",
- "
747 rows × 8 columns
\n",
- "
"
- ],
- "text/plain": [
- " date Meditate Exercise Read Journal devlog Plants Draw\n",
- "0 2020-01-17 2 2 0 1 0 0 0\n",
- "1 2020-01-16 0 0 0 1 0 0 0\n",
- "2 2020-01-15 0 0 0 1 0 0 0\n",
- "3 2020-01-14 2 1 1 1 0 0 0\n",
- "4 2020-01-13 0 1 2 2 0 0 0\n",
- "5 2020-01-12 0 1 2 0 0 0 0\n",
- "6 2020-01-11 0 1 1 0 0 0 0\n",
- "7 2020-01-10 0 2 2 0 0 0 0\n",
- "8 2020-01-09 0 2 0 0 0 0 0\n",
- "9 2020-01-08 1 2 1 1 0 0 0\n",
- "10 2020-01-07 2 2 2 1 0 0 0\n",
- "11 2020-01-06 0 0 2 1 0 0 0\n",
- "12 2020-01-05 2 0 0 1 0 0 0\n",
- "13 2020-01-04 0 2 0 1 0 0 0\n",
- "14 2020-01-03 0 0 0 1 0 0 0\n",
- "15 2020-01-02 0 0 0 2 0 0 0\n",
- "16 2020-01-01 0 0 0 0 0 0 0\n",
- "17 2019-12-31 0 0 0 0 0 0 0\n",
- "18 2019-12-30 0 1 0 0 0 0 0\n",
- "19 2019-12-29 0 2 1 0 0 0 0\n",
- "20 2019-12-28 0 0 2 0 0 0 0\n",
- "21 2019-12-27 0 2 2 0 1 0 0\n",
- "22 2019-12-26 0 1 0 1 1 0 0\n",
- "23 2019-12-25 0 1 0 1 1 0 0\n",
- "24 2019-12-24 2 2 0 1 1 0 0\n",
- "25 2019-12-23 1 0 0 1 1 0 0\n",
- "26 2019-12-22 1 0 0 1 1 0 0\n",
- "27 2019-12-21 2 2 0 1 2 0 0\n",
- "28 2019-12-20 2 2 1 2 0 0 0\n",
- "29 2019-12-19 0 0 2 1 0 0 0\n",
- ".. ... ... ... ... ... ... ... ...\n",
- "717 2018-01-30 2 0 0 2 0 0 0\n",
- "718 2018-01-29 0 0 0 2 0 0 0\n",
- "719 2018-01-28 0 1 0 1 0 0 0\n",
- "720 2018-01-27 0 1 0 1 0 0 0\n",
- "721 2018-01-26 0 2 0 1 0 0 0\n",
- "722 2018-01-25 1 0 0 2 0 0 0\n",
- "723 2018-01-24 1 1 0 1 0 0 0\n",
- "724 2018-01-23 2 2 0 2 0 0 0\n",
- "725 2018-01-22 2 2 0 2 0 0 0\n",
- "726 2018-01-21 0 1 0 0 0 0 0\n",
- "727 2018-01-20 0 1 0 0 0 0 0\n",
- "728 2018-01-19 0 1 0 0 0 0 0\n",
- "729 2018-01-18 0 2 0 1 0 0 0\n",
- "730 2018-01-17 2 2 0 1 0 0 0\n",
- "731 2018-01-16 0 1 0 1 0 0 0\n",
- "732 2018-01-15 0 2 0 1 0 0 0\n",
- "733 2018-01-14 1 2 0 1 0 0 0\n",
- "734 2018-01-13 1 1 0 1 0 0 0\n",
- "735 2018-01-12 2 1 0 2 0 0 0\n",
- "736 2018-01-11 2 1 0 0 0 0 0\n",
- "737 2018-01-10 0 2 0 0 0 0 0\n",
- "738 2018-01-09 0 1 0 0 0 0 0\n",
- "739 2018-01-08 0 2 0 0 0 0 0\n",
- "740 2018-01-07 0 2 0 0 0 0 0\n",
- "741 2018-01-06 0 1 0 0 0 0 0\n",
- "742 2018-01-05 0 2 0 0 0 0 0\n",
- "743 2018-01-04 0 0 0 0 0 0 0\n",
- "744 2018-01-03 0 0 0 0 0 0 0\n",
- "745 2018-01-02 2 2 0 0 0 0 0\n",
- "746 2018-01-01 0 2 0 0 0 0 0\n",
- "\n",
- "[747 rows x 8 columns]"
- ]
- },
- "execution_count": 79,
- "metadata": {},
- "output_type": "execute_result"
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Days done: Meditate 64\n",
+ "Exercise 65\n",
+ "Read 69\n",
+ "Journal 49\n",
+ "devlog 32\n",
+ "Plants 38\n",
+ "Draw 12\n",
+ "dtype: int64\n",
+ "Non-streak days: Meditate 176\n",
+ "Exercise 179\n",
+ "Read 161\n",
+ "Journal 70\n",
+ "devlog 154\n",
+ "Plants 120\n",
+ "Draw 252\n",
+ "dtype: int64\n",
+ "Streak days: Meditate 35\n",
+ "Exercise 31\n",
+ "Read 45\n",
+ "Journal 156\n",
+ "devlog 89\n",
+ "Plants 117\n",
+ "Draw 11\n",
+ "dtype: int64\n",
+ "Longest streak: Meditate 17\n",
+ "Exercise 11\n",
+ "Read 12\n",
+ "Journal 55\n",
+ "devlog 29\n",
+ "Plants 87\n",
+ "Draw 17\n",
+ "dtype: int64\n",
+ "Longest zeros: Meditate 23\n",
+ "Exercise 26\n",
+ "Read 43\n",
+ "Journal 27\n",
+ "devlog 121\n",
+ "Plants 54\n",
+ "Draw 229\n",
+ "dtype: int64\n"
+ ]
+ },
+ {
+ "ename": "NameError",
+ "evalue": "name 'index' is not defined",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+ "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
+ "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Longest streak: \"\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mapply\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlongestStreak\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 10\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Longest zeros: \"\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mapply\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlongestZero\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 11\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Best month: \"\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mcalendar\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmonth_name\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msumMonth\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0midxmax\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 12\u001b[0m \u001b[0;31m#print(\"Worst month: \" + calendar.month_name[int(sumMonth(df).idxmin())])\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 13\u001b[0m \u001b[0;31m#plotScore(df)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;32m\u001b[0m in \u001b[0;36msumMonth\u001b[0;34m(df)\u001b[0m\n\u001b[1;32m 41\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 42\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0msumMonth\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 43\u001b[0;31m \u001b[0mdf\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'month'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mDatetimeIndex\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mindex\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmonth\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 44\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgroupby\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'month'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msum\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 45\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;31mNameError\u001b[0m: name 'index' is not defined"
+ ]
}
],
"source": [
"#colNames = ['date', 'Godmode', 'Meditate', 'Exercise', 'Piano','Read', 'Journal', 'Gratitude', 'devlog','Plants', 'Job', 'Draw']\n",
"checks = pd.read_csv('LoopHabits/Checkmarks.csv', header=0)\n",
- "checks = checks.drop(['Godmode', 'Piano', 'Gratitude', 'Job'], axis=1)\n",
- "checks"
+ "checks.set_axis(checks['date'], axis='index', inplace=True)\n",
+ "checks = checks.drop(['Godmode', 'Piano', 'Gratitude', 'Job', 'date'], axis=1)\n",
+ "df = MarchOnwards(only2019(checks))\n",
+ "print(\"Days done: \" + str(countValue(2, df)))\n",
+ "print(\"Non-streak days: \" + str(countZeros(df)))\n",
+ "print(\"Streak days: \" + str(countValue(1, df)))\n",
+ "print(\"Longest streak: \" + str(df.apply(longestStreak, axis=0)))\n",
+ "print(\"Longest zeros: \" + str(df.apply(longestZero, axis=0)))\n",
+ "print(\"Best month: \" + calendar.month_name[int(sumMonth(df).idxmax())])\n",
+ "#print(\"Worst month: \" + calendar.month_name[int(sumMonth(df).idxmin())])\n",
+ "#plotScore(df)"
]
},
{
"cell_type": "code",
- "execution_count": 80,
+ "execution_count": 157,
"metadata": {},
- "outputs": [
- {
- "ename": "IndentationError",
- "evalue": "expected an indented block (, line 19)",
- "output_type": "error",
- "traceback": [
- "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m19\u001b[0m\n\u001b[0;31m diffStreak = pd.concat([pd.Series([0]) , df[::-1].value, pd.Series([0])]).diff().tolist()\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mIndentationError\u001b[0m\u001b[0;31m:\u001b[0m expected an indented block\n"
- ]
- }
- ],
+ "outputs": [],
"source": [
"def only2019(df):\n",
- " df['drop'] = df['date'].apply(lambda x: 0 if x[0:4] == '2019' else 1)\n",
- " df = df.drop(df[df['drop'] == 1].index)\n",
- " df = df.drop(columns=['drop'])\n",
- " return df\n",
+ " return df.filter(like='2019', axis=0)\n",
"\n",
"def MarchOnwards(df):\n",
" # For habits only, lost my phone in late Febuary, didn't have a recent backup\n",
- " df['drop'] = df['date'].apply(lambda x: 1 if x[5:7] == '01' or x[5:7] == '02' else 0)\n",
- " df = df.drop(df[df['drop'] == 1].index)\n",
- " df = df.drop(columns=['drop'])\n",
- " return df\n",
+ " return df.filter(regex='[0-9]{4}-(0?[4-9]|1?[0-2])-[0-9]{2}', axis=0)\n",
"\n",
"def longestZero(df):\n",
" # reverse the series so dates are ascending (increasing?)\n",
" # pad out the series with 0s, then diff it to track total, use that total to calculate highest streak\n",
" # streak increases when sum is 0\n",
- " diffStreak = pd.concat([pd.Series([0]) , df[::-1].value, pd.Series([0])]).diff().tolist()\n",
+ " diffStreak = pd.concat([pd.Series([0]) , df[::-1], pd.Series([0])]).diff().tolist()\n",
" runningSum = 0\n",
" streak = 0\n",
" streakList = []\n",
@@ -871,7 +133,7 @@
" # reverse the series so dates are ascending (increasing?)\n",
" # pad out the series with 0s, then diff it to track total, use that total to calculate highest streak\n",
" # streak increases when sum is non-zero\n",
- " diffStreak = pd.concat([pd.Series([0]) , df[::-1].value, pd.Series([0])]).diff().tolist()\n",
+ " diffStreak = pd.concat([pd.Series([0]) , df[::-1], pd.Series([0])]).diff().tolist()\n",
" runningSum = 0\n",
" streak = 0\n",
" streakList = []\n",
@@ -885,7 +147,7 @@
" return max(streakList)\n",
"\n",
"def sumMonth(df):\n",
- " df['month'] = pd.DatetimeIndex(df['date']).month\n",
+ " df['month'] = pd.DatetimeIndex(df[index]).month\n",
" return df.groupby(['month']).sum()\n",
"\n",
"def meanMonth(df):\n",
@@ -901,41 +163,60 @@
" return countValue(0, df)\n",
"\n",
"def countValue(countValue, df):\n",
- " return (df.value == countValue).astype(int).sum()\n"
+ " return (df == countValue).astype(int).sum()\n"
]
},
{
"cell_type": "code",
- "execution_count": 72,
+ "execution_count": 83,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# checking for CSV of simply one habit\n",
+ "\n",
+ "colNames = ['date', 'value']\n",
+ "meditateChecks = pd.read_csv('LoopHabits/002 Meditate/Checkmarks.csv', names=colNames, header=None)\n",
+ "meditateScore = pd.read_csv('LoopHabits/002 Meditate/Scores.csv', names=colNames, header=None)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 145,
"metadata": {},
"outputs": [
{
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Days done: 72\n",
- "Non-streak days: 195\n",
- "Streak days: 39\n",
- "Longest streak: 17\n",
- "Longest zeros: 23\n",
- "Best month: September\n",
- "Worst month: April\n"
+ "ename": "KeyError",
+ "evalue": "'date'",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+ "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)",
+ "\u001b[0;32m~/.local/lib/python3.6/site-packages/pandas/core/indexes/base.py\u001b[0m in \u001b[0;36mget_loc\u001b[0;34m(self, key, method, tolerance)\u001b[0m\n\u001b[1;32m 2524\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2525\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2526\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;32mpandas/_libs/index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n",
+ "\u001b[0;32mpandas/_libs/index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n",
+ "\u001b[0;32mpandas/_libs/hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n",
+ "\u001b[0;32mpandas/_libs/hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n",
+ "\u001b[0;31mKeyError\u001b[0m: 'date'",
+ "\nDuring handling of the above exception, another exception occurred:\n",
+ "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)",
+ "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m# might be broken now\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;31m# need to deal with dates in columns\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mmeditateChecks\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_axis\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mchecks\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'date'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'index'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minplace\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4\u001b[0m \u001b[0mdf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mMarchOnwards\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0monly2019\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmeditateChecks\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Days done: \"\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcountValue\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;32m~/.local/lib/python3.6/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 2137\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_getitem_multilevel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2138\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2139\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_getitem_column\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2140\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2141\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_getitem_column\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;32m~/.local/lib/python3.6/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m_getitem_column\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 2144\u001b[0m \u001b[0;31m# get column\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2145\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_unique\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2146\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_item_cache\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2147\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2148\u001b[0m \u001b[0;31m# duplicate columns & possible reduce dimensionality\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;32m~/.local/lib/python3.6/site-packages/pandas/core/generic.py\u001b[0m in \u001b[0;36m_get_item_cache\u001b[0;34m(self, item)\u001b[0m\n\u001b[1;32m 1840\u001b[0m \u001b[0mres\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcache\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1841\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mres\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1842\u001b[0;31m \u001b[0mvalues\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_data\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1843\u001b[0m \u001b[0mres\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_box_item_values\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalues\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1844\u001b[0m \u001b[0mcache\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mres\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;32m~/.local/lib/python3.6/site-packages/pandas/core/internals.py\u001b[0m in \u001b[0;36mget\u001b[0;34m(self, item, fastpath)\u001b[0m\n\u001b[1;32m 3841\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3842\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0misna\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3843\u001b[0;31m \u001b[0mloc\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3844\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3845\u001b[0m \u001b[0mindexer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0misna\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;32m~/.local/lib/python3.6/site-packages/pandas/core/indexes/base.py\u001b[0m in \u001b[0;36mget_loc\u001b[0;34m(self, key, method, tolerance)\u001b[0m\n\u001b[1;32m 2525\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2526\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2527\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_maybe_cast_indexer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2528\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2529\u001b[0m \u001b[0mindexer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_indexer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmethod\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mmethod\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtolerance\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtolerance\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;32mpandas/_libs/index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n",
+ "\u001b[0;32mpandas/_libs/index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n",
+ "\u001b[0;32mpandas/_libs/hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n",
+ "\u001b[0;32mpandas/_libs/hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n",
+ "\u001b[0;31mKeyError\u001b[0m: 'date'"
]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- "