{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# MIKE IO 1D Pandas DataFrame examples\n", "\n", "Results in MIKE IO 1D are fundamentally extracted as Pandas DataFrames. This notebook shows\n", "specific methods for working with those DataFrames." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from mikeio1d import Res1D\n", "\n", "res = Res1D(\"../tests/testdata/network_river.res1d\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Column modes\n", "MIKE IO 1D supports different types of column headers. Depending on your use case, one or the other may be preferable. There are four main modes:\n", "- string (default)\n", "- all\n", "- compact\n", "- timeseries\n", "\n", "These are illustrated in the following cells." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\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", " \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", " \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", "
Discharge:basin_left1:1.002Discharge:basin_left1:17.889Discharge:basin_left1:57.3595Discharge:basin_left1:101.493Discharge:basin_left1:144.075Discharge:basin_left1:175.496Discharge:basin_left1:197.549Discharge:basin_left1:228.411Discharge:basin_left1:255.612Discharge:basin_left1:274.626...Discharge:tributary:95Discharge:tributary:110Discharge:tributary:125Discharge:tributary:140Discharge:tributary:175Discharge:tributary:225Discharge:tributary:275Discharge:tributary:350Discharge:tributary:425Discharge:tributary:475
2000-02-18 00:06:000.00.00.00.00.00.00.00.00.00.0...0.0000000.00.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000
2000-02-18 00:16:00-0.0-0.0-0.0-0.0-0.0-0.0-0.0-0.0-0.0-0.0...0.013857-0.00.0505220.0536070.0904680.1075190.1440260.1774960.1910490.197755
\n", "

2 rows × 101 columns

\n", "
" ], "text/plain": [ " Discharge:basin_left1:1.002 \\\n", "2000-02-18 00:06:00 0.0 \n", "2000-02-18 00:16:00 -0.0 \n", "\n", " Discharge:basin_left1:17.889 \\\n", "2000-02-18 00:06:00 0.0 \n", "2000-02-18 00:16:00 -0.0 \n", "\n", " Discharge:basin_left1:57.3595 \\\n", "2000-02-18 00:06:00 0.0 \n", "2000-02-18 00:16:00 -0.0 \n", "\n", " Discharge:basin_left1:101.493 \\\n", "2000-02-18 00:06:00 0.0 \n", "2000-02-18 00:16:00 -0.0 \n", "\n", " Discharge:basin_left1:144.075 \\\n", "2000-02-18 00:06:00 0.0 \n", "2000-02-18 00:16:00 -0.0 \n", "\n", " Discharge:basin_left1:175.496 \\\n", "2000-02-18 00:06:00 0.0 \n", "2000-02-18 00:16:00 -0.0 \n", "\n", " Discharge:basin_left1:197.549 \\\n", "2000-02-18 00:06:00 0.0 \n", "2000-02-18 00:16:00 -0.0 \n", "\n", " Discharge:basin_left1:228.411 \\\n", "2000-02-18 00:06:00 0.0 \n", "2000-02-18 00:16:00 -0.0 \n", "\n", " Discharge:basin_left1:255.612 \\\n", "2000-02-18 00:06:00 0.0 \n", "2000-02-18 00:16:00 -0.0 \n", "\n", " Discharge:basin_left1:274.626 ... \\\n", "2000-02-18 00:06:00 0.0 ... \n", "2000-02-18 00:16:00 -0.0 ... \n", "\n", " Discharge:tributary:95 Discharge:tributary:110 \\\n", "2000-02-18 00:06:00 0.000000 0.0 \n", "2000-02-18 00:16:00 0.013857 -0.0 \n", "\n", " Discharge:tributary:125 Discharge:tributary:140 \\\n", "2000-02-18 00:06:00 0.000000 0.000000 \n", "2000-02-18 00:16:00 0.050522 0.053607 \n", "\n", " Discharge:tributary:175 Discharge:tributary:225 \\\n", "2000-02-18 00:06:00 0.000000 0.000000 \n", "2000-02-18 00:16:00 0.090468 0.107519 \n", "\n", " Discharge:tributary:275 Discharge:tributary:350 \\\n", "2000-02-18 00:06:00 0.000000 0.000000 \n", "2000-02-18 00:16:00 0.144026 0.177496 \n", "\n", " Discharge:tributary:425 Discharge:tributary:475 \n", "2000-02-18 00:06:00 0.000000 0.000000 \n", "2000-02-18 00:16:00 0.191049 0.197755 \n", "\n", "[2 rows x 101 columns]" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# The default column mode concatenates information about the column with a ':' delimiter.\n", "df = res.reaches.Discharge.read()\n", "df.head(2)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\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", " \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", " \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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
quantityDischarge
groupReach
namebasin_left1...tributary
chainage1.002017.889057.3595101.4935144.0745175.4965197.5490228.4110255.6120274.6260...95.0000110.0000125.0000140.0000175.0000225.0000275.0000350.0000425.0000475.0000
tag0.0-246.60.0-246.60.0-246.60.0-246.60.0-246.60.0-246.60.0-246.60.0-246.6246.6-413.6246.6-413.6...50.0-500.050.0-500.050.0-500.050.0-500.050.0-500.050.0-500.050.0-500.050.0-500.050.0-500.050.0-500.0
2000-02-18 00:06:000.00.00.00.00.00.00.00.00.00.0...0.0000000.00.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000
2000-02-18 00:16:00-0.0-0.0-0.0-0.0-0.0-0.0-0.0-0.0-0.0-0.0...0.013857-0.00.0505220.0536070.0904680.1075190.1440260.1774960.1910490.197755
\n", "

2 rows × 101 columns

\n", "
" ], "text/plain": [ "quantity Discharge \\\n", "group Reach \n", "name basin_left1 \n", "chainage 1.0020 17.8890 57.3595 101.4935 144.0745 \n", "tag 0.0-246.6 0.0-246.6 0.0-246.6 0.0-246.6 0.0-246.6 \n", "2000-02-18 00:06:00 0.0 0.0 0.0 0.0 0.0 \n", "2000-02-18 00:16:00 -0.0 -0.0 -0.0 -0.0 -0.0 \n", "\n", "quantity \\\n", "group \n", "name \n", "chainage 175.4965 197.5490 228.4110 255.6120 274.6260 \n", "tag 0.0-246.6 0.0-246.6 0.0-246.6 246.6-413.6 246.6-413.6 \n", "2000-02-18 00:06:00 0.0 0.0 0.0 0.0 0.0 \n", "2000-02-18 00:16:00 -0.0 -0.0 -0.0 -0.0 -0.0 \n", "\n", "quantity ... \\\n", "group ... \n", "name ... tributary \n", "chainage ... 95.0000 110.0000 125.0000 140.0000 \n", "tag ... 50.0-500.0 50.0-500.0 50.0-500.0 50.0-500.0 \n", "2000-02-18 00:06:00 ... 0.000000 0.0 0.000000 0.000000 \n", "2000-02-18 00:16:00 ... 0.013857 -0.0 0.050522 0.053607 \n", "\n", "quantity \\\n", "group \n", "name \n", "chainage 175.0000 225.0000 275.0000 350.0000 425.0000 \n", "tag 50.0-500.0 50.0-500.0 50.0-500.0 50.0-500.0 50.0-500.0 \n", "2000-02-18 00:06:00 0.000000 0.000000 0.000000 0.000000 0.000000 \n", "2000-02-18 00:16:00 0.090468 0.107519 0.144026 0.177496 0.191049 \n", "\n", "quantity \n", "group \n", "name \n", "chainage 475.0000 \n", "tag 50.0-500.0 \n", "2000-02-18 00:06:00 0.000000 \n", "2000-02-18 00:16:00 0.197755 \n", "\n", "[2 rows x 101 columns]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# A hierarchical column mode is also supported. Only relevant levels are included with 'compact'. For full hierarchy use 'all'.\n", "df = res.reaches.Discharge.read(column_mode=\"compact\")\n", "df.head(2)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\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", " \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", " \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", "
TimeSeriesId(quantity='Discharge', group='Reach', name='basin_left1', chainage=1.002, tag='0.0-246.6', duplicate=0, derived=False)TimeSeriesId(quantity='Discharge', group='Reach', name='basin_left1', chainage=17.889, tag='0.0-246.6', duplicate=0, derived=False)TimeSeriesId(quantity='Discharge', group='Reach', name='basin_left1', chainage=57.3595, tag='0.0-246.6', duplicate=0, derived=False)TimeSeriesId(quantity='Discharge', group='Reach', name='basin_left1', chainage=101.4935, tag='0.0-246.6', duplicate=0, derived=False)TimeSeriesId(quantity='Discharge', group='Reach', name='basin_left1', chainage=144.0745, tag='0.0-246.6', duplicate=0, derived=False)TimeSeriesId(quantity='Discharge', group='Reach', name='basin_left1', chainage=175.4965, tag='0.0-246.6', duplicate=0, derived=False)TimeSeriesId(quantity='Discharge', group='Reach', name='basin_left1', chainage=197.54899999999998, tag='0.0-246.6', duplicate=0, derived=False)TimeSeriesId(quantity='Discharge', group='Reach', name='basin_left1', chainage=228.411, tag='0.0-246.6', duplicate=0, derived=False)TimeSeriesId(quantity='Discharge', group='Reach', name='basin_left1', chainage=255.612, tag='246.6-413.6', duplicate=0, derived=False)TimeSeriesId(quantity='Discharge', group='Reach', name='basin_left1', chainage=274.626, tag='246.6-413.6', duplicate=0, derived=False)...TimeSeriesId(quantity='Discharge', group='Reach', name='tributary', chainage=95.0, tag='50.0-500.0', duplicate=0, derived=False)TimeSeriesId(quantity='Discharge', group='Reach', name='tributary', chainage=110.0, tag='50.0-500.0', duplicate=0, derived=False)TimeSeriesId(quantity='Discharge', group='Reach', name='tributary', chainage=125.0, tag='50.0-500.0', duplicate=0, derived=False)TimeSeriesId(quantity='Discharge', group='Reach', name='tributary', chainage=140.0, tag='50.0-500.0', duplicate=0, derived=False)TimeSeriesId(quantity='Discharge', group='Reach', name='tributary', chainage=175.0, tag='50.0-500.0', duplicate=0, derived=False)TimeSeriesId(quantity='Discharge', group='Reach', name='tributary', chainage=225.0, tag='50.0-500.0', duplicate=0, derived=False)TimeSeriesId(quantity='Discharge', group='Reach', name='tributary', chainage=275.0, tag='50.0-500.0', duplicate=0, derived=False)TimeSeriesId(quantity='Discharge', group='Reach', name='tributary', chainage=350.0, tag='50.0-500.0', duplicate=0, derived=False)TimeSeriesId(quantity='Discharge', group='Reach', name='tributary', chainage=425.0, tag='50.0-500.0', duplicate=0, derived=False)TimeSeriesId(quantity='Discharge', group='Reach', name='tributary', chainage=475.0, tag='50.0-500.0', duplicate=0, derived=False)
2000-02-18 00:06:000.00.00.00.00.00.00.00.00.00.0...0.0000000.00.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000
2000-02-18 00:16:00-0.0-0.0-0.0-0.0-0.0-0.0-0.0-0.0-0.0-0.0...0.013857-0.00.0505220.0536070.0904680.1075190.1440260.1774960.1910490.197755
\n", "

2 rows × 101 columns

\n", "
" ], "text/plain": [ " TimeSeriesId(quantity='Discharge', group='Reach', name='basin_left1', chainage=1.002, tag='0.0-246.6', duplicate=0, derived=False) \\\n", "2000-02-18 00:06:00 0.0 \n", "2000-02-18 00:16:00 -0.0 \n", "\n", " TimeSeriesId(quantity='Discharge', group='Reach', name='basin_left1', chainage=17.889, tag='0.0-246.6', duplicate=0, derived=False) \\\n", "2000-02-18 00:06:00 0.0 \n", "2000-02-18 00:16:00 -0.0 \n", "\n", " TimeSeriesId(quantity='Discharge', group='Reach', name='basin_left1', chainage=57.3595, tag='0.0-246.6', duplicate=0, derived=False) \\\n", "2000-02-18 00:06:00 0.0 \n", "2000-02-18 00:16:00 -0.0 \n", "\n", " TimeSeriesId(quantity='Discharge', group='Reach', name='basin_left1', chainage=101.4935, tag='0.0-246.6', duplicate=0, derived=False) \\\n", "2000-02-18 00:06:00 0.0 \n", "2000-02-18 00:16:00 -0.0 \n", "\n", " TimeSeriesId(quantity='Discharge', group='Reach', name='basin_left1', chainage=144.0745, tag='0.0-246.6', duplicate=0, derived=False) \\\n", "2000-02-18 00:06:00 0.0 \n", "2000-02-18 00:16:00 -0.0 \n", "\n", " TimeSeriesId(quantity='Discharge', group='Reach', name='basin_left1', chainage=175.4965, tag='0.0-246.6', duplicate=0, derived=False) \\\n", "2000-02-18 00:06:00 0.0 \n", "2000-02-18 00:16:00 -0.0 \n", "\n", " TimeSeriesId(quantity='Discharge', group='Reach', name='basin_left1', chainage=197.54899999999998, tag='0.0-246.6', duplicate=0, derived=False) \\\n", "2000-02-18 00:06:00 0.0 \n", "2000-02-18 00:16:00 -0.0 \n", "\n", " TimeSeriesId(quantity='Discharge', group='Reach', name='basin_left1', chainage=228.411, tag='0.0-246.6', duplicate=0, derived=False) \\\n", "2000-02-18 00:06:00 0.0 \n", "2000-02-18 00:16:00 -0.0 \n", "\n", " TimeSeriesId(quantity='Discharge', group='Reach', name='basin_left1', chainage=255.612, tag='246.6-413.6', duplicate=0, derived=False) \\\n", "2000-02-18 00:06:00 0.0 \n", "2000-02-18 00:16:00 -0.0 \n", "\n", " TimeSeriesId(quantity='Discharge', group='Reach', name='basin_left1', chainage=274.626, tag='246.6-413.6', duplicate=0, derived=False) \\\n", "2000-02-18 00:06:00 0.0 \n", "2000-02-18 00:16:00 -0.0 \n", "\n", " ... \\\n", "2000-02-18 00:06:00 ... \n", "2000-02-18 00:16:00 ... \n", "\n", " TimeSeriesId(quantity='Discharge', group='Reach', name='tributary', chainage=95.0, tag='50.0-500.0', duplicate=0, derived=False) \\\n", "2000-02-18 00:06:00 0.000000 \n", "2000-02-18 00:16:00 0.013857 \n", "\n", " TimeSeriesId(quantity='Discharge', group='Reach', name='tributary', chainage=110.0, tag='50.0-500.0', duplicate=0, derived=False) \\\n", "2000-02-18 00:06:00 0.0 \n", "2000-02-18 00:16:00 -0.0 \n", "\n", " TimeSeriesId(quantity='Discharge', group='Reach', name='tributary', chainage=125.0, tag='50.0-500.0', duplicate=0, derived=False) \\\n", "2000-02-18 00:06:00 0.000000 \n", "2000-02-18 00:16:00 0.050522 \n", "\n", " TimeSeriesId(quantity='Discharge', group='Reach', name='tributary', chainage=140.0, tag='50.0-500.0', duplicate=0, derived=False) \\\n", "2000-02-18 00:06:00 0.000000 \n", "2000-02-18 00:16:00 0.053607 \n", "\n", " TimeSeriesId(quantity='Discharge', group='Reach', name='tributary', chainage=175.0, tag='50.0-500.0', duplicate=0, derived=False) \\\n", "2000-02-18 00:06:00 0.000000 \n", "2000-02-18 00:16:00 0.090468 \n", "\n", " TimeSeriesId(quantity='Discharge', group='Reach', name='tributary', chainage=225.0, tag='50.0-500.0', duplicate=0, derived=False) \\\n", "2000-02-18 00:06:00 0.000000 \n", "2000-02-18 00:16:00 0.107519 \n", "\n", " TimeSeriesId(quantity='Discharge', group='Reach', name='tributary', chainage=275.0, tag='50.0-500.0', duplicate=0, derived=False) \\\n", "2000-02-18 00:06:00 0.000000 \n", "2000-02-18 00:16:00 0.144026 \n", "\n", " TimeSeriesId(quantity='Discharge', group='Reach', name='tributary', chainage=350.0, tag='50.0-500.0', duplicate=0, derived=False) \\\n", "2000-02-18 00:06:00 0.000000 \n", "2000-02-18 00:16:00 0.177496 \n", "\n", " TimeSeriesId(quantity='Discharge', group='Reach', name='tributary', chainage=425.0, tag='50.0-500.0', duplicate=0, derived=False) \\\n", "2000-02-18 00:06:00 0.000000 \n", "2000-02-18 00:16:00 0.191049 \n", "\n", " TimeSeriesId(quantity='Discharge', group='Reach', name='tributary', chainage=475.0, tag='50.0-500.0', duplicate=0, derived=False) \n", "2000-02-18 00:06:00 0.000000 \n", "2000-02-18 00:16:00 0.197755 \n", "\n", "[2 rows x 101 columns]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# It's also possible to have a TimeSeriesId column index.\n", "# TimeSeriesId is an object that uniquely identifies each time series.\n", "df = res.reaches.Discharge.read(column_mode=\"timeseries\")\n", "df.head(2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### MIKE IO 1D extends Pandas by providing a '.m1d' accessor on all DataFrames.\n", "The accessor provides several useful methods for working with DataFrames within MIKE IO 1D:\n", "- .m1d.query()\n", "- .m1d.compact()\n", "- .m1d.groupby()\n", "- .m1d.groupby_chainage()\n", "- .m1d.agg_chainage()\n", "\n", "These methods are illustrated below." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# To use the .m1d accessor, the DataFrame must have a MultiIndex column (e.g. column_mode='all' or 'compact').\n", "# The .m1d accessor exists on the DataFrame itself.\n", "df = res.read(column_mode=\"all\")\n", "df.m1d" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### .m1d.compact()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\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", " \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", " \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", " \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", " \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", " \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", " \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", " \n", "
quantityWaterLevel...FlowVelocityVariable:TwoTimeSensorGateLevelWater level:Sensor:s.h.river53745.34Gate level:Sensor:SensorGateLevelDischarge:Sensor:SensorGauge1
groupNode...ReachGlobalGlobalGlobalGlobal
name'basin_left1', 0'basin_left1', 483.74285236705026'basin_left2', 0'basin_left2', 441.71489580142429'basin_right', -10'basin_right', 720'river', 53100'river', 55124.2276598819'tributary', 500'basin_left1', 246.61...tributary
chainageNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...175.00000225.00000275.00000350.00000425.00000475.00000NaNNaNNaNNaN
tag...50.0-500.050.0-500.050.0-500.050.0-500.050.0-500.050.0-500.0
duplicate0000000000...0000000000
derivedFalseFalseFalseFalseFalseFalseFalseFalseFalseFalse...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
2000-02-18 00:06:0057.42699853.49599854.00299859.20000153.65258.34299951.83599953.19455.48000053.065304...0.0000000.0000000.0000000.0000000.0000000.000000107.54000151.90599853.770.0
2000-02-18 00:16:0057.42699853.49599854.00299859.20000153.65258.34299951.83600653.19455.94622453.065304...0.6082040.5179460.4498980.4463450.4198570.417569107.54000151.90599853.77-0.0
\n", "

2 rows × 498 columns

\n", "
" ], "text/plain": [ "quantity WaterLevel \\\n", "group Node \n", "name 'basin_left1', 0 'basin_left1', 483.74285236705026 \n", "chainage NaN NaN \n", "tag \n", "duplicate 0 0 \n", "derived False False \n", "2000-02-18 00:06:00 57.426998 53.495998 \n", "2000-02-18 00:16:00 57.426998 53.495998 \n", "\n", "quantity \\\n", "group \n", "name 'basin_left2', 0 'basin_left2', 441.71489580142429 \n", "chainage NaN NaN \n", "tag \n", "duplicate 0 0 \n", "derived False False \n", "2000-02-18 00:06:00 54.002998 59.200001 \n", "2000-02-18 00:16:00 54.002998 59.200001 \n", "\n", "quantity \\\n", "group \n", "name 'basin_right', -10 'basin_right', 720 'river', 53100 \n", "chainage NaN NaN NaN \n", "tag \n", "duplicate 0 0 0 \n", "derived False False False \n", "2000-02-18 00:06:00 53.652 58.342999 51.835999 \n", "2000-02-18 00:16:00 53.652 58.342999 51.836006 \n", "\n", "quantity \\\n", "group \n", "name 'river', 55124.2276598819 'tributary', 500 \n", "chainage NaN NaN \n", "tag \n", "duplicate 0 0 \n", "derived False False \n", "2000-02-18 00:06:00 53.194 55.480000 \n", "2000-02-18 00:16:00 53.194 55.946224 \n", "\n", "quantity ... FlowVelocity \\\n", "group ... Reach \n", "name 'basin_left1', 246.61 ... tributary \n", "chainage NaN ... 175.00000 225.00000 \n", "tag ... 50.0-500.0 50.0-500.0 \n", "duplicate 0 ... 0 0 \n", "derived False ... False False \n", "2000-02-18 00:06:00 53.065304 ... 0.000000 0.000000 \n", "2000-02-18 00:16:00 53.065304 ... 0.608204 0.517946 \n", "\n", "quantity \\\n", "group \n", "name \n", "chainage 275.00000 350.00000 425.00000 475.00000 \n", "tag 50.0-500.0 50.0-500.0 50.0-500.0 50.0-500.0 \n", "duplicate 0 0 0 0 \n", "derived False False False False \n", "2000-02-18 00:06:00 0.000000 0.000000 0.000000 0.000000 \n", "2000-02-18 00:16:00 0.449898 0.446345 0.419857 0.417569 \n", "\n", "quantity Variable:TwoTimeSensorGateLevel \\\n", "group Global \n", "name \n", "chainage NaN \n", "tag \n", "duplicate 0 \n", "derived False \n", "2000-02-18 00:06:00 107.540001 \n", "2000-02-18 00:16:00 107.540001 \n", "\n", "quantity Water level:Sensor:s.h.river53745.34 \\\n", "group Global \n", "name \n", "chainage NaN \n", "tag \n", "duplicate 0 \n", "derived False \n", "2000-02-18 00:06:00 51.905998 \n", "2000-02-18 00:16:00 51.905998 \n", "\n", "quantity Gate level:Sensor:SensorGateLevel \\\n", "group Global \n", "name \n", "chainage NaN \n", "tag \n", "duplicate 0 \n", "derived False \n", "2000-02-18 00:06:00 53.77 \n", "2000-02-18 00:16:00 53.77 \n", "\n", "quantity Discharge:Sensor:SensorGauge1 \n", "group Global \n", "name \n", "chainage NaN \n", "tag \n", "duplicate 0 \n", "derived False \n", "2000-02-18 00:06:00 0.0 \n", "2000-02-18 00:16:00 -0.0 \n", "\n", "[2 rows x 498 columns]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Let's make some queries on the DataFrame itself with help from the .m1d accessor.\n", "# Let's read the entire file into a DataFrame with column_mode='all'.\n", "df = res.read(column_mode=\"all\")\n", "df.head(2)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\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", " \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", " \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", " \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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
quantityWaterLevel...FlowVelocityVariable:TwoTimeSensorGateLevelWater level:Sensor:s.h.river53745.34Gate level:Sensor:SensorGateLevelDischarge:Sensor:SensorGauge1
groupNode...ReachGlobalGlobalGlobalGlobal
name'basin_left1', 0'basin_left1', 483.74285236705026'basin_left2', 0'basin_left2', 441.71489580142429'basin_right', -10'basin_right', 720'river', 53100'river', 55124.2276598819'tributary', 500'basin_left1', 246.61...tributary
chainageNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...175.00000225.00000275.00000350.00000425.00000475.00000NaNNaNNaNNaN
tag...50.0-500.050.0-500.050.0-500.050.0-500.050.0-500.050.0-500.0
2000-02-18 00:06:0057.42699853.49599854.00299859.20000153.65258.34299951.83599953.19455.48000053.065304...0.0000000.0000000.0000000.0000000.0000000.000000107.54000151.90599853.770.0
2000-02-18 00:16:0057.42699853.49599854.00299859.20000153.65258.34299951.83600653.19455.94622453.065304...0.6082040.5179460.4498980.4463450.4198570.417569107.54000151.90599853.77-0.0
\n", "

2 rows × 498 columns

\n", "
" ], "text/plain": [ "quantity WaterLevel \\\n", "group Node \n", "name 'basin_left1', 0 'basin_left1', 483.74285236705026 \n", "chainage NaN NaN \n", "tag \n", "2000-02-18 00:06:00 57.426998 53.495998 \n", "2000-02-18 00:16:00 57.426998 53.495998 \n", "\n", "quantity \\\n", "group \n", "name 'basin_left2', 0 'basin_left2', 441.71489580142429 \n", "chainage NaN NaN \n", "tag \n", "2000-02-18 00:06:00 54.002998 59.200001 \n", "2000-02-18 00:16:00 54.002998 59.200001 \n", "\n", "quantity \\\n", "group \n", "name 'basin_right', -10 'basin_right', 720 'river', 53100 \n", "chainage NaN NaN NaN \n", "tag \n", "2000-02-18 00:06:00 53.652 58.342999 51.835999 \n", "2000-02-18 00:16:00 53.652 58.342999 51.836006 \n", "\n", "quantity \\\n", "group \n", "name 'river', 55124.2276598819 'tributary', 500 \n", "chainage NaN NaN \n", "tag \n", "2000-02-18 00:06:00 53.194 55.480000 \n", "2000-02-18 00:16:00 53.194 55.946224 \n", "\n", "quantity ... FlowVelocity \\\n", "group ... Reach \n", "name 'basin_left1', 246.61 ... tributary \n", "chainage NaN ... 175.00000 225.00000 \n", "tag ... 50.0-500.0 50.0-500.0 \n", "2000-02-18 00:06:00 53.065304 ... 0.000000 0.000000 \n", "2000-02-18 00:16:00 53.065304 ... 0.608204 0.517946 \n", "\n", "quantity \\\n", "group \n", "name \n", "chainage 275.00000 350.00000 425.00000 475.00000 \n", "tag 50.0-500.0 50.0-500.0 50.0-500.0 50.0-500.0 \n", "2000-02-18 00:06:00 0.000000 0.000000 0.000000 0.000000 \n", "2000-02-18 00:16:00 0.449898 0.446345 0.419857 0.417569 \n", "\n", "quantity Variable:TwoTimeSensorGateLevel \\\n", "group Global \n", "name \n", "chainage NaN \n", "tag \n", "2000-02-18 00:06:00 107.540001 \n", "2000-02-18 00:16:00 107.540001 \n", "\n", "quantity Water level:Sensor:s.h.river53745.34 \\\n", "group Global \n", "name \n", "chainage NaN \n", "tag \n", "2000-02-18 00:06:00 51.905998 \n", "2000-02-18 00:16:00 51.905998 \n", "\n", "quantity Gate level:Sensor:SensorGateLevel \\\n", "group Global \n", "name \n", "chainage NaN \n", "tag \n", "2000-02-18 00:06:00 53.77 \n", "2000-02-18 00:16:00 53.77 \n", "\n", "quantity Discharge:Sensor:SensorGauge1 \n", "group Global \n", "name \n", "chainage NaN \n", "tag \n", "2000-02-18 00:06:00 0.0 \n", "2000-02-18 00:16:00 -0.0 \n", "\n", "[2 rows x 498 columns]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# That's a lot of detail included and is a bit busy. We can use .m1d.compact() to remove redundant levels.\n", "df = df.m1d.compact()\n", "df.head(2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### .m1d.query()" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\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", " \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", " \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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
quantityDischarge
groupReach
namebasin_left1...tributary
chainage1.002017.889057.3595101.4935144.0745175.4965197.5490228.4110255.6120274.6260...95.0000110.0000125.0000140.0000175.0000225.0000275.0000350.0000425.0000475.0000
tag0.0-246.60.0-246.60.0-246.60.0-246.60.0-246.60.0-246.60.0-246.60.0-246.6246.6-413.6246.6-413.6...50.0-500.050.0-500.050.0-500.050.0-500.050.0-500.050.0-500.050.0-500.050.0-500.050.0-500.050.0-500.0
2000-02-18 00:06:000.00.00.00.00.00.00.00.00.00.0...0.0000000.00.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000
2000-02-18 00:16:00-0.0-0.0-0.0-0.0-0.0-0.0-0.0-0.0-0.0-0.0...0.013857-0.00.0505220.0536070.0904680.1075190.1440260.1774960.1910490.197755
\n", "

2 rows × 101 columns

\n", "
" ], "text/plain": [ "quantity Discharge \\\n", "group Reach \n", "name basin_left1 \n", "chainage 1.0020 17.8890 57.3595 101.4935 144.0745 \n", "tag 0.0-246.6 0.0-246.6 0.0-246.6 0.0-246.6 0.0-246.6 \n", "2000-02-18 00:06:00 0.0 0.0 0.0 0.0 0.0 \n", "2000-02-18 00:16:00 -0.0 -0.0 -0.0 -0.0 -0.0 \n", "\n", "quantity \\\n", "group \n", "name \n", "chainage 175.4965 197.5490 228.4110 255.6120 274.6260 \n", "tag 0.0-246.6 0.0-246.6 0.0-246.6 246.6-413.6 246.6-413.6 \n", "2000-02-18 00:06:00 0.0 0.0 0.0 0.0 0.0 \n", "2000-02-18 00:16:00 -0.0 -0.0 -0.0 -0.0 -0.0 \n", "\n", "quantity ... \\\n", "group ... \n", "name ... tributary \n", "chainage ... 95.0000 110.0000 125.0000 140.0000 \n", "tag ... 50.0-500.0 50.0-500.0 50.0-500.0 50.0-500.0 \n", "2000-02-18 00:06:00 ... 0.000000 0.0 0.000000 0.000000 \n", "2000-02-18 00:16:00 ... 0.013857 -0.0 0.050522 0.053607 \n", "\n", "quantity \\\n", "group \n", "name \n", "chainage 175.0000 225.0000 275.0000 350.0000 425.0000 \n", "tag 50.0-500.0 50.0-500.0 50.0-500.0 50.0-500.0 50.0-500.0 \n", "2000-02-18 00:06:00 0.000000 0.000000 0.000000 0.000000 0.000000 \n", "2000-02-18 00:16:00 0.090468 0.107519 0.144026 0.177496 0.191049 \n", "\n", "quantity \n", "group \n", "name \n", "chainage 475.0000 \n", "tag 50.0-500.0 \n", "2000-02-18 00:06:00 0.000000 \n", "2000-02-18 00:16:00 0.197755 \n", "\n", "[2 rows x 101 columns]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Let's get Discharge for the reaches.\n", "df = df.m1d.query(\"group=='Reach' and quantity=='Discharge'\")\n", "df.head(2)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
quantityDischarge
groupReach
nametributary
chainage70.095.0110.0125.0140.0175.0225.0275.0350.0425.0475.0
tag50.0-500.050.0-500.050.0-500.050.0-500.050.0-500.050.0-500.050.0-500.050.0-500.050.0-500.050.0-500.050.0-500.0
2000-02-18 00:06:000.0000000.0000000.00.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000
2000-02-18 00:16:000.0205510.013857-0.00.0505220.0536070.0904680.1075190.1440260.1774960.1910490.197755
\n", "
" ], "text/plain": [ "quantity Discharge \\\n", "group Reach \n", "name tributary \n", "chainage 70.0 95.0 110.0 125.0 140.0 \n", "tag 50.0-500.0 50.0-500.0 50.0-500.0 50.0-500.0 50.0-500.0 \n", "2000-02-18 00:06:00 0.000000 0.000000 0.0 0.000000 0.000000 \n", "2000-02-18 00:16:00 0.020551 0.013857 -0.0 0.050522 0.053607 \n", "\n", "quantity \\\n", "group \n", "name \n", "chainage 175.0 225.0 275.0 350.0 425.0 \n", "tag 50.0-500.0 50.0-500.0 50.0-500.0 50.0-500.0 50.0-500.0 \n", "2000-02-18 00:06:00 0.000000 0.000000 0.000000 0.000000 0.000000 \n", "2000-02-18 00:16:00 0.090468 0.107519 0.144026 0.177496 0.191049 \n", "\n", "quantity \n", "group \n", "name \n", "chainage 475.0 \n", "tag 50.0-500.0 \n", "2000-02-18 00:06:00 0.000000 \n", "2000-02-18 00:16:00 0.197755 " ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Let's look at all the reaches with 'trib' in their name.\n", "df = df.m1d.query(\"name.str.contains('trib')\")\n", "df.head(2)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
quantityDischarge
groupReach
nametributary
chainage70.095.0110.0125.0140.0175.0225.0275.0350.0425.0475.0
tag50.0-500.050.0-500.050.0-500.050.0-500.050.0-500.050.0-500.050.0-500.050.0-500.050.0-500.050.0-500.050.0-500.0
max2.0277861.6981081.4522741.1982940.9458160.6964410.6659360.594450.5892730.4950950.296315
\n", "
" ], "text/plain": [ "quantity Discharge \\\n", "group Reach \n", "name tributary \n", "chainage 70.0 95.0 110.0 125.0 140.0 175.0 \n", "tag 50.0-500.0 50.0-500.0 50.0-500.0 50.0-500.0 50.0-500.0 50.0-500.0 \n", "max 2.027786 1.698108 1.452274 1.198294 0.945816 0.696441 \n", "\n", "quantity \n", "group \n", "name \n", "chainage 225.0 275.0 350.0 425.0 475.0 \n", "tag 50.0-500.0 50.0-500.0 50.0-500.0 50.0-500.0 50.0-500.0 \n", "max 0.665936 0.59445 0.589273 0.495095 0.296315 " ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Let's look at the max discharge for each reach.\n", "df.agg([\"max\"])" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
max
tag50.0-500.0
quantitynamechainage
Dischargetributary70.02.027786
95.01.698108
110.01.452274
125.01.198294
140.00.945816
175.00.696441
225.00.665936
275.00.594450
350.00.589273
425.00.495095
475.00.296315
\n", "
" ], "text/plain": [ " max\n", "tag 50.0-500.0\n", "quantity name chainage \n", "Discharge tributary 70.0 2.027786\n", " 95.0 1.698108\n", " 110.0 1.452274\n", " 125.0 1.198294\n", " 140.0 0.945816\n", " 175.0 0.696441\n", " 225.0 0.665936\n", " 275.0 0.594450\n", " 350.0 0.589273\n", " 425.0 0.495095\n", " 475.0 0.296315" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Use some standard pandas methods to format the table a different way\n", "# Tip: Chaining methods in brackets is a great way to explore the data. Comment out lines from bottom up to see the effect.\n", "(\n", " df.agg([\"max\"]).T.droplevel([\"group\"]).unstack()\n", " # .pipe(lambda df: df * 2) # Uncomment this line to see the effect of the .pipe() method.\n", ")" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
max
tag50.0-500.0
quantitynamechainage
Dischargetributary70.02.027786
95.01.698108
110.01.452274
125.01.198294
140.00.945816
175.00.696441
225.00.665936
275.00.594450
350.00.589273
425.00.495095
475.00.296315
\n", "
" ], "text/plain": [ " max\n", "tag 50.0-500.0\n", "quantity name chainage \n", "Discharge tributary 70.0 2.027786\n", " 95.0 1.698108\n", " 110.0 1.452274\n", " 125.0 1.198294\n", " 140.0 0.945816\n", " 175.0 0.696441\n", " 225.0 0.665936\n", " 275.0 0.594450\n", " 350.0 0.589273\n", " 425.0 0.495095\n", " 475.0 0.296315" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Let's start from scratch and use bracket chaining to create the same table\n", "df = (\n", " res.read(column_mode=\"all\")\n", " .m1d.query(\"name.str.contains('trib')\")\n", " .m1d.compact()\n", " .m1d.query(\"quantity=='Discharge'\")\n", " .agg([\"max\"])\n", " .T.droplevel(\"group\")\n", " .unstack()\n", ")\n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### .m1d.agg_chainage()" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", "
quantityDischarge
groupReach
namebasin_left1basin_left2basin_rightlink_basin_leftlink_basin_left1_2link_basin_left2_2link_basin_rightrivertributary
tag0.0-246.6246.6-413.6413.6-483.70.0-159.1159.1-441.7-10.0-636.4636.4-720.00.0-64.00.0-58.60.0-69.00.0-80.453100.0-53950.053950.0-54000.054000.0-54050.054050.0-54150.054150.0-54350.054350.0-55124.250.0-500.0
count73.00000073.00000073.00000073.073.073.00000073.00000073.00000073.073.073.00000073.00000073.00000073.00000073.00000073.00000073.00000073.000000
mean2.649067-0.3603660.0250400.00.04.0540450.0080204.4922080.00.05.73720272.18254170.02957974.72196274.97135975.50796576.9100720.548908
std2.8884550.8207590.0593120.00.02.9182590.0445395.6462580.00.03.96102129.65851027.06049329.56374529.51234128.96761327.7712800.489293
min-0.000545-2.174818-0.009495-0.0-0.0-0.000000-0.000000-2.671227-0.0-0.00.0000000.0000000.0000000.0000000.000000-0.0498540.0000000.000000
25%0.000000-1.117922-0.0038830.00.00.0000000.0000000.0000000.00.00.03611275.88575776.29078776.20687975.49414875.79993476.6897960.200483
50%1.1830940.000000-0.0009860.00.04.4857930.0000001.2869760.00.06.57908378.72615881.53173185.14588984.43614284.83877686.0027770.393951
75%5.0349010.0000000.0000000.00.05.7960130.0000009.3298150.00.08.94413986.60337184.47876093.83573294.90418293.39422693.5843660.627040
max7.7739711.0414390.202153-0.0-0.09.1160760.36638913.542682-0.0-0.011.380744102.72271790.08531299.735207100.169701100.301697100.1346662.027786
\n", "
" ], "text/plain": [ "quantity Discharge \\\n", "group Reach \n", "name basin_left1 basin_left2 \n", "tag 0.0-246.6 246.6-413.6 413.6-483.7 0.0-159.1 159.1-441.7 \n", "count 73.000000 73.000000 73.000000 73.0 73.0 \n", "mean 2.649067 -0.360366 0.025040 0.0 0.0 \n", "std 2.888455 0.820759 0.059312 0.0 0.0 \n", "min -0.000545 -2.174818 -0.009495 -0.0 -0.0 \n", "25% 0.000000 -1.117922 -0.003883 0.0 0.0 \n", "50% 1.183094 0.000000 -0.000986 0.0 0.0 \n", "75% 5.034901 0.000000 0.000000 0.0 0.0 \n", "max 7.773971 1.041439 0.202153 -0.0 -0.0 \n", "\n", "quantity \\\n", "group \n", "name basin_right link_basin_left link_basin_left1_2 \n", "tag -10.0-636.4 636.4-720.0 0.0-64.0 0.0-58.6 \n", "count 73.000000 73.000000 73.000000 73.0 \n", "mean 4.054045 0.008020 4.492208 0.0 \n", "std 2.918259 0.044539 5.646258 0.0 \n", "min -0.000000 -0.000000 -2.671227 -0.0 \n", "25% 0.000000 0.000000 0.000000 0.0 \n", "50% 4.485793 0.000000 1.286976 0.0 \n", "75% 5.796013 0.000000 9.329815 0.0 \n", "max 9.116076 0.366389 13.542682 -0.0 \n", "\n", "quantity \\\n", "group \n", "name link_basin_left2_2 link_basin_right river \n", "tag 0.0-69.0 0.0-80.4 53100.0-53950.0 53950.0-54000.0 \n", "count 73.0 73.000000 73.000000 73.000000 \n", "mean 0.0 5.737202 72.182541 70.029579 \n", "std 0.0 3.961021 29.658510 27.060493 \n", "min -0.0 0.000000 0.000000 0.000000 \n", "25% 0.0 0.036112 75.885757 76.290787 \n", "50% 0.0 6.579083 78.726158 81.531731 \n", "75% 0.0 8.944139 86.603371 84.478760 \n", "max -0.0 11.380744 102.722717 90.085312 \n", "\n", "quantity \\\n", "group \n", "name \n", "tag 54000.0-54050.0 54050.0-54150.0 54150.0-54350.0 54350.0-55124.2 \n", "count 73.000000 73.000000 73.000000 73.000000 \n", "mean 74.721962 74.971359 75.507965 76.910072 \n", "std 29.563745 29.512341 28.967613 27.771280 \n", "min 0.000000 0.000000 -0.049854 0.000000 \n", "25% 76.206879 75.494148 75.799934 76.689796 \n", "50% 85.145889 84.436142 84.838776 86.002777 \n", "75% 93.835732 94.904182 93.394226 93.584366 \n", "max 99.735207 100.169701 100.301697 100.134666 \n", "\n", "quantity \n", "group \n", "name tributary \n", "tag 50.0-500.0 \n", "count 73.000000 \n", "mean 0.548908 \n", "std 0.489293 \n", "min 0.000000 \n", "25% 0.200483 \n", "50% 0.393951 \n", "75% 0.627040 \n", "max 2.027786 " ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Now let's try something different. We aggregate the max discharge for each reach, then look at descriptive staistics along the time axis.\n", "# Here, 'count' is the number of time steps and 'mean' is the mean of the max discharges of all Q-points along a reach.\n", "(\n", " res.read(column_mode=\"all\")\n", " .m1d.query(\"quantity=='Discharge'\")\n", " .m1d.compact()\n", " .m1d.agg_chainage(\"max\")\n", " .describe()\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### .m1d.groupby_chainage()" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
namebasin_left1basin_left2...rivertributary
chainage1.002000228.411000255.612000377.384500447.534000482.59692614.597000126.599500186.746500437.951448...53975.00000054025.00000054075.00000054125.00000054175.00000054324.99800054375.00000055112.11383070.000000475.000000
tag0.0-246.60.0-246.6246.6-413.6246.6-413.6413.6-483.7413.6-483.70.0-159.10.0-159.1159.1-441.7159.1-441.7...53950.0-54000.054000.0-54050.054050.0-54150.054050.0-54150.054150.0-54350.054150.0-54350.054350.0-55124.254350.0-55124.250.0-500.050.0-500.0
count73.00000073.00000073.00000073.00000073.00000073.00000073.073.073.073.0...73.00000073.00000073.00000073.00000073.00000073.00000073.00000073.00000073.00000073.000000
mean-0.0000612.306082-1.521666-0.416949-0.049141-0.0015550.00.00.00.0...70.02957974.72196274.74492674.75766875.08794475.40897475.50871376.717072-0.2116210.188293
std0.0001713.2649351.9415550.7539960.1295600.0041010.00.00.00.0...27.06049329.56374529.49609929.44948429.10595928.90829528.84602527.7013801.1077420.049437
min-0.000545-2.167155-4.498637-2.174818-0.299972-0.009495-0.0-0.0-0.0-0.0...0.0000000.0000000.0000000.000000-0.120941-0.049854-0.0324190.000000-2.8845360.000000
25%0.0000000.000000-3.195148-1.117922-0.122781-0.0038830.00.00.00.0...76.29078776.20687975.49414874.80317775.52994575.79993475.88100476.689796-0.8404750.164611
50%0.0000001.138214-0.351519-0.255342-0.031151-0.0009860.00.00.00.0...81.53173185.14588984.43614283.80554284.25383884.83877685.32035885.784035-0.2238720.186661
75%0.0000005.0349010.0000000.0000000.0000000.0000000.00.00.00.0...84.47876093.83573294.71499694.90418293.39422693.14613393.25176293.5843660.3402230.211712
max0.0003017.7739710.9933950.8480200.2021530.006400-0.0-0.0-0.0-0.0...90.08531299.73520799.707542100.169701100.264687100.144592100.04206899.9995962.0277860.296315
\n", "

8 rows × 32 columns

\n", "
" ], "text/plain": [ "name basin_left1 \\\n", "chainage 1.002000 228.411000 255.612000 377.384500 447.534000 \n", "tag 0.0-246.6 0.0-246.6 246.6-413.6 246.6-413.6 413.6-483.7 \n", "count 73.000000 73.000000 73.000000 73.000000 73.000000 \n", "mean -0.000061 2.306082 -1.521666 -0.416949 -0.049141 \n", "std 0.000171 3.264935 1.941555 0.753996 0.129560 \n", "min -0.000545 -2.167155 -4.498637 -2.174818 -0.299972 \n", "25% 0.000000 0.000000 -3.195148 -1.117922 -0.122781 \n", "50% 0.000000 1.138214 -0.351519 -0.255342 -0.031151 \n", "75% 0.000000 5.034901 0.000000 0.000000 0.000000 \n", "max 0.000301 7.773971 0.993395 0.848020 0.202153 \n", "\n", "name basin_left2 \\\n", "chainage 482.596926 14.597000 126.599500 186.746500 437.951448 \n", "tag 413.6-483.7 0.0-159.1 0.0-159.1 159.1-441.7 159.1-441.7 \n", "count 73.000000 73.0 73.0 73.0 73.0 \n", "mean -0.001555 0.0 0.0 0.0 0.0 \n", "std 0.004101 0.0 0.0 0.0 0.0 \n", "min -0.009495 -0.0 -0.0 -0.0 -0.0 \n", "25% -0.003883 0.0 0.0 0.0 0.0 \n", "50% -0.000986 0.0 0.0 0.0 0.0 \n", "75% 0.000000 0.0 0.0 0.0 0.0 \n", "max 0.006400 -0.0 -0.0 -0.0 -0.0 \n", "\n", "name ... river \\\n", "chainage ... 53975.000000 54025.000000 54075.000000 54125.000000 \n", "tag ... 53950.0-54000.0 54000.0-54050.0 54050.0-54150.0 54050.0-54150.0 \n", "count ... 73.000000 73.000000 73.000000 73.000000 \n", "mean ... 70.029579 74.721962 74.744926 74.757668 \n", "std ... 27.060493 29.563745 29.496099 29.449484 \n", "min ... 0.000000 0.000000 0.000000 0.000000 \n", "25% ... 76.290787 76.206879 75.494148 74.803177 \n", "50% ... 81.531731 85.145889 84.436142 83.805542 \n", "75% ... 84.478760 93.835732 94.714996 94.904182 \n", "max ... 90.085312 99.735207 99.707542 100.169701 \n", "\n", "name \\\n", "chainage 54175.000000 54324.998000 54375.000000 55112.113830 \n", "tag 54150.0-54350.0 54150.0-54350.0 54350.0-55124.2 54350.0-55124.2 \n", "count 73.000000 73.000000 73.000000 73.000000 \n", "mean 75.087944 75.408974 75.508713 76.717072 \n", "std 29.105959 28.908295 28.846025 27.701380 \n", "min -0.120941 -0.049854 -0.032419 0.000000 \n", "25% 75.529945 75.799934 75.881004 76.689796 \n", "50% 84.253838 84.838776 85.320358 85.784035 \n", "75% 93.394226 93.146133 93.251762 93.584366 \n", "max 100.264687 100.144592 100.042068 99.999596 \n", "\n", "name tributary \n", "chainage 70.000000 475.000000 \n", "tag 50.0-500.0 50.0-500.0 \n", "count 73.000000 73.000000 \n", "mean -0.211621 0.188293 \n", "std 1.107742 0.049437 \n", "min -2.884536 0.000000 \n", "25% -0.840475 0.164611 \n", "50% -0.223872 0.186661 \n", "75% 0.340223 0.211712 \n", "max 2.027786 0.296315 \n", "\n", "[8 rows x 32 columns]" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Similarly, let's look at the mean of the first and last Q points.\n", "(\n", " res.read(column_mode=\"all\")\n", " .m1d.query(\"quantity=='Discharge'\")\n", " .m1d.compact()\n", " .m1d.groupby_chainage()\n", " .nth([0, -1]) # First we groupby, then select the first and last chaianges.\n", " .describe()\n", " .droplevel([\"quantity\", \"group\"], axis=1)\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### .m1d.groupby()" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\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", " \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", " \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", " \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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
quantityControlStrategyIdDischargeDischarge:Sensor:SensorGauge1DischargeInStructureFlowAreaInStructureFlowVelocityFlowVelocityInStructureGate level:Sensor:SensorGateLevelGateLevelManningResistanceNumberVariable:TwoTimeSensorGateLevelWater level:Sensor:s.h.river53745.34WaterLevel
count73.00000073.00000073.00000073.00000073.00000073.00000073.00000073.00000073.00000073.00000073.00000073.00000073.000000
mean5.91780879.34307961.39693177.74781047.7836843.35387211.32910053.76999753.76999732.665512107.53999356.85825059.200008
std0.70224728.94096626.60553029.18528418.1665500.8185525.3468170.0000000.0000002.4851200.0000001.8466560.000000
min0.0000000.0000000.0000000.0000000.0000000.0000000.00000053.77000053.77000025.000000107.54000151.90599859.200001
25%6.00000080.78311269.28106776.47018453.6391873.65221311.17076853.77000053.77000033.597073107.54000157.56782259.200001
50%6.00000086.65533474.48324686.15502956.0157283.71903211.41613353.77000053.77000033.614704107.54000157.70838559.200001
75%6.00000099.55471075.96350199.47715057.5519103.73695311.51437453.77000053.77000033.618801107.54000157.74383559.200001
max6.000000102.72271777.521797100.24726959.0366443.75465119.36397053.77000053.77000033.622650107.54000157.77758459.200001
\n", "
" ], "text/plain": [ "quantity ControlStrategyId Discharge Discharge:Sensor:SensorGauge1 \\\n", "count 73.000000 73.000000 73.000000 \n", "mean 5.917808 79.343079 61.396931 \n", "std 0.702247 28.940966 26.605530 \n", "min 0.000000 0.000000 0.000000 \n", "25% 6.000000 80.783112 69.281067 \n", "50% 6.000000 86.655334 74.483246 \n", "75% 6.000000 99.554710 75.963501 \n", "max 6.000000 102.722717 77.521797 \n", "\n", "quantity DischargeInStructure FlowAreaInStructure FlowVelocity \\\n", "count 73.000000 73.000000 73.000000 \n", "mean 77.747810 47.783684 3.353872 \n", "std 29.185284 18.166550 0.818552 \n", "min 0.000000 0.000000 0.000000 \n", "25% 76.470184 53.639187 3.652213 \n", "50% 86.155029 56.015728 3.719032 \n", "75% 99.477150 57.551910 3.736953 \n", "max 100.247269 59.036644 3.754651 \n", "\n", "quantity FlowVelocityInStructure Gate level:Sensor:SensorGateLevel \\\n", "count 73.000000 73.000000 \n", "mean 11.329100 53.769997 \n", "std 5.346817 0.000000 \n", "min 0.000000 53.770000 \n", "25% 11.170768 53.770000 \n", "50% 11.416133 53.770000 \n", "75% 11.514374 53.770000 \n", "max 19.363970 53.770000 \n", "\n", "quantity GateLevel ManningResistanceNumber Variable:TwoTimeSensorGateLevel \\\n", "count 73.000000 73.000000 73.000000 \n", "mean 53.769997 32.665512 107.539993 \n", "std 0.000000 2.485120 0.000000 \n", "min 53.770000 25.000000 107.540001 \n", "25% 53.770000 33.597073 107.540001 \n", "50% 53.770000 33.614704 107.540001 \n", "75% 53.770000 33.618801 107.540001 \n", "max 53.770000 33.622650 107.540001 \n", "\n", "quantity Water level:Sensor:s.h.river53745.34 WaterLevel \n", "count 73.000000 73.000000 \n", "mean 56.858250 59.200008 \n", "std 1.846656 0.000000 \n", "min 51.905998 59.200001 \n", "25% 57.567822 59.200001 \n", "50% 57.708385 59.200001 \n", "75% 57.743835 59.200001 \n", "max 57.777584 59.200001 " ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# We can similarly use the .m1d accessor to group by dimensions other than chainage.\n", "# Below we describe how the global maximum of each quantity in the system varies with time.\n", "(res.read(column_mode=\"all\").m1d.groupby(\"quantity\").agg(\"max\").describe())" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": ".venv", "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.12.7" } }, "nbformat": 4, "nbformat_minor": 2 }