diff --git a/notebooks/actions.ipynb b/notebooks/actions.ipynb
new file mode 100644
index 0000000..527bc36
--- /dev/null
+++ b/notebooks/actions.ipynb
@@ -0,0 +1,3591 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "1b292918-2503-4d0e-9525-410b65d6e0c1",
+ "metadata": {},
+ "source": [
+ "# Actions Data Exploration\n",
+ "In this notebook we'll explore the different `actionType`s that compose the data obtained from the live `PlayByPlay` endpoint."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "5feafd18-b833-48d5-9820-bb98e971b6ce",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import pandas as pd\n",
+ "from pathlib import Path"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "id": "88999795-b2d5-4112-9193-3a743b03d835",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "SEASON_ID = '22024'\n",
+ "GAME_ID = '0022400630'"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "id": "e8c26dc0-c5be-4797-b5c1-e0d061053e94",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "data_path = Path(\"~/MBAI/data\").expanduser()\n",
+ "season_path = data_path / f\"rs{SEASON_ID}\"\n",
+ "game_path = season_path / f\"g{GAME_ID}\"\n",
+ "pbp_path = game_path / \"playbyplay\""
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "id": "4cf9efa6-a42d-47b2-9c02-5c89730a1281",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "df = pd.read_parquet(pbp_path / \"actions.parquet\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "id": "b12308eb-95b2-4070-b0ce-bb39e693a60a",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/home/mrrobot/anaconda3/envs/MBAI/lib/python3.13/site-packages/pandas/io/formats/format.py:1458: RuntimeWarning: overflow encountered in cast\n",
+ " has_large_values = (abs_vals > 1e6).any()\n",
+ "/home/mrrobot/anaconda3/envs/MBAI/lib/python3.13/site-packages/pandas/io/formats/format.py:1458: RuntimeWarning: overflow encountered in cast\n",
+ " has_large_values = (abs_vals > 1e6).any()\n",
+ "/home/mrrobot/anaconda3/envs/MBAI/lib/python3.13/site-packages/pandas/io/formats/format.py:1458: RuntimeWarning: overflow encountered in cast\n",
+ " has_large_values = (abs_vals > 1e6).any()\n",
+ "/home/mrrobot/anaconda3/envs/MBAI/lib/python3.13/site-packages/pandas/io/formats/format.py:1458: RuntimeWarning: overflow encountered in cast\n",
+ " has_large_values = (abs_vals > 1e6).any()\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " clock | \n",
+ " timeActual | \n",
+ " period | \n",
+ " actionType | \n",
+ " subType | \n",
+ " personId | \n",
+ " x | \n",
+ " y | \n",
+ " possession | \n",
+ " scoreHome | \n",
+ " ... | \n",
+ " jumpBallRecoveredPersonId | \n",
+ " jumpBallWonPersonId | \n",
+ " jumpBallLostPersonId | \n",
+ " shotDistance | \n",
+ " shotResult | \n",
+ " blockPersonId | \n",
+ " assistPersonId | \n",
+ " officialId | \n",
+ " foulDrawnPersonId | \n",
+ " stealPersonId | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 0 days 00:12:00 | \n",
+ " 2025-01-25 00:10:48.500000+00:00 | \n",
+ " 1 | \n",
+ " period | \n",
+ " start | \n",
+ " <NA> | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " <NA> | \n",
+ " 0 | \n",
+ " ... | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " NaN | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 0 days 00:11:57 | \n",
+ " 2025-01-25 00:10:50.500000+00:00 | \n",
+ " 1 | \n",
+ " jumpball | \n",
+ " recovered | \n",
+ " 203995 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 1610612766 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 203995 | \n",
+ " 1631109 | \n",
+ " 1642270 | \n",
+ " NaN | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 0 days 00:11:37 | \n",
+ " 2025-01-25 00:11:10.200000+00:00 | \n",
+ " 1 | \n",
+ " 2pt | \n",
+ " DUNK | \n",
+ " 1631109 | \n",
+ " 8.882812 | \n",
+ " 51.96875 | \n",
+ " 1610612766 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " 3.250000 | \n",
+ " False | \n",
+ " 1642270 | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 0 days 00:11:37 | \n",
+ " 2025-01-25 00:11:10.200000+00:00 | \n",
+ " 1 | \n",
+ " block | \n",
+ " | \n",
+ " 1642270 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 1610612766 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " NaN | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 0 days 00:11:34 | \n",
+ " 2025-01-25 00:11:13.200000+00:00 | \n",
+ " 1 | \n",
+ " rebound | \n",
+ " defensive | \n",
+ " 1642270 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 1610612757 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " NaN | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 606 | \n",
+ " 0 days 00:00:10.700000 | \n",
+ " 2025-01-25 02:30:23.300000+00:00 | \n",
+ " 4 | \n",
+ " 2pt | \n",
+ " DUNK | \n",
+ " 1631109 | \n",
+ " 94.062500 | \n",
+ " 51.71875 | \n",
+ " 1610612766 | \n",
+ " 95 | \n",
+ " ... | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " 0.930176 | \n",
+ " True | \n",
+ " <NA> | \n",
+ " 1630182 | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ "
\n",
+ " \n",
+ " | 607 | \n",
+ " 0 days 00:00:03.300000 | \n",
+ " 2025-01-25 02:30:35.800000+00:00 | \n",
+ " 4 | \n",
+ " 2pt | \n",
+ " DUNK | \n",
+ " 1641739 | \n",
+ " 7.441406 | \n",
+ " 52.68750 | \n",
+ " 1610612757 | \n",
+ " 95 | \n",
+ " ... | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " 2.199219 | \n",
+ " True | \n",
+ " <NA> | \n",
+ " 1629014 | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ "
\n",
+ " \n",
+ " | 608 | \n",
+ " 0 days 00:00:00 | \n",
+ " 2025-01-25 02:30:44.700000+00:00 | \n",
+ " 4 | \n",
+ " 2pt | \n",
+ " Layup | \n",
+ " 1631109 | \n",
+ " 94.437500 | \n",
+ " 47.06250 | \n",
+ " 1610612766 | \n",
+ " 97 | \n",
+ " ... | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " 1.469727 | \n",
+ " True | \n",
+ " <NA> | \n",
+ " 1641733 | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ "
\n",
+ " \n",
+ " | 609 | \n",
+ " 0 days 00:00:00 | \n",
+ " 2025-01-25 02:30:53.700000+00:00 | \n",
+ " 4 | \n",
+ " period | \n",
+ " end | \n",
+ " <NA> | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 1610612757 | \n",
+ " 97 | \n",
+ " ... | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " NaN | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ "
\n",
+ " \n",
+ " | 610 | \n",
+ " 0 days 00:00:00 | \n",
+ " 2025-01-25 02:30:57.900000+00:00 | \n",
+ " 4 | \n",
+ " game | \n",
+ " end | \n",
+ " <NA> | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " <NA> | \n",
+ " 97 | \n",
+ " ... | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " NaN | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
611 rows × 23 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " clock timeActual period \\\n",
+ "0 0 days 00:12:00 2025-01-25 00:10:48.500000+00:00 1 \n",
+ "1 0 days 00:11:57 2025-01-25 00:10:50.500000+00:00 1 \n",
+ "2 0 days 00:11:37 2025-01-25 00:11:10.200000+00:00 1 \n",
+ "3 0 days 00:11:37 2025-01-25 00:11:10.200000+00:00 1 \n",
+ "4 0 days 00:11:34 2025-01-25 00:11:13.200000+00:00 1 \n",
+ ".. ... ... ... \n",
+ "606 0 days 00:00:10.700000 2025-01-25 02:30:23.300000+00:00 4 \n",
+ "607 0 days 00:00:03.300000 2025-01-25 02:30:35.800000+00:00 4 \n",
+ "608 0 days 00:00:00 2025-01-25 02:30:44.700000+00:00 4 \n",
+ "609 0 days 00:00:00 2025-01-25 02:30:53.700000+00:00 4 \n",
+ "610 0 days 00:00:00 2025-01-25 02:30:57.900000+00:00 4 \n",
+ "\n",
+ " actionType subType personId x y possession \\\n",
+ "0 period start NaN NaN \n",
+ "1 jumpball recovered 203995 NaN NaN 1610612766 \n",
+ "2 2pt DUNK 1631109 8.882812 51.96875 1610612766 \n",
+ "3 block 1642270 NaN NaN 1610612766 \n",
+ "4 rebound defensive 1642270 NaN NaN 1610612757 \n",
+ ".. ... ... ... ... ... ... \n",
+ "606 2pt DUNK 1631109 94.062500 51.71875 1610612766 \n",
+ "607 2pt DUNK 1641739 7.441406 52.68750 1610612757 \n",
+ "608 2pt Layup 1631109 94.437500 47.06250 1610612766 \n",
+ "609 period end NaN NaN 1610612757 \n",
+ "610 game end NaN NaN \n",
+ "\n",
+ " scoreHome ... jumpBallRecoveredPersonId jumpBallWonPersonId \\\n",
+ "0 0 ... \n",
+ "1 0 ... 203995 1631109 \n",
+ "2 0 ... \n",
+ "3 0 ... \n",
+ "4 0 ... \n",
+ ".. ... ... ... ... \n",
+ "606 95 ... \n",
+ "607 95 ... \n",
+ "608 97 ... \n",
+ "609 97 ... \n",
+ "610 97 ... \n",
+ "\n",
+ " jumpBallLostPersonId shotDistance shotResult blockPersonId \\\n",
+ "0 NaN \n",
+ "1 1642270 NaN \n",
+ "2 3.250000 False 1642270 \n",
+ "3 NaN \n",
+ "4 NaN \n",
+ ".. ... ... ... ... \n",
+ "606 0.930176 True \n",
+ "607 2.199219 True \n",
+ "608 1.469727 True \n",
+ "609 NaN \n",
+ "610 NaN \n",
+ "\n",
+ " assistPersonId officialId foulDrawnPersonId stealPersonId \n",
+ "0 \n",
+ "1 \n",
+ "2 \n",
+ "3 \n",
+ "4 \n",
+ ".. ... ... ... ... \n",
+ "606 1630182 \n",
+ "607 1629014 \n",
+ "608 1641733 \n",
+ "609 \n",
+ "610 \n",
+ "\n",
+ "[611 rows x 23 columns]"
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "id": "97c3221c-1da0-4675-bff6-b5e21cfdf587",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "\n",
+ "[ 'period', 'jumpball', '2pt', 'block',\n",
+ " 'rebound', '3pt', 'foul', 'substitution',\n",
+ " 'timeout', 'turnover', 'steal', 'freethrow',\n",
+ " 'violation', 'game']\n",
+ "Length: 14, dtype: string"
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df['actionType'].unique()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "id": "53109396-f4b5-47a8-b14d-eecd18a89ea8",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "{'2pt': ['DUNK', 'Jump Shot', 'Layup', 'Hook'],\n",
+ " '3pt': ['Jump Shot'],\n",
+ " 'block': [''],\n",
+ " 'foul': ['personal', 'offensive', 'technical'],\n",
+ " 'freethrow': ['1 of 2', '2 of 2', '1 of 1'],\n",
+ " 'game': ['end'],\n",
+ " 'jumpball': ['recovered'],\n",
+ " 'period': ['start', 'end'],\n",
+ " 'rebound': ['defensive', 'offensive'],\n",
+ " 'steal': [''],\n",
+ " 'substitution': ['out', 'in'],\n",
+ " 'timeout': ['full'],\n",
+ " 'turnover': ['out-of-bounds',\n",
+ " 'traveling',\n",
+ " 'lost ball',\n",
+ " 'bad pass',\n",
+ " 'offensive foul',\n",
+ " 'shot clock'],\n",
+ " 'violation': ['kicked ball',\n",
+ " 'defensive goaltending',\n",
+ " 'lane',\n",
+ " 'delay-of-game']}"
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "action_subtypes = {\n",
+ " action: action_df['subType'].unique().tolist()\n",
+ " for action, action_df in df.groupby('actionType')\n",
+ "}\n",
+ "\n",
+ "action_subtypes"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "id": "5907257c-5689-4102-968c-cb6cdd5a3193",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "df_by_action = df.groupby('actionType')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "id": "dd631ef5-7678-4c97-8418-37e3b4f4f7d2",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " clock | \n",
+ " timeActual | \n",
+ " period | \n",
+ " actionType | \n",
+ " subType | \n",
+ " possession | \n",
+ " scoreHome | \n",
+ " scoreAway | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 0 days 00:12:00 | \n",
+ " 2025-01-25 00:10:48.500000+00:00 | \n",
+ " 1 | \n",
+ " period | \n",
+ " start | \n",
+ " <NA> | \n",
+ " 0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 122 | \n",
+ " 0 days 00:00:00 | \n",
+ " 2025-01-25 00:31:45.400000+00:00 | \n",
+ " 1 | \n",
+ " period | \n",
+ " end | \n",
+ " 1610612766 | \n",
+ " 30 | \n",
+ " 22 | \n",
+ "
\n",
+ " \n",
+ " | 129 | \n",
+ " 0 days 00:12:00 | \n",
+ " 2025-01-25 00:35:10.900000+00:00 | \n",
+ " 2 | \n",
+ " period | \n",
+ " start | \n",
+ " 1610612757 | \n",
+ " 30 | \n",
+ " 22 | \n",
+ "
\n",
+ " \n",
+ " | 272 | \n",
+ " 0 days 00:00:00 | \n",
+ " 2025-01-25 01:03:32.200000+00:00 | \n",
+ " 2 | \n",
+ " period | \n",
+ " end | \n",
+ " 1610612757 | \n",
+ " 54 | \n",
+ " 50 | \n",
+ "
\n",
+ " \n",
+ " | 279 | \n",
+ " 0 days 00:12:00 | \n",
+ " 2025-01-25 01:18:44.200000+00:00 | \n",
+ " 3 | \n",
+ " period | \n",
+ " start | \n",
+ " 1610612757 | \n",
+ " 54 | \n",
+ " 50 | \n",
+ "
\n",
+ " \n",
+ " | 436 | \n",
+ " 0 days 00:00:00 | \n",
+ " 2025-01-25 01:51:09+00:00 | \n",
+ " 3 | \n",
+ " period | \n",
+ " end | \n",
+ " 1610612757 | \n",
+ " 75 | \n",
+ " 73 | \n",
+ "
\n",
+ " \n",
+ " | 447 | \n",
+ " 0 days 00:12:00 | \n",
+ " 2025-01-25 01:53:43.100000+00:00 | \n",
+ " 4 | \n",
+ " period | \n",
+ " start | \n",
+ " 1610612766 | \n",
+ " 75 | \n",
+ " 73 | \n",
+ "
\n",
+ " \n",
+ " | 609 | \n",
+ " 0 days 00:00:00 | \n",
+ " 2025-01-25 02:30:53.700000+00:00 | \n",
+ " 4 | \n",
+ " period | \n",
+ " end | \n",
+ " 1610612757 | \n",
+ " 97 | \n",
+ " 102 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " clock timeActual period actionType \\\n",
+ "0 0 days 00:12:00 2025-01-25 00:10:48.500000+00:00 1 period \n",
+ "122 0 days 00:00:00 2025-01-25 00:31:45.400000+00:00 1 period \n",
+ "129 0 days 00:12:00 2025-01-25 00:35:10.900000+00:00 2 period \n",
+ "272 0 days 00:00:00 2025-01-25 01:03:32.200000+00:00 2 period \n",
+ "279 0 days 00:12:00 2025-01-25 01:18:44.200000+00:00 3 period \n",
+ "436 0 days 00:00:00 2025-01-25 01:51:09+00:00 3 period \n",
+ "447 0 days 00:12:00 2025-01-25 01:53:43.100000+00:00 4 period \n",
+ "609 0 days 00:00:00 2025-01-25 02:30:53.700000+00:00 4 period \n",
+ "\n",
+ " subType possession scoreHome scoreAway \n",
+ "0 start 0 0 \n",
+ "122 end 1610612766 30 22 \n",
+ "129 start 1610612757 30 22 \n",
+ "272 end 1610612757 54 50 \n",
+ "279 start 1610612757 54 50 \n",
+ "436 end 1610612757 75 73 \n",
+ "447 start 1610612766 75 73 \n",
+ "609 end 1610612757 97 102 "
+ ]
+ },
+ "execution_count": 10,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "period_df = df_by_action.get_group('period').dropna(how='all', axis=1)\n",
+ "period_df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "id": "07281115-a591-477e-a2e9-0ff2420b414c",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " clock | \n",
+ " timeActual | \n",
+ " period | \n",
+ " actionType | \n",
+ " subType | \n",
+ " scoreHome | \n",
+ " scoreAway | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 610 | \n",
+ " 0 days | \n",
+ " 2025-01-25 02:30:57.900000+00:00 | \n",
+ " 4 | \n",
+ " game | \n",
+ " end | \n",
+ " 97 | \n",
+ " 102 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " clock timeActual period actionType subType \\\n",
+ "610 0 days 2025-01-25 02:30:57.900000+00:00 4 game end \n",
+ "\n",
+ " scoreHome scoreAway \n",
+ "610 97 102 "
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "game_df = df_by_action.get_group('game').dropna(how='all', axis=1)\n",
+ "game_df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "id": "2fb84030-5b2e-4bd9-9f21-d016a3bcf738",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " clock | \n",
+ " timeActual | \n",
+ " period | \n",
+ " actionType | \n",
+ " subType | \n",
+ " personId | \n",
+ " possession | \n",
+ " scoreHome | \n",
+ " scoreAway | \n",
+ " teamId | \n",
+ " descriptor | \n",
+ " jumpBallRecoveredPersonId | \n",
+ " jumpBallWonPersonId | \n",
+ " jumpBallLostPersonId | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 1 | \n",
+ " 0 days 00:11:57 | \n",
+ " 2025-01-25 00:10:50.500000+00:00 | \n",
+ " 1 | \n",
+ " jumpball | \n",
+ " recovered | \n",
+ " 203995 | \n",
+ " 1610612766 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1610612766 | \n",
+ " startperiod | \n",
+ " 203995 | \n",
+ " 1631109 | \n",
+ " 1642270 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " clock timeActual period actionType \\\n",
+ "1 0 days 00:11:57 2025-01-25 00:10:50.500000+00:00 1 jumpball \n",
+ "\n",
+ " subType personId possession scoreHome scoreAway teamId \\\n",
+ "1 recovered 203995 1610612766 0 0 1610612766 \n",
+ "\n",
+ " descriptor jumpBallRecoveredPersonId jumpBallWonPersonId \\\n",
+ "1 startperiod 203995 1631109 \n",
+ "\n",
+ " jumpBallLostPersonId \n",
+ "1 1642270 "
+ ]
+ },
+ "execution_count": 12,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "jumpball_df = df_by_action.get_group('jumpball').dropna(how='all', axis=1)\n",
+ "jumpball_df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "id": "b2ff37ef-a536-4ee9-b12a-6a89dd0c1589",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " clock | \n",
+ " timeActual | \n",
+ " period | \n",
+ " actionType | \n",
+ " subType | \n",
+ " personId | \n",
+ " possession | \n",
+ " scoreHome | \n",
+ " scoreAway | \n",
+ " teamId | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 39 | \n",
+ " 0 days 00:07:11 | \n",
+ " 2025-01-25 00:15:59.700000+00:00 | \n",
+ " 1 | \n",
+ " substitution | \n",
+ " out | \n",
+ " 1628998 | \n",
+ " 1610612757 | \n",
+ " 10 | \n",
+ " 12 | \n",
+ " 1610612766 | \n",
+ "
\n",
+ " \n",
+ " | 40 | \n",
+ " 0 days 00:07:11 | \n",
+ " 2025-01-25 00:15:59.700000+00:00 | \n",
+ " 1 | \n",
+ " substitution | \n",
+ " out | \n",
+ " 1642270 | \n",
+ " 1610612757 | \n",
+ " 10 | \n",
+ " 12 | \n",
+ " 1610612757 | \n",
+ "
\n",
+ " \n",
+ " | 41 | \n",
+ " 0 days 00:07:11 | \n",
+ " 2025-01-25 00:15:59.700000+00:00 | \n",
+ " 1 | \n",
+ " substitution | \n",
+ " out | \n",
+ " 1629014 | \n",
+ " 1610612757 | \n",
+ " 10 | \n",
+ " 12 | \n",
+ " 1610612757 | \n",
+ "
\n",
+ " \n",
+ " | 42 | \n",
+ " 0 days 00:07:11 | \n",
+ " 2025-01-25 00:15:59.700000+00:00 | \n",
+ " 1 | \n",
+ " substitution | \n",
+ " in | \n",
+ " 1629006 | \n",
+ " 1610612757 | \n",
+ " 10 | \n",
+ " 12 | \n",
+ " 1610612766 | \n",
+ "
\n",
+ " \n",
+ " | 43 | \n",
+ " 0 days 00:07:11 | \n",
+ " 2025-01-25 00:15:59.700000+00:00 | \n",
+ " 1 | \n",
+ " substitution | \n",
+ " in | \n",
+ " 1630703 | \n",
+ " 1610612757 | \n",
+ " 10 | \n",
+ " 12 | \n",
+ " 1610612757 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 597 | \n",
+ " 0 days 00:00:17.600000 | \n",
+ " 2025-01-25 02:28:15.800000+00:00 | \n",
+ " 4 | \n",
+ " substitution | \n",
+ " in | \n",
+ " 1631217 | \n",
+ " 1610612757 | \n",
+ " 93 | \n",
+ " 99 | \n",
+ " 1610612766 | \n",
+ "
\n",
+ " \n",
+ " | 600 | \n",
+ " 0 days 00:00:17.600000 | \n",
+ " 2025-01-25 02:29:25.600000+00:00 | \n",
+ " 4 | \n",
+ " substitution | \n",
+ " out | \n",
+ " 1629006 | \n",
+ " 1610612766 | \n",
+ " 93 | \n",
+ " 100 | \n",
+ " 1610612766 | \n",
+ "
\n",
+ " \n",
+ " | 601 | \n",
+ " 0 days 00:00:17.600000 | \n",
+ " 2025-01-25 02:29:25.600000+00:00 | \n",
+ " 4 | \n",
+ " substitution | \n",
+ " out | \n",
+ " 1631217 | \n",
+ " 1610612766 | \n",
+ " 93 | \n",
+ " 100 | \n",
+ " 1610612766 | \n",
+ "
\n",
+ " \n",
+ " | 602 | \n",
+ " 0 days 00:00:17.600000 | \n",
+ " 2025-01-25 02:29:25.600000+00:00 | \n",
+ " 4 | \n",
+ " substitution | \n",
+ " in | \n",
+ " 1642354 | \n",
+ " 1610612766 | \n",
+ " 93 | \n",
+ " 100 | \n",
+ " 1610612766 | \n",
+ "
\n",
+ " \n",
+ " | 603 | \n",
+ " 0 days 00:00:17.600000 | \n",
+ " 2025-01-25 02:29:25.600000+00:00 | \n",
+ " 4 | \n",
+ " substitution | \n",
+ " in | \n",
+ " 203995 | \n",
+ " 1610612766 | \n",
+ " 93 | \n",
+ " 100 | \n",
+ " 1610612766 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
122 rows × 10 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " clock timeActual period \\\n",
+ "39 0 days 00:07:11 2025-01-25 00:15:59.700000+00:00 1 \n",
+ "40 0 days 00:07:11 2025-01-25 00:15:59.700000+00:00 1 \n",
+ "41 0 days 00:07:11 2025-01-25 00:15:59.700000+00:00 1 \n",
+ "42 0 days 00:07:11 2025-01-25 00:15:59.700000+00:00 1 \n",
+ "43 0 days 00:07:11 2025-01-25 00:15:59.700000+00:00 1 \n",
+ ".. ... ... ... \n",
+ "597 0 days 00:00:17.600000 2025-01-25 02:28:15.800000+00:00 4 \n",
+ "600 0 days 00:00:17.600000 2025-01-25 02:29:25.600000+00:00 4 \n",
+ "601 0 days 00:00:17.600000 2025-01-25 02:29:25.600000+00:00 4 \n",
+ "602 0 days 00:00:17.600000 2025-01-25 02:29:25.600000+00:00 4 \n",
+ "603 0 days 00:00:17.600000 2025-01-25 02:29:25.600000+00:00 4 \n",
+ "\n",
+ " actionType subType personId possession scoreHome scoreAway \\\n",
+ "39 substitution out 1628998 1610612757 10 12 \n",
+ "40 substitution out 1642270 1610612757 10 12 \n",
+ "41 substitution out 1629014 1610612757 10 12 \n",
+ "42 substitution in 1629006 1610612757 10 12 \n",
+ "43 substitution in 1630703 1610612757 10 12 \n",
+ ".. ... ... ... ... ... ... \n",
+ "597 substitution in 1631217 1610612757 93 99 \n",
+ "600 substitution out 1629006 1610612766 93 100 \n",
+ "601 substitution out 1631217 1610612766 93 100 \n",
+ "602 substitution in 1642354 1610612766 93 100 \n",
+ "603 substitution in 203995 1610612766 93 100 \n",
+ "\n",
+ " teamId \n",
+ "39 1610612766 \n",
+ "40 1610612757 \n",
+ "41 1610612757 \n",
+ "42 1610612766 \n",
+ "43 1610612757 \n",
+ ".. ... \n",
+ "597 1610612766 \n",
+ "600 1610612766 \n",
+ "601 1610612766 \n",
+ "602 1610612766 \n",
+ "603 1610612766 \n",
+ "\n",
+ "[122 rows x 10 columns]"
+ ]
+ },
+ "execution_count": 13,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "substitution_df = df_by_action.get_group('substitution').dropna(how='all', axis=1)\n",
+ "substitution_df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "id": "687ad37d-a22e-44ee-8b1e-564cb12a7ecc",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " clock | \n",
+ " timeActual | \n",
+ " period | \n",
+ " actionType | \n",
+ " subType | \n",
+ " possession | \n",
+ " scoreHome | \n",
+ " scoreAway | \n",
+ " teamId | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 51 | \n",
+ " 0 days 00:06:59 | \n",
+ " 2025-01-25 00:16:48+00:00 | \n",
+ " 1 | \n",
+ " timeout | \n",
+ " full | \n",
+ " 1610612766 | \n",
+ " 10 | \n",
+ " 12 | \n",
+ " 1610612766 | \n",
+ "
\n",
+ " \n",
+ " | 70 | \n",
+ " 0 days 00:04:39 | \n",
+ " 2025-01-25 00:22:19.900000+00:00 | \n",
+ " 1 | \n",
+ " timeout | \n",
+ " full | \n",
+ " 1610612757 | \n",
+ " 24 | \n",
+ " 12 | \n",
+ " 1610612757 | \n",
+ "
\n",
+ " \n",
+ " | 151 | \n",
+ " 0 days 00:09:35 | \n",
+ " 2025-01-25 00:38:06.700000+00:00 | \n",
+ " 2 | \n",
+ " timeout | \n",
+ " full | \n",
+ " 1610612757 | \n",
+ " 37 | \n",
+ " 24 | \n",
+ " 1610612757 | \n",
+ "
\n",
+ " \n",
+ " | 206 | \n",
+ " 0 days 00:05:53 | \n",
+ " 2025-01-25 00:48:02.600000+00:00 | \n",
+ " 2 | \n",
+ " timeout | \n",
+ " full | \n",
+ " 1610612766 | \n",
+ " 42 | \n",
+ " 36 | \n",
+ " 1610612766 | \n",
+ "
\n",
+ " \n",
+ " | 296 | \n",
+ " 0 days 00:10:20 | \n",
+ " 2025-01-25 01:22:19.700000+00:00 | \n",
+ " 3 | \n",
+ " timeout | \n",
+ " full | \n",
+ " 1610612757 | \n",
+ " 54 | \n",
+ " 58 | \n",
+ " 1610612766 | \n",
+ "
\n",
+ " \n",
+ " | 406 | \n",
+ " 0 days 00:02:49 | \n",
+ " 2025-01-25 01:42:57.200000+00:00 | \n",
+ " 3 | \n",
+ " timeout | \n",
+ " full | \n",
+ " 1610612766 | \n",
+ " 70 | \n",
+ " 66 | \n",
+ " 1610612757 | \n",
+ "
\n",
+ " \n",
+ " | 509 | \n",
+ " 0 days 00:06:40 | \n",
+ " 2025-01-25 02:03:24.300000+00:00 | \n",
+ " 4 | \n",
+ " timeout | \n",
+ " full | \n",
+ " 1610612766 | \n",
+ " 81 | \n",
+ " 88 | \n",
+ " 1610612766 | \n",
+ "
\n",
+ " \n",
+ " | 532 | \n",
+ " 0 days 00:04:33 | \n",
+ " 2025-01-25 02:09:43.700000+00:00 | \n",
+ " 4 | \n",
+ " timeout | \n",
+ " full | \n",
+ " 1610612757 | \n",
+ " 83 | \n",
+ " 90 | \n",
+ " 1610612757 | \n",
+ "
\n",
+ " \n",
+ " | 539 | \n",
+ " 0 days 00:03:31 | \n",
+ " 2025-01-25 02:14:32.700000+00:00 | \n",
+ " 4 | \n",
+ " timeout | \n",
+ " full | \n",
+ " 1610612757 | \n",
+ " 86 | \n",
+ " 92 | \n",
+ " 1610612757 | \n",
+ "
\n",
+ " \n",
+ " | 543 | \n",
+ " 0 days 00:03:08 | \n",
+ " 2025-01-25 02:16:44.700000+00:00 | \n",
+ " 4 | \n",
+ " timeout | \n",
+ " full | \n",
+ " 1610612766 | \n",
+ " 86 | \n",
+ " 92 | \n",
+ " 1610612766 | \n",
+ "
\n",
+ " \n",
+ " | 580 | \n",
+ " 0 days 00:00:30.500000 | \n",
+ " 2025-01-25 02:24:53.800000+00:00 | \n",
+ " 4 | \n",
+ " timeout | \n",
+ " full | \n",
+ " 1610612766 | \n",
+ " 90 | \n",
+ " 96 | \n",
+ " 1610612757 | \n",
+ "
\n",
+ " \n",
+ " | 599 | \n",
+ " 0 days 00:00:17.600000 | \n",
+ " 2025-01-25 02:28:33.300000+00:00 | \n",
+ " 4 | \n",
+ " timeout | \n",
+ " full | \n",
+ " 1610612766 | \n",
+ " 93 | \n",
+ " 100 | \n",
+ " 1610612766 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " clock timeActual period \\\n",
+ "51 0 days 00:06:59 2025-01-25 00:16:48+00:00 1 \n",
+ "70 0 days 00:04:39 2025-01-25 00:22:19.900000+00:00 1 \n",
+ "151 0 days 00:09:35 2025-01-25 00:38:06.700000+00:00 2 \n",
+ "206 0 days 00:05:53 2025-01-25 00:48:02.600000+00:00 2 \n",
+ "296 0 days 00:10:20 2025-01-25 01:22:19.700000+00:00 3 \n",
+ "406 0 days 00:02:49 2025-01-25 01:42:57.200000+00:00 3 \n",
+ "509 0 days 00:06:40 2025-01-25 02:03:24.300000+00:00 4 \n",
+ "532 0 days 00:04:33 2025-01-25 02:09:43.700000+00:00 4 \n",
+ "539 0 days 00:03:31 2025-01-25 02:14:32.700000+00:00 4 \n",
+ "543 0 days 00:03:08 2025-01-25 02:16:44.700000+00:00 4 \n",
+ "580 0 days 00:00:30.500000 2025-01-25 02:24:53.800000+00:00 4 \n",
+ "599 0 days 00:00:17.600000 2025-01-25 02:28:33.300000+00:00 4 \n",
+ "\n",
+ " actionType subType possession scoreHome scoreAway teamId \n",
+ "51 timeout full 1610612766 10 12 1610612766 \n",
+ "70 timeout full 1610612757 24 12 1610612757 \n",
+ "151 timeout full 1610612757 37 24 1610612757 \n",
+ "206 timeout full 1610612766 42 36 1610612766 \n",
+ "296 timeout full 1610612757 54 58 1610612766 \n",
+ "406 timeout full 1610612766 70 66 1610612757 \n",
+ "509 timeout full 1610612766 81 88 1610612766 \n",
+ "532 timeout full 1610612757 83 90 1610612757 \n",
+ "539 timeout full 1610612757 86 92 1610612757 \n",
+ "543 timeout full 1610612766 86 92 1610612766 \n",
+ "580 timeout full 1610612766 90 96 1610612757 \n",
+ "599 timeout full 1610612766 93 100 1610612766 "
+ ]
+ },
+ "execution_count": 14,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "timeout_df = df_by_action.get_group('timeout').dropna(how='all', axis=1)\n",
+ "timeout_df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "id": "0974b449-2f53-4ccb-9fdc-ccd22520d5eb",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " clock | \n",
+ " timeActual | \n",
+ " period | \n",
+ " actionType | \n",
+ " subType | \n",
+ " personId | \n",
+ " possession | \n",
+ " scoreHome | \n",
+ " scoreAway | \n",
+ " teamId | \n",
+ " descriptor | \n",
+ " officialId | \n",
+ " foulDrawnPersonId | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 38 | \n",
+ " 0 days 00:07:11 | \n",
+ " 2025-01-25 00:15:44.600000+00:00 | \n",
+ " 1 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 1641733 | \n",
+ " 1610612757 | \n",
+ " 10 | \n",
+ " 12 | \n",
+ " 1610612766 | \n",
+ " <NA> | \n",
+ " 1626301 | \n",
+ " 203924 | \n",
+ "
\n",
+ " \n",
+ " | 50 | \n",
+ " 0 days 00:06:59 | \n",
+ " 2025-01-25 00:16:38+00:00 | \n",
+ " 1 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 1631133 | \n",
+ " 1610612766 | \n",
+ " 10 | \n",
+ " 12 | \n",
+ " 1610612757 | \n",
+ " <NA> | \n",
+ " 1628487 | \n",
+ " 1631109 | \n",
+ "
\n",
+ " \n",
+ " | 63 | \n",
+ " 0 days 00:05:12 | \n",
+ " 2025-01-25 00:21:17.200000+00:00 | \n",
+ " 1 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 1630166 | \n",
+ " 1610612766 | \n",
+ " 19 | \n",
+ " 12 | \n",
+ " 1610612757 | \n",
+ " <NA> | \n",
+ " 1628487 | \n",
+ " 203995 | \n",
+ "
\n",
+ " \n",
+ " | 91 | \n",
+ " 0 days 00:02:41 | \n",
+ " 2025-01-25 00:27:31.900000+00:00 | \n",
+ " 1 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 1629006 | \n",
+ " 1610612757 | \n",
+ " 24 | \n",
+ " 17 | \n",
+ " 1610612766 | \n",
+ " <NA> | \n",
+ " 204059 | \n",
+ " 1630703 | \n",
+ "
\n",
+ " \n",
+ " | 107 | \n",
+ " 0 days 00:01:16 | \n",
+ " 2025-01-25 00:29:19.800000+00:00 | \n",
+ " 1 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 1629610 | \n",
+ " 1610612757 | \n",
+ " 28 | \n",
+ " 22 | \n",
+ " 1610612766 | \n",
+ " <NA> | \n",
+ " 1628487 | \n",
+ " 1630703 | \n",
+ "
\n",
+ " \n",
+ " | 110 | \n",
+ " 0 days 00:00:57.100000 | \n",
+ " 2025-01-25 00:29:53.700000+00:00 | \n",
+ " 1 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 1630625 | \n",
+ " 1610612766 | \n",
+ " 28 | \n",
+ " 22 | \n",
+ " 1610612757 | \n",
+ " shooting | \n",
+ " 204059 | \n",
+ " 1631209 | \n",
+ "
\n",
+ " \n",
+ " | 130 | \n",
+ " 0 days 00:11:47 | \n",
+ " 2025-01-25 00:35:12.400000+00:00 | \n",
+ " 2 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 1631209 | \n",
+ " 1610612757 | \n",
+ " 30 | \n",
+ " 22 | \n",
+ " 1610612766 | \n",
+ " shooting | \n",
+ " 1628487 | \n",
+ " 1629014 | \n",
+ "
\n",
+ " \n",
+ " | 135 | \n",
+ " 0 days 00:11:27 | \n",
+ " 2025-01-25 00:35:42.900000+00:00 | \n",
+ " 2 | \n",
+ " foul | \n",
+ " offensive | \n",
+ " 1630166 | \n",
+ " 1610612757 | \n",
+ " 30 | \n",
+ " 24 | \n",
+ " 1610612757 | \n",
+ " charge | \n",
+ " 204059 | \n",
+ " 1631209 | \n",
+ "
\n",
+ " \n",
+ " | 158 | \n",
+ " 0 days 00:09:18 | \n",
+ " 2025-01-25 00:41:19.100000+00:00 | \n",
+ " 2 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 203995 | \n",
+ " 1610612757 | \n",
+ " 37 | \n",
+ " 24 | \n",
+ " 1610612766 | \n",
+ " shooting | \n",
+ " 204059 | \n",
+ " 1630166 | \n",
+ "
\n",
+ " \n",
+ " | 177 | \n",
+ " 0 days 00:07:37 | \n",
+ " 2025-01-25 00:44:20.400000+00:00 | \n",
+ " 2 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 1630182 | \n",
+ " 1610612757 | \n",
+ " 37 | \n",
+ " 31 | \n",
+ " 1610612766 | \n",
+ " shooting | \n",
+ " 204059 | \n",
+ " 1630166 | \n",
+ "
\n",
+ " \n",
+ " | 184 | \n",
+ " 0 days 00:07:03 | \n",
+ " 2025-01-25 00:45:43+00:00 | \n",
+ " 2 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 1629014 | \n",
+ " 1610612766 | \n",
+ " 41 | \n",
+ " 33 | \n",
+ " 1610612757 | \n",
+ " shooting | \n",
+ " 204059 | \n",
+ " 1641733 | \n",
+ "
\n",
+ " \n",
+ " | 202 | \n",
+ " 0 days 00:06:07 | \n",
+ " 2025-01-25 00:47:34.100000+00:00 | \n",
+ " 2 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 1631109 | \n",
+ " 1610612757 | \n",
+ " 42 | \n",
+ " 33 | \n",
+ " 1610612766 | \n",
+ " loose ball | \n",
+ " 1626301 | \n",
+ " 1631133 | \n",
+ "
\n",
+ " \n",
+ " | 220 | \n",
+ " 0 days 00:05:01 | \n",
+ " 2025-01-25 00:52:04.700000+00:00 | \n",
+ " 2 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 1631109 | \n",
+ " 1610612757 | \n",
+ " 42 | \n",
+ " 36 | \n",
+ " 1610612766 | \n",
+ " shooting | \n",
+ " 1626301 | \n",
+ " 1631133 | \n",
+ "
\n",
+ " \n",
+ " | 226 | \n",
+ " 0 days 00:04:44 | \n",
+ " 2025-01-25 00:53:12.100000+00:00 | \n",
+ " 2 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 1631109 | \n",
+ " 1610612757 | \n",
+ " 42 | \n",
+ " 37 | \n",
+ " 1610612766 | \n",
+ " loose ball | \n",
+ " 1626301 | \n",
+ " 203924 | \n",
+ "
\n",
+ " \n",
+ " | 233 | \n",
+ " 0 days 00:04:38 | \n",
+ " 2025-01-25 00:54:18.100000+00:00 | \n",
+ " 2 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 1630703 | \n",
+ " 1610612766 | \n",
+ " 42 | \n",
+ " 39 | \n",
+ " 1610612757 | \n",
+ " <NA> | \n",
+ " 204059 | \n",
+ " 1641733 | \n",
+ "
\n",
+ " \n",
+ " | 234 | \n",
+ " 0 days 00:04:23 | \n",
+ " 2025-01-25 00:54:49.600000+00:00 | \n",
+ " 2 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 1631101 | \n",
+ " 1610612766 | \n",
+ " 42 | \n",
+ " 39 | \n",
+ " 1610612757 | \n",
+ " shooting | \n",
+ " 204059 | \n",
+ " 1641733 | \n",
+ "
\n",
+ " \n",
+ " | 255 | \n",
+ " 0 days 00:01:54 | \n",
+ " 2025-01-25 00:58:41.600000+00:00 | \n",
+ " 2 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 1642354 | \n",
+ " 1610612757 | \n",
+ " 48 | \n",
+ " 46 | \n",
+ " 1610612766 | \n",
+ " shooting | \n",
+ " 1628487 | \n",
+ " 1630166 | \n",
+ "
\n",
+ " \n",
+ " | 263 | \n",
+ " 0 days 00:00:58.100000 | \n",
+ " 2025-01-25 01:01:12.500000+00:00 | \n",
+ " 2 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 1630703 | \n",
+ " 1610612766 | \n",
+ " 50 | \n",
+ " 50 | \n",
+ " 1610612757 | \n",
+ " shooting | \n",
+ " 1626301 | \n",
+ " 1629006 | \n",
+ "
\n",
+ " \n",
+ " | 289 | \n",
+ " 0 days 00:10:35 | \n",
+ " 2025-01-25 01:20:42.700000+00:00 | \n",
+ " 3 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 203995 | \n",
+ " 1610612757 | \n",
+ " 54 | \n",
+ " 54 | \n",
+ " 1610612766 | \n",
+ " shooting | \n",
+ " 1626301 | \n",
+ " 1630166 | \n",
+ "
\n",
+ " \n",
+ " | 295 | \n",
+ " 0 days 00:10:20 | \n",
+ " 2025-01-25 01:22:05.200000+00:00 | \n",
+ " 3 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 203995 | \n",
+ " 1610612757 | \n",
+ " 54 | \n",
+ " 58 | \n",
+ " 1610612766 | \n",
+ " shooting | \n",
+ " 1628487 | \n",
+ " 1641739 | \n",
+ "
\n",
+ " \n",
+ " | 306 | \n",
+ " 0 days 00:09:02 | \n",
+ " 2025-01-25 01:26:46.700000+00:00 | \n",
+ " 3 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 1641739 | \n",
+ " 1610612766 | \n",
+ " 54 | \n",
+ " 61 | \n",
+ " 1610612757 | \n",
+ " shooting | \n",
+ " 1626301 | \n",
+ " 1629006 | \n",
+ "
\n",
+ " \n",
+ " | 319 | \n",
+ " 0 days 00:08:11 | \n",
+ " 2025-01-25 01:28:34.600000+00:00 | \n",
+ " 3 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 1629006 | \n",
+ " 1610612757 | \n",
+ " 57 | \n",
+ " 61 | \n",
+ " 1610612766 | \n",
+ " <NA> | \n",
+ " 1628487 | \n",
+ " 1629014 | \n",
+ "
\n",
+ " \n",
+ " | 320 | \n",
+ " 0 days 00:08:06 | \n",
+ " 2025-01-25 01:28:51.400000+00:00 | \n",
+ " 3 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 1641733 | \n",
+ " 1610612757 | \n",
+ " 57 | \n",
+ " 61 | \n",
+ " 1610612766 | \n",
+ " <NA> | \n",
+ " 204059 | \n",
+ " 1630166 | \n",
+ "
\n",
+ " \n",
+ " | 342 | \n",
+ " 0 days 00:06:09 | \n",
+ " 2025-01-25 01:32:10.400000+00:00 | \n",
+ " 3 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 203924 | \n",
+ " 1610612766 | \n",
+ " 61 | \n",
+ " 63 | \n",
+ " 1610612757 | \n",
+ " shooting | \n",
+ " 204059 | \n",
+ " 203995 | \n",
+ "
\n",
+ " \n",
+ " | 362 | \n",
+ " 0 days 00:04:51 | \n",
+ " 2025-01-25 01:35:04.600000+00:00 | \n",
+ " 3 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 1631101 | \n",
+ " 1610612766 | \n",
+ " 65 | \n",
+ " 65 | \n",
+ " 1610612757 | \n",
+ " <NA> | \n",
+ " 1628487 | \n",
+ " 1641733 | \n",
+ "
\n",
+ " \n",
+ " | 373 | \n",
+ " 0 days 00:04:34 | \n",
+ " 2025-01-25 01:35:42.400000+00:00 | \n",
+ " 3 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 1630625 | \n",
+ " 1610612766 | \n",
+ " 65 | \n",
+ " 65 | \n",
+ " 1610612757 | \n",
+ " shooting | \n",
+ " 1626301 | \n",
+ " 1630182 | \n",
+ "
\n",
+ " \n",
+ " | 380 | \n",
+ " 0 days 00:03:57 | \n",
+ " 2025-01-25 01:37:28.700000+00:00 | \n",
+ " 3 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 1631133 | \n",
+ " 1610612766 | \n",
+ " 67 | \n",
+ " 65 | \n",
+ " 1610612757 | \n",
+ " shooting | \n",
+ " 1626301 | \n",
+ " 1642354 | \n",
+ "
\n",
+ " \n",
+ " | 383 | \n",
+ " 0 days 00:03:39 | \n",
+ " 2025-01-25 01:38:27.700000+00:00 | \n",
+ " 3 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 1629610 | \n",
+ " 1610612757 | \n",
+ " 69 | \n",
+ " 65 | \n",
+ " 1610612766 | \n",
+ " shooting | \n",
+ " 1628487 | \n",
+ " 1631133 | \n",
+ "
\n",
+ " \n",
+ " | 388 | \n",
+ " 0 days 00:03:37 | \n",
+ " 2025-01-25 01:39:12.600000+00:00 | \n",
+ " 3 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 1641739 | \n",
+ " 1610612766 | \n",
+ " 69 | \n",
+ " 65 | \n",
+ " 1610612757 | \n",
+ " <NA> | \n",
+ " 1626301 | \n",
+ " 1629006 | \n",
+ "
\n",
+ " \n",
+ " | 394 | \n",
+ " 0 days 00:03:22 | \n",
+ " 2025-01-25 01:40:39.400000+00:00 | \n",
+ " 3 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 1631217 | \n",
+ " 1610612757 | \n",
+ " 70 | \n",
+ " 65 | \n",
+ " 1610612766 | \n",
+ " shooting | \n",
+ " 1628487 | \n",
+ " 1630166 | \n",
+ "
\n",
+ " \n",
+ " | 398 | \n",
+ " 0 days 00:03:12 | \n",
+ " 2025-01-25 01:41:28.800000+00:00 | \n",
+ " 3 | \n",
+ " foul | \n",
+ " offensive | \n",
+ " 1631209 | \n",
+ " 1610612766 | \n",
+ " 70 | \n",
+ " 66 | \n",
+ " 1610612766 | \n",
+ " <NA> | \n",
+ " 1626301 | \n",
+ " 1630703 | \n",
+ "
\n",
+ " \n",
+ " | 400 | \n",
+ " 0 days 00:03:01 | \n",
+ " 2025-01-25 01:41:54.900000+00:00 | \n",
+ " 3 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 1642354 | \n",
+ " 1610612757 | \n",
+ " 70 | \n",
+ " 66 | \n",
+ " 1610612766 | \n",
+ " <NA> | \n",
+ " 1626301 | \n",
+ " 1630703 | \n",
+ "
\n",
+ " \n",
+ " | 405 | \n",
+ " 0 days 00:02:49 | \n",
+ " 2025-01-25 01:42:41.700000+00:00 | \n",
+ " 3 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 1631101 | \n",
+ " 1610612766 | \n",
+ " 70 | \n",
+ " 66 | \n",
+ " 1610612757 | \n",
+ " shooting | \n",
+ " 204059 | \n",
+ " 1629006 | \n",
+ "
\n",
+ " \n",
+ " | 418 | \n",
+ " 0 days 00:01:26 | \n",
+ " 2025-01-25 01:47:49.700000+00:00 | \n",
+ " 3 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 1631209 | \n",
+ " 1610612757 | \n",
+ " 75 | \n",
+ " 68 | \n",
+ " 1610612766 | \n",
+ " <NA> | \n",
+ " 204059 | \n",
+ " 1630625 | \n",
+ "
\n",
+ " \n",
+ " | 428 | \n",
+ " 0 days 00:00:27.300000 | \n",
+ " 2025-01-25 01:49:38.600000+00:00 | \n",
+ " 3 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 1629006 | \n",
+ " 1610612757 | \n",
+ " 75 | \n",
+ " 72 | \n",
+ " 1610612766 | \n",
+ " shooting | \n",
+ " 1626301 | \n",
+ " 1631101 | \n",
+ "
\n",
+ " \n",
+ " | 470 | \n",
+ " 0 days 00:09:07 | \n",
+ " 2025-01-25 01:57:13.200000+00:00 | \n",
+ " 4 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 1642270 | \n",
+ " 1610612766 | \n",
+ " 77 | \n",
+ " 77 | \n",
+ " 1610612757 | \n",
+ " shooting | \n",
+ " 1628487 | \n",
+ " 1631109 | \n",
+ "
\n",
+ " \n",
+ " | 477 | \n",
+ " 0 days 00:08:59 | \n",
+ " 2025-01-25 01:58:11+00:00 | \n",
+ " 4 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 1641733 | \n",
+ " 1610612757 | \n",
+ " 78 | \n",
+ " 79 | \n",
+ " 1610612766 | \n",
+ " shooting | \n",
+ " 1628487 | \n",
+ " 1631101 | \n",
+ "
\n",
+ " \n",
+ " | 480 | \n",
+ " 0 days 00:08:49 | \n",
+ " 2025-01-25 01:58:50.600000+00:00 | \n",
+ " 4 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 1631101 | \n",
+ " 1610612766 | \n",
+ " 80 | \n",
+ " 80 | \n",
+ " 1610612757 | \n",
+ " shooting | \n",
+ " 1628487 | \n",
+ " 203995 | \n",
+ "
\n",
+ " \n",
+ " | 484 | \n",
+ " 0 days 00:08:29 | \n",
+ " 2025-01-25 01:59:41.400000+00:00 | \n",
+ " 4 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 1631109 | \n",
+ " 1610612757 | \n",
+ " 81 | \n",
+ " 80 | \n",
+ " 1610612766 | \n",
+ " loose ball | \n",
+ " 1626301 | \n",
+ " 1641739 | \n",
+ "
\n",
+ " \n",
+ " | 491 | \n",
+ " 0 days 00:08:07 | \n",
+ " 2025-01-25 02:00:26.700000+00:00 | \n",
+ " 4 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 1642354 | \n",
+ " 1610612757 | \n",
+ " 81 | \n",
+ " 80 | \n",
+ " 1610612766 | \n",
+ " shooting | \n",
+ " 204059 | \n",
+ " 1629014 | \n",
+ "
\n",
+ " \n",
+ " | 502 | \n",
+ " 0 days 00:07:13 | \n",
+ " 2025-01-25 02:02:19.800000+00:00 | \n",
+ " 4 | \n",
+ " foul | \n",
+ " technical | \n",
+ " 1631109 | \n",
+ " 1610612757 | \n",
+ " 81 | \n",
+ " 84 | \n",
+ " 1610612766 | \n",
+ " defensive-3-second | \n",
+ " 204059 | \n",
+ " <NA> | \n",
+ "
\n",
+ " \n",
+ " | 519 | \n",
+ " 0 days 00:05:28 | \n",
+ " 2025-01-25 02:07:36.400000+00:00 | \n",
+ " 4 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 1630182 | \n",
+ " 1610612757 | \n",
+ " 83 | \n",
+ " 88 | \n",
+ " 1610612766 | \n",
+ " shooting | \n",
+ " 1626301 | \n",
+ " 1629014 | \n",
+ "
\n",
+ " \n",
+ " | 535 | \n",
+ " 0 days 00:04:04 | \n",
+ " 2025-01-25 02:13:06.700000+00:00 | \n",
+ " 4 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 203995 | \n",
+ " 1610612757 | \n",
+ " 83 | \n",
+ " 90 | \n",
+ " 1610612766 | \n",
+ " <NA> | \n",
+ " 204059 | \n",
+ " 1630166 | \n",
+ "
\n",
+ " \n",
+ " | 542 | \n",
+ " 0 days 00:03:08 | \n",
+ " 2025-01-25 02:16:32.800000+00:00 | \n",
+ " 4 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 1641739 | \n",
+ " 1610612766 | \n",
+ " 86 | \n",
+ " 92 | \n",
+ " 1610612757 | \n",
+ " <NA> | \n",
+ " 1626301 | \n",
+ " 1642354 | \n",
+ "
\n",
+ " \n",
+ " | 546 | \n",
+ " 0 days 00:02:41 | \n",
+ " 2025-01-25 02:18:40.400000+00:00 | \n",
+ " 4 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 1631109 | \n",
+ " 1610612757 | \n",
+ " 86 | \n",
+ " 92 | \n",
+ " 1610612766 | \n",
+ " shooting | \n",
+ " 1626301 | \n",
+ " 1629014 | \n",
+ "
\n",
+ " \n",
+ " | 558 | \n",
+ " 0 days 00:01:30 | \n",
+ " 2025-01-25 02:20:46.300000+00:00 | \n",
+ " 4 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 1631101 | \n",
+ " 1610612766 | \n",
+ " 86 | \n",
+ " 94 | \n",
+ " 1610612757 | \n",
+ " shooting | \n",
+ " 204059 | \n",
+ " 1629006 | \n",
+ "
\n",
+ " \n",
+ " | 562 | \n",
+ " 0 days 00:01:29 | \n",
+ " 2025-01-25 02:21:28.200000+00:00 | \n",
+ " 4 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 1631101 | \n",
+ " 1610612766 | \n",
+ " 87 | \n",
+ " 94 | \n",
+ " 1610612757 | \n",
+ " shooting | \n",
+ " 1628487 | \n",
+ " 1629006 | \n",
+ "
\n",
+ " \n",
+ " | 573 | \n",
+ " 0 days 00:00:30.500000 | \n",
+ " 2025-01-25 02:23:37.700000+00:00 | \n",
+ " 4 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 1641739 | \n",
+ " 1610612766 | \n",
+ " 89 | \n",
+ " 96 | \n",
+ " 1610612757 | \n",
+ " shooting | \n",
+ " 204059 | \n",
+ " 1631109 | \n",
+ "
\n",
+ " \n",
+ " | 586 | \n",
+ " 0 days 00:00:28.100000 | \n",
+ " 2025-01-25 02:26:37.800000+00:00 | \n",
+ " 4 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 1629006 | \n",
+ " 1610612757 | \n",
+ " 91 | \n",
+ " 96 | \n",
+ " 1610612766 | \n",
+ " take | \n",
+ " 1626301 | \n",
+ " 203924 | \n",
+ "
\n",
+ " \n",
+ " | 594 | \n",
+ " 0 days 00:00:17.600000 | \n",
+ " 2025-01-25 02:27:42.900000+00:00 | \n",
+ " 4 | \n",
+ " foul | \n",
+ " personal | \n",
+ " 1629006 | \n",
+ " 1610612757 | \n",
+ " 93 | \n",
+ " 98 | \n",
+ " 1610612766 | \n",
+ " take | \n",
+ " 1626301 | \n",
+ " 1630166 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " clock timeActual period \\\n",
+ "38 0 days 00:07:11 2025-01-25 00:15:44.600000+00:00 1 \n",
+ "50 0 days 00:06:59 2025-01-25 00:16:38+00:00 1 \n",
+ "63 0 days 00:05:12 2025-01-25 00:21:17.200000+00:00 1 \n",
+ "91 0 days 00:02:41 2025-01-25 00:27:31.900000+00:00 1 \n",
+ "107 0 days 00:01:16 2025-01-25 00:29:19.800000+00:00 1 \n",
+ "110 0 days 00:00:57.100000 2025-01-25 00:29:53.700000+00:00 1 \n",
+ "130 0 days 00:11:47 2025-01-25 00:35:12.400000+00:00 2 \n",
+ "135 0 days 00:11:27 2025-01-25 00:35:42.900000+00:00 2 \n",
+ "158 0 days 00:09:18 2025-01-25 00:41:19.100000+00:00 2 \n",
+ "177 0 days 00:07:37 2025-01-25 00:44:20.400000+00:00 2 \n",
+ "184 0 days 00:07:03 2025-01-25 00:45:43+00:00 2 \n",
+ "202 0 days 00:06:07 2025-01-25 00:47:34.100000+00:00 2 \n",
+ "220 0 days 00:05:01 2025-01-25 00:52:04.700000+00:00 2 \n",
+ "226 0 days 00:04:44 2025-01-25 00:53:12.100000+00:00 2 \n",
+ "233 0 days 00:04:38 2025-01-25 00:54:18.100000+00:00 2 \n",
+ "234 0 days 00:04:23 2025-01-25 00:54:49.600000+00:00 2 \n",
+ "255 0 days 00:01:54 2025-01-25 00:58:41.600000+00:00 2 \n",
+ "263 0 days 00:00:58.100000 2025-01-25 01:01:12.500000+00:00 2 \n",
+ "289 0 days 00:10:35 2025-01-25 01:20:42.700000+00:00 3 \n",
+ "295 0 days 00:10:20 2025-01-25 01:22:05.200000+00:00 3 \n",
+ "306 0 days 00:09:02 2025-01-25 01:26:46.700000+00:00 3 \n",
+ "319 0 days 00:08:11 2025-01-25 01:28:34.600000+00:00 3 \n",
+ "320 0 days 00:08:06 2025-01-25 01:28:51.400000+00:00 3 \n",
+ "342 0 days 00:06:09 2025-01-25 01:32:10.400000+00:00 3 \n",
+ "362 0 days 00:04:51 2025-01-25 01:35:04.600000+00:00 3 \n",
+ "373 0 days 00:04:34 2025-01-25 01:35:42.400000+00:00 3 \n",
+ "380 0 days 00:03:57 2025-01-25 01:37:28.700000+00:00 3 \n",
+ "383 0 days 00:03:39 2025-01-25 01:38:27.700000+00:00 3 \n",
+ "388 0 days 00:03:37 2025-01-25 01:39:12.600000+00:00 3 \n",
+ "394 0 days 00:03:22 2025-01-25 01:40:39.400000+00:00 3 \n",
+ "398 0 days 00:03:12 2025-01-25 01:41:28.800000+00:00 3 \n",
+ "400 0 days 00:03:01 2025-01-25 01:41:54.900000+00:00 3 \n",
+ "405 0 days 00:02:49 2025-01-25 01:42:41.700000+00:00 3 \n",
+ "418 0 days 00:01:26 2025-01-25 01:47:49.700000+00:00 3 \n",
+ "428 0 days 00:00:27.300000 2025-01-25 01:49:38.600000+00:00 3 \n",
+ "470 0 days 00:09:07 2025-01-25 01:57:13.200000+00:00 4 \n",
+ "477 0 days 00:08:59 2025-01-25 01:58:11+00:00 4 \n",
+ "480 0 days 00:08:49 2025-01-25 01:58:50.600000+00:00 4 \n",
+ "484 0 days 00:08:29 2025-01-25 01:59:41.400000+00:00 4 \n",
+ "491 0 days 00:08:07 2025-01-25 02:00:26.700000+00:00 4 \n",
+ "502 0 days 00:07:13 2025-01-25 02:02:19.800000+00:00 4 \n",
+ "519 0 days 00:05:28 2025-01-25 02:07:36.400000+00:00 4 \n",
+ "535 0 days 00:04:04 2025-01-25 02:13:06.700000+00:00 4 \n",
+ "542 0 days 00:03:08 2025-01-25 02:16:32.800000+00:00 4 \n",
+ "546 0 days 00:02:41 2025-01-25 02:18:40.400000+00:00 4 \n",
+ "558 0 days 00:01:30 2025-01-25 02:20:46.300000+00:00 4 \n",
+ "562 0 days 00:01:29 2025-01-25 02:21:28.200000+00:00 4 \n",
+ "573 0 days 00:00:30.500000 2025-01-25 02:23:37.700000+00:00 4 \n",
+ "586 0 days 00:00:28.100000 2025-01-25 02:26:37.800000+00:00 4 \n",
+ "594 0 days 00:00:17.600000 2025-01-25 02:27:42.900000+00:00 4 \n",
+ "\n",
+ " actionType subType personId possession scoreHome scoreAway \\\n",
+ "38 foul personal 1641733 1610612757 10 12 \n",
+ "50 foul personal 1631133 1610612766 10 12 \n",
+ "63 foul personal 1630166 1610612766 19 12 \n",
+ "91 foul personal 1629006 1610612757 24 17 \n",
+ "107 foul personal 1629610 1610612757 28 22 \n",
+ "110 foul personal 1630625 1610612766 28 22 \n",
+ "130 foul personal 1631209 1610612757 30 22 \n",
+ "135 foul offensive 1630166 1610612757 30 24 \n",
+ "158 foul personal 203995 1610612757 37 24 \n",
+ "177 foul personal 1630182 1610612757 37 31 \n",
+ "184 foul personal 1629014 1610612766 41 33 \n",
+ "202 foul personal 1631109 1610612757 42 33 \n",
+ "220 foul personal 1631109 1610612757 42 36 \n",
+ "226 foul personal 1631109 1610612757 42 37 \n",
+ "233 foul personal 1630703 1610612766 42 39 \n",
+ "234 foul personal 1631101 1610612766 42 39 \n",
+ "255 foul personal 1642354 1610612757 48 46 \n",
+ "263 foul personal 1630703 1610612766 50 50 \n",
+ "289 foul personal 203995 1610612757 54 54 \n",
+ "295 foul personal 203995 1610612757 54 58 \n",
+ "306 foul personal 1641739 1610612766 54 61 \n",
+ "319 foul personal 1629006 1610612757 57 61 \n",
+ "320 foul personal 1641733 1610612757 57 61 \n",
+ "342 foul personal 203924 1610612766 61 63 \n",
+ "362 foul personal 1631101 1610612766 65 65 \n",
+ "373 foul personal 1630625 1610612766 65 65 \n",
+ "380 foul personal 1631133 1610612766 67 65 \n",
+ "383 foul personal 1629610 1610612757 69 65 \n",
+ "388 foul personal 1641739 1610612766 69 65 \n",
+ "394 foul personal 1631217 1610612757 70 65 \n",
+ "398 foul offensive 1631209 1610612766 70 66 \n",
+ "400 foul personal 1642354 1610612757 70 66 \n",
+ "405 foul personal 1631101 1610612766 70 66 \n",
+ "418 foul personal 1631209 1610612757 75 68 \n",
+ "428 foul personal 1629006 1610612757 75 72 \n",
+ "470 foul personal 1642270 1610612766 77 77 \n",
+ "477 foul personal 1641733 1610612757 78 79 \n",
+ "480 foul personal 1631101 1610612766 80 80 \n",
+ "484 foul personal 1631109 1610612757 81 80 \n",
+ "491 foul personal 1642354 1610612757 81 80 \n",
+ "502 foul technical 1631109 1610612757 81 84 \n",
+ "519 foul personal 1630182 1610612757 83 88 \n",
+ "535 foul personal 203995 1610612757 83 90 \n",
+ "542 foul personal 1641739 1610612766 86 92 \n",
+ "546 foul personal 1631109 1610612757 86 92 \n",
+ "558 foul personal 1631101 1610612766 86 94 \n",
+ "562 foul personal 1631101 1610612766 87 94 \n",
+ "573 foul personal 1641739 1610612766 89 96 \n",
+ "586 foul personal 1629006 1610612757 91 96 \n",
+ "594 foul personal 1629006 1610612757 93 98 \n",
+ "\n",
+ " teamId descriptor officialId foulDrawnPersonId \n",
+ "38 1610612766 1626301 203924 \n",
+ "50 1610612757 1628487 1631109 \n",
+ "63 1610612757 1628487 203995 \n",
+ "91 1610612766 204059 1630703 \n",
+ "107 1610612766 1628487 1630703 \n",
+ "110 1610612757 shooting 204059 1631209 \n",
+ "130 1610612766 shooting 1628487 1629014 \n",
+ "135 1610612757 charge 204059 1631209 \n",
+ "158 1610612766 shooting 204059 1630166 \n",
+ "177 1610612766 shooting 204059 1630166 \n",
+ "184 1610612757 shooting 204059 1641733 \n",
+ "202 1610612766 loose ball 1626301 1631133 \n",
+ "220 1610612766 shooting 1626301 1631133 \n",
+ "226 1610612766 loose ball 1626301 203924 \n",
+ "233 1610612757 204059 1641733 \n",
+ "234 1610612757 shooting 204059 1641733 \n",
+ "255 1610612766 shooting 1628487 1630166 \n",
+ "263 1610612757 shooting 1626301 1629006 \n",
+ "289 1610612766 shooting 1626301 1630166 \n",
+ "295 1610612766 shooting 1628487 1641739 \n",
+ "306 1610612757 shooting 1626301 1629006 \n",
+ "319 1610612766 1628487 1629014 \n",
+ "320 1610612766 204059 1630166 \n",
+ "342 1610612757 shooting 204059 203995 \n",
+ "362 1610612757 1628487 1641733 \n",
+ "373 1610612757 shooting 1626301 1630182 \n",
+ "380 1610612757 shooting 1626301 1642354 \n",
+ "383 1610612766 shooting 1628487 1631133 \n",
+ "388 1610612757 1626301 1629006 \n",
+ "394 1610612766 shooting 1628487 1630166 \n",
+ "398 1610612766 1626301 1630703 \n",
+ "400 1610612766 1626301 1630703 \n",
+ "405 1610612757 shooting 204059 1629006 \n",
+ "418 1610612766 204059 1630625 \n",
+ "428 1610612766 shooting 1626301 1631101 \n",
+ "470 1610612757 shooting 1628487 1631109 \n",
+ "477 1610612766 shooting 1628487 1631101 \n",
+ "480 1610612757 shooting 1628487 203995 \n",
+ "484 1610612766 loose ball 1626301 1641739 \n",
+ "491 1610612766 shooting 204059 1629014 \n",
+ "502 1610612766 defensive-3-second 204059 \n",
+ "519 1610612766 shooting 1626301 1629014 \n",
+ "535 1610612766 204059 1630166 \n",
+ "542 1610612757 1626301 1642354 \n",
+ "546 1610612766 shooting 1626301 1629014 \n",
+ "558 1610612757 shooting 204059 1629006 \n",
+ "562 1610612757 shooting 1628487 1629006 \n",
+ "573 1610612757 shooting 204059 1631109 \n",
+ "586 1610612766 take 1626301 203924 \n",
+ "594 1610612766 take 1626301 1630166 "
+ ]
+ },
+ "execution_count": 15,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "foul_df = df_by_action.get_group('foul').dropna(how='all', axis=1)\n",
+ "foul_df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "id": "e84242f4-3da9-497f-8b46-e5a090e203eb",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " clock | \n",
+ " timeActual | \n",
+ " period | \n",
+ " actionType | \n",
+ " subType | \n",
+ " personId | \n",
+ " possession | \n",
+ " scoreHome | \n",
+ " scoreAway | \n",
+ " teamId | \n",
+ " officialId | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 142 | \n",
+ " 0 days 00:10:40 | \n",
+ " 2025-01-25 00:36:37.600000+00:00 | \n",
+ " 2 | \n",
+ " violation | \n",
+ " kicked ball | \n",
+ " 1630166 | \n",
+ " 1610612766 | \n",
+ " 32 | \n",
+ " 24 | \n",
+ " 1610612757 | \n",
+ " 1626301 | \n",
+ "
\n",
+ " \n",
+ " | 271 | \n",
+ " 0 days 00:00:19.300000 | \n",
+ " 2025-01-25 01:02:56.600000+00:00 | \n",
+ " 2 | \n",
+ " violation | \n",
+ " defensive goaltending | \n",
+ " 1641739 | \n",
+ " 1610612766 | \n",
+ " 54 | \n",
+ " 50 | \n",
+ " 1610612757 | \n",
+ " 1626301 | \n",
+ "
\n",
+ " \n",
+ " | 348 | \n",
+ " 0 days 00:06:09 | \n",
+ " 2025-01-25 01:33:30.900000+00:00 | \n",
+ " 3 | \n",
+ " violation | \n",
+ " lane | \n",
+ " 1631133 | \n",
+ " 1610612766 | \n",
+ " 62 | \n",
+ " 63 | \n",
+ " 1610612757 | \n",
+ " <NA> | \n",
+ "
\n",
+ " \n",
+ " | 579 | \n",
+ " 0 days 00:00:30.500000 | \n",
+ " 2025-01-25 02:24:29.400000+00:00 | \n",
+ " 4 | \n",
+ " violation | \n",
+ " delay-of-game | \n",
+ " <NA> | \n",
+ " 1610612766 | \n",
+ " 90 | \n",
+ " 96 | \n",
+ " 1610612757 | \n",
+ " 204059 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " clock timeActual period \\\n",
+ "142 0 days 00:10:40 2025-01-25 00:36:37.600000+00:00 2 \n",
+ "271 0 days 00:00:19.300000 2025-01-25 01:02:56.600000+00:00 2 \n",
+ "348 0 days 00:06:09 2025-01-25 01:33:30.900000+00:00 3 \n",
+ "579 0 days 00:00:30.500000 2025-01-25 02:24:29.400000+00:00 4 \n",
+ "\n",
+ " actionType subType personId possession scoreHome \\\n",
+ "142 violation kicked ball 1630166 1610612766 32 \n",
+ "271 violation defensive goaltending 1641739 1610612766 54 \n",
+ "348 violation lane 1631133 1610612766 62 \n",
+ "579 violation delay-of-game 1610612766 90 \n",
+ "\n",
+ " scoreAway teamId officialId \n",
+ "142 24 1610612757 1626301 \n",
+ "271 50 1610612757 1626301 \n",
+ "348 63 1610612757 \n",
+ "579 96 1610612757 204059 "
+ ]
+ },
+ "execution_count": 16,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "violation_df = df_by_action.get_group('violation').dropna(how='all', axis=1)\n",
+ "violation_df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "id": "e9cb3b81-4f47-4a56-a931-a84c08440bc4",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " clock | \n",
+ " timeActual | \n",
+ " period | \n",
+ " actionType | \n",
+ " subType | \n",
+ " personId | \n",
+ " possession | \n",
+ " scoreHome | \n",
+ " scoreAway | \n",
+ " teamId | \n",
+ " descriptor | \n",
+ " officialId | \n",
+ " stealPersonId | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 81 | \n",
+ " 0 days 00:03:37 | \n",
+ " 2025-01-25 00:26:11+00:00 | \n",
+ " 1 | \n",
+ " turnover | \n",
+ " out-of-bounds | \n",
+ " 1629006 | \n",
+ " 1610612766 | \n",
+ " 24 | \n",
+ " 17 | \n",
+ " 1610612766 | \n",
+ " bad pass | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ "
\n",
+ " \n",
+ " | 84 | \n",
+ " 0 days 00:03:20 | \n",
+ " 2025-01-25 00:26:42.600000+00:00 | \n",
+ " 1 | \n",
+ " turnover | \n",
+ " traveling | \n",
+ " 1630625 | \n",
+ " 1610612757 | \n",
+ " 24 | \n",
+ " 17 | \n",
+ " 1610612757 | \n",
+ " <NA> | \n",
+ " 204059 | \n",
+ " <NA> | \n",
+ "
\n",
+ " \n",
+ " | 89 | \n",
+ " 0 days 00:02:47 | \n",
+ " 2025-01-25 00:27:25.900000+00:00 | \n",
+ " 1 | \n",
+ " turnover | \n",
+ " lost ball | \n",
+ " 1631217 | \n",
+ " 1610612766 | \n",
+ " 24 | \n",
+ " 17 | \n",
+ " 1610612766 | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " 1631133 | \n",
+ "
\n",
+ " \n",
+ " | 113 | \n",
+ " 0 days 00:00:33.900000 | \n",
+ " 2025-01-25 00:31:02.400000+00:00 | \n",
+ " 1 | \n",
+ " turnover | \n",
+ " bad pass | \n",
+ " 1631133 | \n",
+ " 1610612757 | \n",
+ " 30 | \n",
+ " 22 | \n",
+ " 1610612757 | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " 1631217 | \n",
+ "
\n",
+ " \n",
+ " | 136 | \n",
+ " 0 days 00:11:27 | \n",
+ " 2025-01-25 00:35:42.900000+00:00 | \n",
+ " 2 | \n",
+ " turnover | \n",
+ " offensive foul | \n",
+ " 1630166 | \n",
+ " 1610612757 | \n",
+ " 30 | \n",
+ " 24 | \n",
+ " 1610612757 | \n",
+ " <NA> | \n",
+ " 204059 | \n",
+ " <NA> | \n",
+ "
\n",
+ " \n",
+ " | 143 | \n",
+ " 0 days 00:10:27 | \n",
+ " 2025-01-25 00:37:07.700000+00:00 | \n",
+ " 2 | \n",
+ " turnover | \n",
+ " bad pass | \n",
+ " 203995 | \n",
+ " 1610612766 | \n",
+ " 32 | \n",
+ " 24 | \n",
+ " 1610612766 | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " 1630166 | \n",
+ "
\n",
+ " \n",
+ " | 145 | \n",
+ " 0 days 00:10:12 | \n",
+ " 2025-01-25 00:37:22+00:00 | \n",
+ " 2 | \n",
+ " turnover | \n",
+ " lost ball | \n",
+ " 1629014 | \n",
+ " 1610612757 | \n",
+ " 32 | \n",
+ " 24 | \n",
+ " 1610612757 | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " 1629006 | \n",
+ "
\n",
+ " \n",
+ " | 162 | \n",
+ " 0 days 00:08:54 | \n",
+ " 2025-01-25 00:42:26.900000+00:00 | \n",
+ " 2 | \n",
+ " turnover | \n",
+ " traveling | \n",
+ " 203995 | \n",
+ " 1610612766 | \n",
+ " 37 | \n",
+ " 25 | \n",
+ " 1610612766 | \n",
+ " <NA> | \n",
+ " 204059 | \n",
+ " <NA> | \n",
+ "
\n",
+ " \n",
+ " | 166 | \n",
+ " 0 days 00:08:17 | \n",
+ " 2025-01-25 00:43:14.500000+00:00 | \n",
+ " 2 | \n",
+ " turnover | \n",
+ " bad pass | \n",
+ " 1629610 | \n",
+ " 1610612766 | \n",
+ " 37 | \n",
+ " 28 | \n",
+ " 1610612766 | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " 1629014 | \n",
+ "
\n",
+ " \n",
+ " | 181 | \n",
+ " 0 days 00:07:06 | \n",
+ " 2025-01-25 00:45:35.900000+00:00 | \n",
+ " 2 | \n",
+ " turnover | \n",
+ " bad pass | \n",
+ " 1630166 | \n",
+ " 1610612757 | \n",
+ " 39 | \n",
+ " 33 | \n",
+ " 1610612757 | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " 1631109 | \n",
+ "
\n",
+ " \n",
+ " | 192 | \n",
+ " 0 days 00:06:49 | \n",
+ " 2025-01-25 00:46:42.500000+00:00 | \n",
+ " 2 | \n",
+ " turnover | \n",
+ " lost ball | \n",
+ " 203924 | \n",
+ " 1610612757 | \n",
+ " 42 | \n",
+ " 33 | \n",
+ " 1610612757 | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " 1631217 | \n",
+ "
\n",
+ " \n",
+ " | 216 | \n",
+ " 0 days 00:05:07 | \n",
+ " 2025-01-25 00:51:52.200000+00:00 | \n",
+ " 2 | \n",
+ " turnover | \n",
+ " bad pass | \n",
+ " 1642354 | \n",
+ " 1610612766 | \n",
+ " 42 | \n",
+ " 36 | \n",
+ " 1610612766 | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " 1630703 | \n",
+ "
\n",
+ " \n",
+ " | 242 | \n",
+ " 0 days 00:03:37 | \n",
+ " 2025-01-25 00:56:28+00:00 | \n",
+ " 2 | \n",
+ " turnover | \n",
+ " out-of-bounds | \n",
+ " 1631101 | \n",
+ " 1610612757 | \n",
+ " 44 | \n",
+ " 41 | \n",
+ " 1610612757 | \n",
+ " bad pass | \n",
+ " 204059 | \n",
+ " <NA> | \n",
+ "
\n",
+ " \n",
+ " | 253 | \n",
+ " 0 days 00:01:59 | \n",
+ " 2025-01-25 00:58:33+00:00 | \n",
+ " 2 | \n",
+ " turnover | \n",
+ " bad pass | \n",
+ " 1629006 | \n",
+ " 1610612766 | \n",
+ " 48 | \n",
+ " 46 | \n",
+ " 1610612766 | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " 1630166 | \n",
+ "
\n",
+ " \n",
+ " | 269 | \n",
+ " 0 days 00:00:34.100000 | \n",
+ " 2025-01-25 01:02:28.900000+00:00 | \n",
+ " 2 | \n",
+ " turnover | \n",
+ " shot clock | \n",
+ " <NA> | \n",
+ " 1610612757 | \n",
+ " 52 | \n",
+ " 50 | \n",
+ " 1610612757 | \n",
+ " <NA> | \n",
+ " 204059 | \n",
+ " <NA> | \n",
+ "
\n",
+ " \n",
+ " | 285 | \n",
+ " 0 days 00:11:09 | \n",
+ " 2025-01-25 01:19:51.900000+00:00 | \n",
+ " 3 | \n",
+ " turnover | \n",
+ " out-of-bounds | \n",
+ " 203995 | \n",
+ " 1610612766 | \n",
+ " 54 | \n",
+ " 52 | \n",
+ " 1610612766 | \n",
+ " lost ball | \n",
+ " 1628487 | \n",
+ " <NA> | \n",
+ "
\n",
+ " \n",
+ " | 287 | \n",
+ " 0 days 00:10:37 | \n",
+ " 2025-01-25 01:20:38.500000+00:00 | \n",
+ " 3 | \n",
+ " turnover | \n",
+ " bad pass | \n",
+ " 1641733 | \n",
+ " 1610612766 | \n",
+ " 54 | \n",
+ " 54 | \n",
+ " 1610612766 | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " 1641739 | \n",
+ "
\n",
+ " \n",
+ " | 299 | \n",
+ " 0 days 00:10:03 | \n",
+ " 2025-01-25 01:25:28.300000+00:00 | \n",
+ " 3 | \n",
+ " turnover | \n",
+ " bad pass | \n",
+ " 1641733 | \n",
+ " 1610612766 | \n",
+ " 54 | \n",
+ " 58 | \n",
+ " 1610612766 | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " 1641739 | \n",
+ "
\n",
+ " \n",
+ " | 304 | \n",
+ " 0 days 00:09:04 | \n",
+ " 2025-01-25 01:26:43+00:00 | \n",
+ " 3 | \n",
+ " turnover | \n",
+ " lost ball | \n",
+ " 1630166 | \n",
+ " 1610612757 | \n",
+ " 54 | \n",
+ " 61 | \n",
+ " 1610612757 | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " 1629006 | \n",
+ "
\n",
+ " \n",
+ " | 311 | \n",
+ " 0 days 00:08:28 | \n",
+ " 2025-01-25 01:28:06+00:00 | \n",
+ " 3 | \n",
+ " turnover | \n",
+ " bad pass | \n",
+ " 1642270 | \n",
+ " 1610612757 | \n",
+ " 57 | \n",
+ " 61 | \n",
+ " 1610612757 | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " 1629006 | \n",
+ "
\n",
+ " \n",
+ " | 317 | \n",
+ " 0 days 00:08:11 | \n",
+ " 2025-01-25 01:28:24.300000+00:00 | \n",
+ " 3 | \n",
+ " turnover | \n",
+ " bad pass | \n",
+ " 1641733 | \n",
+ " 1610612766 | \n",
+ " 57 | \n",
+ " 61 | \n",
+ " 1610612766 | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " 1642270 | \n",
+ "
\n",
+ " \n",
+ " | 321 | \n",
+ " 0 days 00:07:58 | \n",
+ " 2025-01-25 01:29:21+00:00 | \n",
+ " 3 | \n",
+ " turnover | \n",
+ " traveling | \n",
+ " 1642270 | \n",
+ " 1610612757 | \n",
+ " 57 | \n",
+ " 61 | \n",
+ " 1610612757 | \n",
+ " <NA> | \n",
+ " 204059 | \n",
+ " <NA> | \n",
+ "
\n",
+ " \n",
+ " | 338 | \n",
+ " 0 days 00:06:50 | \n",
+ " 2025-01-25 01:31:27.700000+00:00 | \n",
+ " 3 | \n",
+ " turnover | \n",
+ " lost ball | \n",
+ " 203924 | \n",
+ " 1610612757 | \n",
+ " 59 | \n",
+ " 61 | \n",
+ " 1610612757 | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " 1630182 | \n",
+ "
\n",
+ " \n",
+ " | 359 | \n",
+ " 0 days 00:05:11 | \n",
+ " 2025-01-25 01:34:38.600000+00:00 | \n",
+ " 3 | \n",
+ " turnover | \n",
+ " bad pass | \n",
+ " 1631217 | \n",
+ " 1610612766 | \n",
+ " 65 | \n",
+ " 63 | \n",
+ " 1610612766 | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " 203924 | \n",
+ "
\n",
+ " \n",
+ " | 371 | \n",
+ " 0 days 00:04:41 | \n",
+ " 2025-01-25 01:35:39.800000+00:00 | \n",
+ " 3 | \n",
+ " turnover | \n",
+ " lost ball | \n",
+ " 1631101 | \n",
+ " 1610612757 | \n",
+ " 65 | \n",
+ " 65 | \n",
+ " 1610612757 | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " 1642354 | \n",
+ "
\n",
+ " \n",
+ " | 399 | \n",
+ " 0 days 00:03:12 | \n",
+ " 2025-01-25 01:41:28.800000+00:00 | \n",
+ " 3 | \n",
+ " turnover | \n",
+ " offensive foul | \n",
+ " 1631209 | \n",
+ " 1610612766 | \n",
+ " 70 | \n",
+ " 66 | \n",
+ " 1610612766 | \n",
+ " <NA> | \n",
+ " 1626301 | \n",
+ " <NA> | \n",
+ "
\n",
+ " \n",
+ " | 411 | \n",
+ " 0 days 00:02:39 | \n",
+ " 2025-01-25 01:46:21.400000+00:00 | \n",
+ " 3 | \n",
+ " turnover | \n",
+ " out-of-bounds | \n",
+ " 1630703 | \n",
+ " 1610612757 | \n",
+ " 72 | \n",
+ " 66 | \n",
+ " 1610612757 | \n",
+ " bad pass | \n",
+ " 1626301 | \n",
+ " <NA> | \n",
+ "
\n",
+ " \n",
+ " | 510 | \n",
+ " 0 days 00:06:20 | \n",
+ " 2025-01-25 02:06:42+00:00 | \n",
+ " 4 | \n",
+ " turnover | \n",
+ " bad pass | \n",
+ " 203995 | \n",
+ " 1610612766 | \n",
+ " 81 | \n",
+ " 88 | \n",
+ " 1610612766 | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " 1630166 | \n",
+ "
\n",
+ " \n",
+ " | 512 | \n",
+ " 0 days 00:06:16 | \n",
+ " 2025-01-25 02:06:45.200000+00:00 | \n",
+ " 4 | \n",
+ " turnover | \n",
+ " bad pass | \n",
+ " 1630166 | \n",
+ " 1610612757 | \n",
+ " 81 | \n",
+ " 88 | \n",
+ " 1610612757 | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " 1642354 | \n",
+ "
\n",
+ " \n",
+ " | 524 | \n",
+ " 0 days 00:05:12 | \n",
+ " 2025-01-25 02:08:43.300000+00:00 | \n",
+ " 4 | \n",
+ " turnover | \n",
+ " bad pass | \n",
+ " 203995 | \n",
+ " 1610612766 | \n",
+ " 83 | \n",
+ " 90 | \n",
+ " 1610612766 | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " 1629014 | \n",
+ "
\n",
+ " \n",
+ " | 551 | \n",
+ " 0 days 00:02:24 | \n",
+ " 2025-01-25 02:19:43.600000+00:00 | \n",
+ " 4 | \n",
+ " turnover | \n",
+ " bad pass | \n",
+ " 203995 | \n",
+ " 1610612766 | \n",
+ " 86 | \n",
+ " 94 | \n",
+ " 1610612766 | \n",
+ " <NA> | \n",
+ " <NA> | \n",
+ " 1630166 | \n",
+ "
\n",
+ " \n",
+ " | 553 | \n",
+ " 0 days 00:02:18 | \n",
+ " 2025-01-25 02:19:52.400000+00:00 | \n",
+ " 4 | \n",
+ " turnover | \n",
+ " out-of-bounds | \n",
+ " 1630166 | \n",
+ " 1610612757 | \n",
+ " 86 | \n",
+ " 94 | \n",
+ " 1610612757 | \n",
+ " bad pass | \n",
+ " 1626301 | \n",
+ " <NA> | \n",
+ "
\n",
+ " \n",
+ " | 572 | \n",
+ " 0 days 00:00:37 | \n",
+ " 2025-01-25 02:23:15.900000+00:00 | \n",
+ " 4 | \n",
+ " turnover | \n",
+ " out-of-bounds | \n",
+ " 1630703 | \n",
+ " 1610612757 | \n",
+ " 89 | \n",
+ " 96 | \n",
+ " 1610612757 | \n",
+ " bad pass | \n",
+ " 204059 | \n",
+ " <NA> | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " clock timeActual period \\\n",
+ "81 0 days 00:03:37 2025-01-25 00:26:11+00:00 1 \n",
+ "84 0 days 00:03:20 2025-01-25 00:26:42.600000+00:00 1 \n",
+ "89 0 days 00:02:47 2025-01-25 00:27:25.900000+00:00 1 \n",
+ "113 0 days 00:00:33.900000 2025-01-25 00:31:02.400000+00:00 1 \n",
+ "136 0 days 00:11:27 2025-01-25 00:35:42.900000+00:00 2 \n",
+ "143 0 days 00:10:27 2025-01-25 00:37:07.700000+00:00 2 \n",
+ "145 0 days 00:10:12 2025-01-25 00:37:22+00:00 2 \n",
+ "162 0 days 00:08:54 2025-01-25 00:42:26.900000+00:00 2 \n",
+ "166 0 days 00:08:17 2025-01-25 00:43:14.500000+00:00 2 \n",
+ "181 0 days 00:07:06 2025-01-25 00:45:35.900000+00:00 2 \n",
+ "192 0 days 00:06:49 2025-01-25 00:46:42.500000+00:00 2 \n",
+ "216 0 days 00:05:07 2025-01-25 00:51:52.200000+00:00 2 \n",
+ "242 0 days 00:03:37 2025-01-25 00:56:28+00:00 2 \n",
+ "253 0 days 00:01:59 2025-01-25 00:58:33+00:00 2 \n",
+ "269 0 days 00:00:34.100000 2025-01-25 01:02:28.900000+00:00 2 \n",
+ "285 0 days 00:11:09 2025-01-25 01:19:51.900000+00:00 3 \n",
+ "287 0 days 00:10:37 2025-01-25 01:20:38.500000+00:00 3 \n",
+ "299 0 days 00:10:03 2025-01-25 01:25:28.300000+00:00 3 \n",
+ "304 0 days 00:09:04 2025-01-25 01:26:43+00:00 3 \n",
+ "311 0 days 00:08:28 2025-01-25 01:28:06+00:00 3 \n",
+ "317 0 days 00:08:11 2025-01-25 01:28:24.300000+00:00 3 \n",
+ "321 0 days 00:07:58 2025-01-25 01:29:21+00:00 3 \n",
+ "338 0 days 00:06:50 2025-01-25 01:31:27.700000+00:00 3 \n",
+ "359 0 days 00:05:11 2025-01-25 01:34:38.600000+00:00 3 \n",
+ "371 0 days 00:04:41 2025-01-25 01:35:39.800000+00:00 3 \n",
+ "399 0 days 00:03:12 2025-01-25 01:41:28.800000+00:00 3 \n",
+ "411 0 days 00:02:39 2025-01-25 01:46:21.400000+00:00 3 \n",
+ "510 0 days 00:06:20 2025-01-25 02:06:42+00:00 4 \n",
+ "512 0 days 00:06:16 2025-01-25 02:06:45.200000+00:00 4 \n",
+ "524 0 days 00:05:12 2025-01-25 02:08:43.300000+00:00 4 \n",
+ "551 0 days 00:02:24 2025-01-25 02:19:43.600000+00:00 4 \n",
+ "553 0 days 00:02:18 2025-01-25 02:19:52.400000+00:00 4 \n",
+ "572 0 days 00:00:37 2025-01-25 02:23:15.900000+00:00 4 \n",
+ "\n",
+ " actionType subType personId possession scoreHome scoreAway \\\n",
+ "81 turnover out-of-bounds 1629006 1610612766 24 17 \n",
+ "84 turnover traveling 1630625 1610612757 24 17 \n",
+ "89 turnover lost ball 1631217 1610612766 24 17 \n",
+ "113 turnover bad pass 1631133 1610612757 30 22 \n",
+ "136 turnover offensive foul 1630166 1610612757 30 24 \n",
+ "143 turnover bad pass 203995 1610612766 32 24 \n",
+ "145 turnover lost ball 1629014 1610612757 32 24 \n",
+ "162 turnover traveling 203995 1610612766 37 25 \n",
+ "166 turnover bad pass 1629610 1610612766 37 28 \n",
+ "181 turnover bad pass 1630166 1610612757 39 33 \n",
+ "192 turnover lost ball 203924 1610612757 42 33 \n",
+ "216 turnover bad pass 1642354 1610612766 42 36 \n",
+ "242 turnover out-of-bounds 1631101 1610612757 44 41 \n",
+ "253 turnover bad pass 1629006 1610612766 48 46 \n",
+ "269 turnover shot clock 1610612757 52 50 \n",
+ "285 turnover out-of-bounds 203995 1610612766 54 52 \n",
+ "287 turnover bad pass 1641733 1610612766 54 54 \n",
+ "299 turnover bad pass 1641733 1610612766 54 58 \n",
+ "304 turnover lost ball 1630166 1610612757 54 61 \n",
+ "311 turnover bad pass 1642270 1610612757 57 61 \n",
+ "317 turnover bad pass 1641733 1610612766 57 61 \n",
+ "321 turnover traveling 1642270 1610612757 57 61 \n",
+ "338 turnover lost ball 203924 1610612757 59 61 \n",
+ "359 turnover bad pass 1631217 1610612766 65 63 \n",
+ "371 turnover lost ball 1631101 1610612757 65 65 \n",
+ "399 turnover offensive foul 1631209 1610612766 70 66 \n",
+ "411 turnover out-of-bounds 1630703 1610612757 72 66 \n",
+ "510 turnover bad pass 203995 1610612766 81 88 \n",
+ "512 turnover bad pass 1630166 1610612757 81 88 \n",
+ "524 turnover bad pass 203995 1610612766 83 90 \n",
+ "551 turnover bad pass 203995 1610612766 86 94 \n",
+ "553 turnover out-of-bounds 1630166 1610612757 86 94 \n",
+ "572 turnover out-of-bounds 1630703 1610612757 89 96 \n",
+ "\n",
+ " teamId descriptor officialId stealPersonId \n",
+ "81 1610612766 bad pass \n",
+ "84 1610612757 204059 \n",
+ "89 1610612766 1631133 \n",
+ "113 1610612757 1631217 \n",
+ "136 1610612757 204059 \n",
+ "143 1610612766 1630166 \n",
+ "145 1610612757 1629006 \n",
+ "162 1610612766 204059 \n",
+ "166 1610612766 1629014 \n",
+ "181 1610612757 1631109 \n",
+ "192 1610612757 1631217 \n",
+ "216 1610612766 1630703 \n",
+ "242 1610612757 bad pass 204059 \n",
+ "253 1610612766 1630166 \n",
+ "269 1610612757 204059 \n",
+ "285 1610612766 lost ball 1628487 \n",
+ "287 1610612766 1641739 \n",
+ "299 1610612766 1641739 \n",
+ "304 1610612757 1629006 \n",
+ "311 1610612757 1629006 \n",
+ "317 1610612766 1642270 \n",
+ "321 1610612757 204059 \n",
+ "338 1610612757 1630182 \n",
+ "359 1610612766 203924 \n",
+ "371 1610612757 1642354 \n",
+ "399 1610612766 1626301 \n",
+ "411 1610612757 bad pass 1626301 \n",
+ "510 1610612766 1630166 \n",
+ "512 1610612757 1642354 \n",
+ "524 1610612766 1629014 \n",
+ "551 1610612766 1630166 \n",
+ "553 1610612757 bad pass 1626301 \n",
+ "572 1610612757 bad pass 204059 "
+ ]
+ },
+ "execution_count": 17,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "turnover_df = df_by_action.get_group('turnover').dropna(how='all', axis=1)\n",
+ "turnover_df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "id": "7267e459-519c-4145-be0f-f3a79848be07",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " clock | \n",
+ " timeActual | \n",
+ " period | \n",
+ " actionType | \n",
+ " subType | \n",
+ " personId | \n",
+ " possession | \n",
+ " scoreHome | \n",
+ " scoreAway | \n",
+ " teamId | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 90 | \n",
+ " 0 days 00:02:47 | \n",
+ " 2025-01-25 00:27:25.900000+00:00 | \n",
+ " 1 | \n",
+ " steal | \n",
+ " | \n",
+ " 1631133 | \n",
+ " 1610612757 | \n",
+ " 24 | \n",
+ " 17 | \n",
+ " 1610612757 | \n",
+ "
\n",
+ " \n",
+ " | 114 | \n",
+ " 0 days 00:00:33.900000 | \n",
+ " 2025-01-25 00:31:02.400000+00:00 | \n",
+ " 1 | \n",
+ " steal | \n",
+ " | \n",
+ " 1631217 | \n",
+ " 1610612766 | \n",
+ " 30 | \n",
+ " 22 | \n",
+ " 1610612766 | \n",
+ "
\n",
+ " \n",
+ " | 144 | \n",
+ " 0 days 00:10:27 | \n",
+ " 2025-01-25 00:37:07.700000+00:00 | \n",
+ " 2 | \n",
+ " steal | \n",
+ " | \n",
+ " 1630166 | \n",
+ " 1610612757 | \n",
+ " 32 | \n",
+ " 24 | \n",
+ " 1610612757 | \n",
+ "
\n",
+ " \n",
+ " | 146 | \n",
+ " 0 days 00:10:12 | \n",
+ " 2025-01-25 00:37:22+00:00 | \n",
+ " 2 | \n",
+ " steal | \n",
+ " | \n",
+ " 1629006 | \n",
+ " 1610612766 | \n",
+ " 32 | \n",
+ " 24 | \n",
+ " 1610612766 | \n",
+ "
\n",
+ " \n",
+ " | 167 | \n",
+ " 0 days 00:08:17 | \n",
+ " 2025-01-25 00:43:14.500000+00:00 | \n",
+ " 2 | \n",
+ " steal | \n",
+ " | \n",
+ " 1629014 | \n",
+ " 1610612757 | \n",
+ " 37 | \n",
+ " 28 | \n",
+ " 1610612757 | \n",
+ "
\n",
+ " \n",
+ " | 182 | \n",
+ " 0 days 00:07:06 | \n",
+ " 2025-01-25 00:45:35.900000+00:00 | \n",
+ " 2 | \n",
+ " steal | \n",
+ " | \n",
+ " 1631109 | \n",
+ " 1610612766 | \n",
+ " 39 | \n",
+ " 33 | \n",
+ " 1610612766 | \n",
+ "
\n",
+ " \n",
+ " | 193 | \n",
+ " 0 days 00:06:49 | \n",
+ " 2025-01-25 00:46:42.500000+00:00 | \n",
+ " 2 | \n",
+ " steal | \n",
+ " | \n",
+ " 1631217 | \n",
+ " 1610612766 | \n",
+ " 42 | \n",
+ " 33 | \n",
+ " 1610612766 | \n",
+ "
\n",
+ " \n",
+ " | 217 | \n",
+ " 0 days 00:05:07 | \n",
+ " 2025-01-25 00:51:52.200000+00:00 | \n",
+ " 2 | \n",
+ " steal | \n",
+ " | \n",
+ " 1630703 | \n",
+ " 1610612757 | \n",
+ " 42 | \n",
+ " 36 | \n",
+ " 1610612757 | \n",
+ "
\n",
+ " \n",
+ " | 254 | \n",
+ " 0 days 00:01:59 | \n",
+ " 2025-01-25 00:58:33+00:00 | \n",
+ " 2 | \n",
+ " steal | \n",
+ " | \n",
+ " 1630166 | \n",
+ " 1610612757 | \n",
+ " 48 | \n",
+ " 46 | \n",
+ " 1610612757 | \n",
+ "
\n",
+ " \n",
+ " | 288 | \n",
+ " 0 days 00:10:37 | \n",
+ " 2025-01-25 01:20:38.500000+00:00 | \n",
+ " 3 | \n",
+ " steal | \n",
+ " | \n",
+ " 1641739 | \n",
+ " 1610612757 | \n",
+ " 54 | \n",
+ " 54 | \n",
+ " 1610612757 | \n",
+ "
\n",
+ " \n",
+ " | 300 | \n",
+ " 0 days 00:10:03 | \n",
+ " 2025-01-25 01:25:28.300000+00:00 | \n",
+ " 3 | \n",
+ " steal | \n",
+ " | \n",
+ " 1641739 | \n",
+ " 1610612757 | \n",
+ " 54 | \n",
+ " 58 | \n",
+ " 1610612757 | \n",
+ "
\n",
+ " \n",
+ " | 305 | \n",
+ " 0 days 00:09:04 | \n",
+ " 2025-01-25 01:26:43+00:00 | \n",
+ " 3 | \n",
+ " steal | \n",
+ " | \n",
+ " 1629006 | \n",
+ " 1610612766 | \n",
+ " 54 | \n",
+ " 61 | \n",
+ " 1610612766 | \n",
+ "
\n",
+ " \n",
+ " | 312 | \n",
+ " 0 days 00:08:28 | \n",
+ " 2025-01-25 01:28:06+00:00 | \n",
+ " 3 | \n",
+ " steal | \n",
+ " | \n",
+ " 1629006 | \n",
+ " 1610612766 | \n",
+ " 57 | \n",
+ " 61 | \n",
+ " 1610612766 | \n",
+ "
\n",
+ " \n",
+ " | 318 | \n",
+ " 0 days 00:08:11 | \n",
+ " 2025-01-25 01:28:24.300000+00:00 | \n",
+ " 3 | \n",
+ " steal | \n",
+ " | \n",
+ " 1642270 | \n",
+ " 1610612757 | \n",
+ " 57 | \n",
+ " 61 | \n",
+ " 1610612757 | \n",
+ "
\n",
+ " \n",
+ " | 339 | \n",
+ " 0 days 00:06:50 | \n",
+ " 2025-01-25 01:31:27.700000+00:00 | \n",
+ " 3 | \n",
+ " steal | \n",
+ " | \n",
+ " 1630182 | \n",
+ " 1610612766 | \n",
+ " 59 | \n",
+ " 61 | \n",
+ " 1610612766 | \n",
+ "
\n",
+ " \n",
+ " | 360 | \n",
+ " 0 days 00:05:11 | \n",
+ " 2025-01-25 01:34:38.600000+00:00 | \n",
+ " 3 | \n",
+ " steal | \n",
+ " | \n",
+ " 203924 | \n",
+ " 1610612757 | \n",
+ " 65 | \n",
+ " 63 | \n",
+ " 1610612757 | \n",
+ "
\n",
+ " \n",
+ " | 372 | \n",
+ " 0 days 00:04:41 | \n",
+ " 2025-01-25 01:35:39.800000+00:00 | \n",
+ " 3 | \n",
+ " steal | \n",
+ " | \n",
+ " 1642354 | \n",
+ " 1610612766 | \n",
+ " 65 | \n",
+ " 65 | \n",
+ " 1610612766 | \n",
+ "
\n",
+ " \n",
+ " | 511 | \n",
+ " 0 days 00:06:20 | \n",
+ " 2025-01-25 02:06:42+00:00 | \n",
+ " 4 | \n",
+ " steal | \n",
+ " | \n",
+ " 1630166 | \n",
+ " 1610612757 | \n",
+ " 81 | \n",
+ " 88 | \n",
+ " 1610612757 | \n",
+ "
\n",
+ " \n",
+ " | 513 | \n",
+ " 0 days 00:06:16 | \n",
+ " 2025-01-25 02:06:45.200000+00:00 | \n",
+ " 4 | \n",
+ " steal | \n",
+ " | \n",
+ " 1642354 | \n",
+ " 1610612766 | \n",
+ " 81 | \n",
+ " 88 | \n",
+ " 1610612766 | \n",
+ "
\n",
+ " \n",
+ " | 525 | \n",
+ " 0 days 00:05:12 | \n",
+ " 2025-01-25 02:08:43.300000+00:00 | \n",
+ " 4 | \n",
+ " steal | \n",
+ " | \n",
+ " 1629014 | \n",
+ " 1610612757 | \n",
+ " 83 | \n",
+ " 90 | \n",
+ " 1610612757 | \n",
+ "
\n",
+ " \n",
+ " | 552 | \n",
+ " 0 days 00:02:24 | \n",
+ " 2025-01-25 02:19:43.600000+00:00 | \n",
+ " 4 | \n",
+ " steal | \n",
+ " | \n",
+ " 1630166 | \n",
+ " 1610612757 | \n",
+ " 86 | \n",
+ " 94 | \n",
+ " 1610612757 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " clock timeActual period \\\n",
+ "90 0 days 00:02:47 2025-01-25 00:27:25.900000+00:00 1 \n",
+ "114 0 days 00:00:33.900000 2025-01-25 00:31:02.400000+00:00 1 \n",
+ "144 0 days 00:10:27 2025-01-25 00:37:07.700000+00:00 2 \n",
+ "146 0 days 00:10:12 2025-01-25 00:37:22+00:00 2 \n",
+ "167 0 days 00:08:17 2025-01-25 00:43:14.500000+00:00 2 \n",
+ "182 0 days 00:07:06 2025-01-25 00:45:35.900000+00:00 2 \n",
+ "193 0 days 00:06:49 2025-01-25 00:46:42.500000+00:00 2 \n",
+ "217 0 days 00:05:07 2025-01-25 00:51:52.200000+00:00 2 \n",
+ "254 0 days 00:01:59 2025-01-25 00:58:33+00:00 2 \n",
+ "288 0 days 00:10:37 2025-01-25 01:20:38.500000+00:00 3 \n",
+ "300 0 days 00:10:03 2025-01-25 01:25:28.300000+00:00 3 \n",
+ "305 0 days 00:09:04 2025-01-25 01:26:43+00:00 3 \n",
+ "312 0 days 00:08:28 2025-01-25 01:28:06+00:00 3 \n",
+ "318 0 days 00:08:11 2025-01-25 01:28:24.300000+00:00 3 \n",
+ "339 0 days 00:06:50 2025-01-25 01:31:27.700000+00:00 3 \n",
+ "360 0 days 00:05:11 2025-01-25 01:34:38.600000+00:00 3 \n",
+ "372 0 days 00:04:41 2025-01-25 01:35:39.800000+00:00 3 \n",
+ "511 0 days 00:06:20 2025-01-25 02:06:42+00:00 4 \n",
+ "513 0 days 00:06:16 2025-01-25 02:06:45.200000+00:00 4 \n",
+ "525 0 days 00:05:12 2025-01-25 02:08:43.300000+00:00 4 \n",
+ "552 0 days 00:02:24 2025-01-25 02:19:43.600000+00:00 4 \n",
+ "\n",
+ " actionType subType personId possession scoreHome scoreAway teamId \n",
+ "90 steal 1631133 1610612757 24 17 1610612757 \n",
+ "114 steal 1631217 1610612766 30 22 1610612766 \n",
+ "144 steal 1630166 1610612757 32 24 1610612757 \n",
+ "146 steal 1629006 1610612766 32 24 1610612766 \n",
+ "167 steal 1629014 1610612757 37 28 1610612757 \n",
+ "182 steal 1631109 1610612766 39 33 1610612766 \n",
+ "193 steal 1631217 1610612766 42 33 1610612766 \n",
+ "217 steal 1630703 1610612757 42 36 1610612757 \n",
+ "254 steal 1630166 1610612757 48 46 1610612757 \n",
+ "288 steal 1641739 1610612757 54 54 1610612757 \n",
+ "300 steal 1641739 1610612757 54 58 1610612757 \n",
+ "305 steal 1629006 1610612766 54 61 1610612766 \n",
+ "312 steal 1629006 1610612766 57 61 1610612766 \n",
+ "318 steal 1642270 1610612757 57 61 1610612757 \n",
+ "339 steal 1630182 1610612766 59 61 1610612766 \n",
+ "360 steal 203924 1610612757 65 63 1610612757 \n",
+ "372 steal 1642354 1610612766 65 65 1610612766 \n",
+ "511 steal 1630166 1610612757 81 88 1610612757 \n",
+ "513 steal 1642354 1610612766 81 88 1610612766 \n",
+ "525 steal 1629014 1610612757 83 90 1610612757 \n",
+ "552 steal 1630166 1610612757 86 94 1610612757 "
+ ]
+ },
+ "execution_count": 18,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "steal_df = df_by_action.get_group('steal').dropna(how='all', axis=1)\n",
+ "steal_df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "d82cba52-fa90-4924-a95b-441866785da1",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "ca5f60a9-9a88-4ffe-bc55-fcc5763551fd",
+ "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.13.5"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}