{ "cells": [ { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1.3.5\n" ] } ], "source": [ "import datetime\n", "import numpy as np\n", "import pandas as pd\n", "print(pd.__version__)" ] }, { "cell_type": "code", "execution_count": 156, "metadata": {}, "outputs": [], "source": [ "start = datetime.datetime(2020, 1, 1)\n", "end = datetime.datetime(2022, 1, 1)\n", "# Create a DatetimeIndex with freq='Q'\n", "# the 'Q' indicates the last day of each quarter\n", "ts = pd.date_range(start, end, freq='M')\n" ] }, { "cell_type": "code", "execution_count": 157, "metadata": {}, "outputs": [], "source": [ "df = pd.DataFrame(index=ts.to_period('M'), data={'Quarter':ts.to_period('Q')})" ] }, { "cell_type": "code", "execution_count": 158, "metadata": {}, "outputs": [], "source": [ "# make a sine wave as data\n", "df['Data'] = np.sin(np.linspace(0,10, len(ts)))" ] }, { "cell_type": "code", "execution_count": 159, "metadata": {}, "outputs": [], "source": [ "df['pct'] = df.groupby(by='Quarter')['Data'].transform(lambda x: x/sum(x))\n", "df['cumpct'] = df.groupby(by='Quarter')['Data'].transform(lambda x: np.cumsum(x)/sum(x))\n", "df['qtrTot'] = df.groupby(by='Quarter')['Data'].transform(lambda x: x.sum())" ] }, { "cell_type": "code", "execution_count": 160, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
| \n", " | Quarter | \n", "Data | \n", "pct | \n", "cumpct | \n", "qtrTot | \n", "
|---|---|---|---|---|---|
| 2020-01 | \n", "2020Q1 | \n", "0.000000 | \n", "0.000000 | \n", "0.000000 | \n", "1.185262 | \n", "
| 2020-02 | \n", "2020Q1 | \n", "0.421213 | \n", "0.355376 | \n", "0.355376 | \n", "1.185262 | \n", "
| 2020-03 | \n", "2020Q1 | \n", "0.764049 | \n", "0.644624 | \n", "1.000000 | \n", "1.185262 | \n", "
| 2020-04 | \n", "2020Q2 | \n", "0.964712 | \n", "0.347751 | \n", "0.347751 | \n", "2.774149 | \n", "
| 2020-05 | \n", "2020Q2 | \n", "0.985865 | \n", "0.355376 | \n", "0.703126 | \n", "2.774149 | \n", "