33986 lines
1.6 MiB
Vendored
33986 lines
1.6 MiB
Vendored
{
|
|
"cells": [
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"# 40 kotlin-dataframe puzzles\n",
|
|
"inspired by [100 pandas puzzles](https://github.com/ajcr/100-pandas-puzzles)"
|
|
]
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"## Importing kotlin-dataframe\n",
|
|
"### Getting started\n",
|
|
"Difficulty: easy\n",
|
|
"\n",
|
|
"**1.** Import kotlin-dataframe"
|
|
]
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:41.542631050Z",
|
|
"start_time": "2025-12-18T11:19:40.843063224Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_3_jupyter",
|
|
"Line_4_jupyter",
|
|
"Line_5_jupyter",
|
|
"Line_6_jupyter",
|
|
"Line_7_jupyter",
|
|
"Line_8_jupyter",
|
|
"Line_9_jupyter",
|
|
"Line_10_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"%useLatestDescriptors\n",
|
|
"%use dataframe"
|
|
],
|
|
"outputs": [],
|
|
"execution_count": 1
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"## DataFrame Basics\n",
|
|
"### A few of the fundamental routines for selecting, sorting, adding and aggregating data in DataFrames\n",
|
|
"Difficulty: easy\n",
|
|
"\n",
|
|
"Consider the following columns:\n",
|
|
"```[kotlin]\n",
|
|
"columnOf(\"cat\", \"cat\", \"snake\", \"dog\", \"dog\", \"cat\", \"snake\", \"cat\", \"dog\", \"dog\")\n",
|
|
"columnOf(2.5, 3.0, 0.5, Double.NaN, 5.0, 2.0, 4.5, Double.NaN, 7, 3)\n",
|
|
"columnOf(1, 3, 2, 3, 2, 3, 1, 1, 2, 1)\n",
|
|
"columnOf(\"yes\", \"yes\", \"no\", \"yes\", \"no\", \"no\", \"no\", \"yes\", \"no\", \"no\")\n",
|
|
"```\n",
|
|
"**2.** Create a DataFrame df from this columns."
|
|
]
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:42.256463391Z",
|
|
"start_time": "2025-12-18T11:19:41.547295069Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_11_jupyter",
|
|
"Line_12_jupyter",
|
|
"Line_13_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"val df = dataFrameOf(\n",
|
|
" \"animal\" to columnOf(\"cat\", \"cat\", \"snake\", \"dog\", \"dog\", \"cat\", \"snake\", \"cat\", \"dog\", \"dog\"),\n",
|
|
" \"age\" to columnOf(2.5, 3.0, 0.5, Double.NaN, 5.0, 2.0, 4.5, Double.NaN, 7.0, 3.0),\n",
|
|
" \"visits\" to columnOf(1, 3, 2, 3, 2, 3, 1, 1, 2, 1),\n",
|
|
" \"priority\" to columnOf(\"yes\", \"yes\", \"no\", \"yes\", \"no\", \"no\", \"no\", \"yes\", \"no\", \"no\"),\n",
|
|
")\n",
|
|
"df"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_1()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_1\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539264"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataFrame: rowsCount = 10, columnsCount = 4</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"animal: String\">animal</span>", children: [], rightAlign: false, values: ["cat","cat","snake","dog","dog","cat","snake","cat","dog","dog"] }, \n",
|
|
"{ name: "<span title=\"age: Double\">age</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">2.5</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.5</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">5.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">4.5</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">7.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3.0</span></span>"] }, \n",
|
|
"{ name: "<span title=\"visits: Int\">visits</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">1</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">1</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">1</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">1</span></span>"] }, \n",
|
|
"{ name: "<span title=\"priority: String\">priority</span>", children: [], rightAlign: false, values: ["yes","yes","no","yes","no","no","no","yes","no","no"] }, \n",
|
|
"], id: 486539264, rootId: 486539264, totalRows: 10 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539264) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_1() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_1\");\n",
|
|
" resize_iframe_out_1(elem);\n",
|
|
" setInterval(resize_iframe_out_1, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_1(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539265\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">animal</th><th class=\"bottomBorder\" style=\"text-align:left\">age</th><th class=\"bottomBorder\" style=\"text-align:left\">visits</th><th class=\"bottomBorder\" style=\"text-align:left\">priority</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">cat</td><td style=\"vertical-align:top\">2.500000</td><td style=\"vertical-align:top\">1</td><td style=\"vertical-align:top\">yes</td></tr><tr><td style=\"vertical-align:top\">cat</td><td style=\"vertical-align:top\">3.000000</td><td style=\"vertical-align:top\">3</td><td style=\"vertical-align:top\">yes</td></tr><tr><td style=\"vertical-align:top\">snake</td><td style=\"vertical-align:top\">0.500000</td><td style=\"vertical-align:top\">2</td><td style=\"vertical-align:top\">no</td></tr><tr><td style=\"vertical-align:top\">dog</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">3</td><td style=\"vertical-align:top\">yes</td></tr><tr><td style=\"vertical-align:top\">dog</td><td style=\"vertical-align:top\">5.000000</td><td style=\"vertical-align:top\">2</td><td style=\"vertical-align:top\">no</td></tr><tr><td style=\"vertical-align:top\">cat</td><td style=\"vertical-align:top\">2.000000</td><td style=\"vertical-align:top\">3</td><td style=\"vertical-align:top\">no</td></tr><tr><td style=\"vertical-align:top\">snake</td><td style=\"vertical-align:top\">4.500000</td><td style=\"vertical-align:top\">1</td><td style=\"vertical-align:top\">no</td></tr><tr><td style=\"vertical-align:top\">cat</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">1</td><td style=\"vertical-align:top\">yes</td></tr><tr><td style=\"vertical-align:top\">dog</td><td style=\"vertical-align:top\">7.000000</td><td style=\"vertical-align:top\">2</td><td style=\"vertical-align:top\">no</td></tr><tr><td style=\"vertical-align:top\">dog</td><td style=\"vertical-align:top\">3.000000</td><td style=\"vertical-align:top\">1</td><td style=\"vertical-align:top\">no</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539265\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"animal\",\"age\",\"visits\",\"priority\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"}],\"nrow\":10,\"ncol\":4,\"is_formatted\":false},\"kotlin_dataframe\":[{\"animal\":\"cat\",\"age\":2.5,\"visits\":1,\"priority\":\"yes\"},{\"animal\":\"cat\",\"age\":3.0,\"visits\":3,\"priority\":\"yes\"},{\"animal\":\"snake\",\"age\":0.5,\"visits\":2,\"priority\":\"no\"},{\"animal\":\"dog\",\"age\":NaN,\"visits\":3,\"priority\":\"yes\"},{\"animal\":\"dog\",\"age\":5.0,\"visits\":2,\"priority\":\"no\"},{\"animal\":\"cat\",\"age\":2.0,\"visits\":3,\"priority\":\"no\"},{\"animal\":\"snake\",\"age\":4.5,\"visits\":1,\"priority\":\"no\"},{\"animal\":\"cat\",\"age\":NaN,\"visits\":1,\"priority\":\"yes\"},{\"animal\":\"dog\",\"age\":7.0,\"visits\":2,\"priority\":\"no\"},{\"animal\":\"dog\",\"age\":3.0,\"visits\":1,\"priority\":\"no\"}]}"
|
|
},
|
|
"execution_count": 2,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 2
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": "**3.** Display a summary of the basic information about this DataFrame and its data."
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:42.668067585Z",
|
|
"start_time": "2025-12-18T11:19:42.493753232Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_15_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": "df.schema()",
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"animal: String\n",
|
|
"age: Double\n",
|
|
"visits: Int\n",
|
|
"priority: String"
|
|
]
|
|
},
|
|
"execution_count": 3,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 3
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:43.024905933Z",
|
|
"start_time": "2025-12-18T11:19:42.687874922Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_16_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": "df.describe()",
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_3()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_3\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539268"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataFrame: rowsCount = 4, columnsCount = 14</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"name: String\">name</span>", children: [], rightAlign: false, values: ["animal","age","visits","priority"] }, \n",
|
|
"{ name: "<span title=\"type: String\">type</span>", children: [], rightAlign: false, values: ["String","Double","Int","String"] }, \n",
|
|
"{ name: "<span title=\"count: Int\">count</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">10</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">10</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">10</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">10</span></span>"] }, \n",
|
|
"{ name: "<span title=\"unique: Int\">unique</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">3</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">8</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2</span></span>"] }, \n",
|
|
"{ name: "<span title=\"nulls: Int\">nulls</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0</span></span>"] }, \n",
|
|
"{ name: "<span title=\"top: Comparable<*>\">top</span>", children: [], rightAlign: false, values: ["cat","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">1</span></span>","no"] }, \n",
|
|
"{ name: "<span title=\"freq: Int\">freq</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">4</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">4</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">6</span></span>"] }, \n",
|
|
"{ name: "<span title=\"mean: Double?\">mean</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"null\">null</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">1.9</span></span>","<span class=\"formatted\" title=\"\"><span class=\"null\">null</span></span>"] }, \n",
|
|
"{ name: "<span title=\"std: Double?\">std</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"null\">null</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.875595</span></span>","<span class=\"formatted\" title=\"\"><span class=\"null\">null</span></span>"] }, \n",
|
|
"{ name: "<span title=\"min: Comparable<*>\">min</span>", children: [], rightAlign: false, values: ["cat","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">1</span></span>","no"] }, \n",
|
|
"{ name: "<span title=\"p25: Comparable<*>\">p25</span>", children: [], rightAlign: false, values: ["cat","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">1.0</span></span>","no"] }, \n",
|
|
"{ name: "<span title=\"median: Comparable<*>\">median</span>", children: [], rightAlign: false, values: ["dog","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2.0</span></span>","no"] }, \n",
|
|
"{ name: "<span title=\"p75: Comparable<*>\">p75</span>", children: [], rightAlign: false, values: ["dog","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3.0</span></span>","yes"] }, \n",
|
|
"{ name: "<span title=\"max: Comparable<*>\">max</span>", children: [], rightAlign: false, values: ["snake","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3</span></span>","yes"] }, \n",
|
|
"], id: 486539268, rootId: 486539268, totalRows: 4 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539268) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_3() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_3\");\n",
|
|
" resize_iframe_out_3(elem);\n",
|
|
" setInterval(resize_iframe_out_3, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_3(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539269\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">name</th><th class=\"bottomBorder\" style=\"text-align:left\">type</th><th class=\"bottomBorder\" style=\"text-align:left\">count</th><th class=\"bottomBorder\" style=\"text-align:left\">unique</th><th class=\"bottomBorder\" style=\"text-align:left\">nulls</th><th class=\"bottomBorder\" style=\"text-align:left\">top</th><th class=\"bottomBorder\" style=\"text-align:left\">freq</th><th class=\"bottomBorder\" style=\"text-align:left\">mean</th><th class=\"bottomBorder\" style=\"text-align:left\">std</th><th class=\"bottomBorder\" style=\"text-align:left\">min</th><th class=\"bottomBorder\" style=\"text-align:left\">p25</th><th class=\"bottomBorder\" style=\"text-align:left\">median</th><th class=\"bottomBorder\" style=\"text-align:left\">p75</th><th class=\"bottomBorder\" style=\"text-align:left\">max</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">animal</td><td style=\"vertical-align:top\">String</td><td style=\"vertical-align:top\">10</td><td style=\"vertical-align:top\">3</td><td style=\"vertical-align:top\">0</td><td style=\"vertical-align:top\">cat</td><td style=\"vertical-align:top\">4</td><td style=\"vertical-align:top\">null</td><td style=\"vertical-align:top\">null</td><td style=\"vertical-align:top\">cat</td><td style=\"vertical-align:top\">cat</td><td style=\"vertical-align:top\">dog</td><td style=\"vertical-align:top\">dog</td><td style=\"vertical-align:top\">snake</td></tr><tr><td style=\"vertical-align:top\">age</td><td style=\"vertical-align:top\">Double</td><td style=\"vertical-align:top\">10</td><td style=\"vertical-align:top\">8</td><td style=\"vertical-align:top\">0</td><td style=\"vertical-align:top\">3.000000</td><td style=\"vertical-align:top\">2</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">NaN</td></tr><tr><td style=\"vertical-align:top\">visits</td><td style=\"vertical-align:top\">Int</td><td style=\"vertical-align:top\">10</td><td style=\"vertical-align:top\">3</td><td style=\"vertical-align:top\">0</td><td style=\"vertical-align:top\">1</td><td style=\"vertical-align:top\">4</td><td style=\"vertical-align:top\">1.900000</td><td style=\"vertical-align:top\">0.875595</td><td style=\"vertical-align:top\">1</td><td style=\"vertical-align:top\">1.000000</td><td style=\"vertical-align:top\">2.000000</td><td style=\"vertical-align:top\">3.000000</td><td style=\"vertical-align:top\">3</td></tr><tr><td style=\"vertical-align:top\">priority</td><td style=\"vertical-align:top\">String</td><td style=\"vertical-align:top\">10</td><td style=\"vertical-align:top\">2</td><td style=\"vertical-align:top\">0</td><td style=\"vertical-align:top\">no</td><td style=\"vertical-align:top\">6</td><td style=\"vertical-align:top\">null</td><td style=\"vertical-align:top\">null</td><td style=\"vertical-align:top\">no</td><td style=\"vertical-align:top\">no</td><td style=\"vertical-align:top\">no</td><td style=\"vertical-align:top\">yes</td><td style=\"vertical-align:top\">yes</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539269\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"name\",\"type\",\"count\",\"unique\",\"nulls\",\"top\",\"freq\",\"mean\",\"std\",\"min\",\"p25\",\"median\",\"p75\",\"max\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Comparable<*>\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double?\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double?\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Comparable<*>\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Comparable<*>\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Comparable<*>\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Comparable<*>\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Comparable<*>\"}],\"nrow\":4,\"ncol\":14,\"is_formatted\":false},\"kotlin_dataframe\":[{\"name\":\"animal\",\"type\":\"String\",\"count\":10,\"unique\":3,\"nulls\":0,\"top\":\"cat\",\"freq\":4,\"mean\":null,\"std\":null,\"min\":\"cat\",\"p25\":\"cat\",\"median\":\"dog\",\"p75\":\"dog\",\"max\":\"snake\"},{\"name\":\"age\",\"type\":\"Double\",\"count\":10,\"unique\":8,\"nulls\":0,\"top\":\"3.0\",\"freq\":2,\"mean\":NaN,\"std\":NaN,\"min\":\"NaN\",\"p25\":\"NaN\",\"median\":\"NaN\",\"p75\":\"NaN\",\"max\":\"NaN\"},{\"name\":\"visits\",\"type\":\"Int\",\"count\":10,\"unique\":3,\"nulls\":0,\"top\":\"1\",\"freq\":4,\"mean\":1.9,\"std\":0.8755950357709131,\"min\":\"1\",\"p25\":\"1.0\",\"median\":\"2.0\",\"p75\":\"3.0\",\"max\":\"3\"},{\"name\":\"priority\",\"type\":\"String\",\"count\":10,\"unique\":2,\"nulls\":0,\"top\":\"no\",\"freq\":6,\"mean\":null,\"std\":null,\"min\":\"no\",\"p25\":\"no\",\"median\":\"no\",\"p75\":\"yes\",\"max\":\"yes\"}]}"
|
|
},
|
|
"execution_count": 4,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 4
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": "**4.** Return the first 3 rows of the DataFrame df."
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:43.282299347Z",
|
|
"start_time": "2025-12-18T11:19:43.094411261Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_18_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"df[0 ..< 3] // df[0..2]\n",
|
|
"\n",
|
|
"// or equivalently\n",
|
|
"\n",
|
|
"df.head(3)\n",
|
|
"\n",
|
|
"// or\n",
|
|
"\n",
|
|
"df.take(3)"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_5()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_5\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539272"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataFrame: rowsCount = 3, columnsCount = 4</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"animal: String\">animal</span>", children: [], rightAlign: false, values: ["cat","cat","snake"] }, \n",
|
|
"{ name: "<span title=\"age: Double\">age</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">2.5</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.5</span></span>"] }, \n",
|
|
"{ name: "<span title=\"visits: Int\">visits</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">1</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2</span></span>"] }, \n",
|
|
"{ name: "<span title=\"priority: String\">priority</span>", children: [], rightAlign: false, values: ["yes","yes","no"] }, \n",
|
|
"], id: 486539272, rootId: 486539272, totalRows: 3 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539272) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_5() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_5\");\n",
|
|
" resize_iframe_out_5(elem);\n",
|
|
" setInterval(resize_iframe_out_5, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_5(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539273\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">animal</th><th class=\"bottomBorder\" style=\"text-align:left\">age</th><th class=\"bottomBorder\" style=\"text-align:left\">visits</th><th class=\"bottomBorder\" style=\"text-align:left\">priority</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">cat</td><td style=\"vertical-align:top\">2.500000</td><td style=\"vertical-align:top\">1</td><td style=\"vertical-align:top\">yes</td></tr><tr><td style=\"vertical-align:top\">cat</td><td style=\"vertical-align:top\">3.000000</td><td style=\"vertical-align:top\">3</td><td style=\"vertical-align:top\">yes</td></tr><tr><td style=\"vertical-align:top\">snake</td><td style=\"vertical-align:top\">0.500000</td><td style=\"vertical-align:top\">2</td><td style=\"vertical-align:top\">no</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539273\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"animal\",\"age\",\"visits\",\"priority\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"}],\"nrow\":3,\"ncol\":4,\"is_formatted\":false},\"kotlin_dataframe\":[{\"animal\":\"cat\",\"age\":2.5,\"visits\":1,\"priority\":\"yes\"},{\"animal\":\"cat\",\"age\":3.0,\"visits\":3,\"priority\":\"yes\"},{\"animal\":\"snake\",\"age\":0.5,\"visits\":2,\"priority\":\"no\"}]}"
|
|
},
|
|
"execution_count": 5,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 5
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": "**5.** Select \"animal\" and \"age\" columns from the DataFrame df."
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:43.547372659Z",
|
|
"start_time": "2025-12-18T11:19:43.339126731Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_20_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": "df.select { animal and age }",
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_7()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_7\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539276"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataFrame: rowsCount = 10, columnsCount = 2</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"animal: String\">animal</span>", children: [], rightAlign: false, values: ["cat","cat","snake","dog","dog","cat","snake","cat","dog","dog"] }, \n",
|
|
"{ name: "<span title=\"age: Double\">age</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">2.5</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.5</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">5.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">4.5</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">7.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3.0</span></span>"] }, \n",
|
|
"], id: 486539276, rootId: 486539276, totalRows: 10 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539276) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_7() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_7\");\n",
|
|
" resize_iframe_out_7(elem);\n",
|
|
" setInterval(resize_iframe_out_7, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_7(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539277\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">animal</th><th class=\"bottomBorder\" style=\"text-align:left\">age</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">cat</td><td style=\"vertical-align:top\">2.500000</td></tr><tr><td style=\"vertical-align:top\">cat</td><td style=\"vertical-align:top\">3.000000</td></tr><tr><td style=\"vertical-align:top\">snake</td><td style=\"vertical-align:top\">0.500000</td></tr><tr><td style=\"vertical-align:top\">dog</td><td style=\"vertical-align:top\">NaN</td></tr><tr><td style=\"vertical-align:top\">dog</td><td style=\"vertical-align:top\">5.000000</td></tr><tr><td style=\"vertical-align:top\">cat</td><td style=\"vertical-align:top\">2.000000</td></tr><tr><td style=\"vertical-align:top\">snake</td><td style=\"vertical-align:top\">4.500000</td></tr><tr><td style=\"vertical-align:top\">cat</td><td style=\"vertical-align:top\">NaN</td></tr><tr><td style=\"vertical-align:top\">dog</td><td style=\"vertical-align:top\">7.000000</td></tr><tr><td style=\"vertical-align:top\">dog</td><td style=\"vertical-align:top\">3.000000</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539277\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"animal\",\"age\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"}],\"nrow\":10,\"ncol\":2,\"is_formatted\":false},\"kotlin_dataframe\":[{\"animal\":\"cat\",\"age\":2.5},{\"animal\":\"cat\",\"age\":3.0},{\"animal\":\"snake\",\"age\":0.5},{\"animal\":\"dog\",\"age\":NaN},{\"animal\":\"dog\",\"age\":5.0},{\"animal\":\"cat\",\"age\":2.0},{\"animal\":\"snake\",\"age\":4.5},{\"animal\":\"cat\",\"age\":NaN},{\"animal\":\"dog\",\"age\":7.0},{\"animal\":\"dog\",\"age\":3.0}]}"
|
|
},
|
|
"execution_count": 6,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 6
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": "**6.** Select the data in rows [3, 4, 8] and in columns [\"animal\", \"age\"]."
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:43.840786386Z",
|
|
"start_time": "2025-12-18T11:19:43.614032321Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_22_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": "df[3, 4, 8].select { animal and age }",
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_9()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_9\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539280"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataFrame: rowsCount = 3, columnsCount = 2</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"animal: String\">animal</span>", children: [], rightAlign: false, values: ["dog","dog","dog"] }, \n",
|
|
"{ name: "<span title=\"age: Double\">age</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">5.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">7.0</span></span>"] }, \n",
|
|
"], id: 486539280, rootId: 486539280, totalRows: 3 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539280) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_9() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_9\");\n",
|
|
" resize_iframe_out_9(elem);\n",
|
|
" setInterval(resize_iframe_out_9, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_9(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539281\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">animal</th><th class=\"bottomBorder\" style=\"text-align:left\">age</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">dog</td><td style=\"vertical-align:top\">NaN</td></tr><tr><td style=\"vertical-align:top\">dog</td><td style=\"vertical-align:top\">5.000000</td></tr><tr><td style=\"vertical-align:top\">dog</td><td style=\"vertical-align:top\">7.000000</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539281\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"animal\",\"age\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"}],\"nrow\":3,\"ncol\":2,\"is_formatted\":false},\"kotlin_dataframe\":[{\"animal\":\"dog\",\"age\":NaN},{\"animal\":\"dog\",\"age\":5.0},{\"animal\":\"dog\",\"age\":7.0}]}"
|
|
},
|
|
"execution_count": 7,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 7
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": "**7.** Select only the rows where the number of visits is greater than 2."
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:44.130666181Z",
|
|
"start_time": "2025-12-18T11:19:43.890826650Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_24_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": "df.filter { visits > 2 }",
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_11()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_11\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539284"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataFrame: rowsCount = 3, columnsCount = 4</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"animal: String\">animal</span>", children: [], rightAlign: false, values: ["cat","dog","cat"] }, \n",
|
|
"{ name: "<span title=\"age: Double\">age</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">3.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2.0</span></span>"] }, \n",
|
|
"{ name: "<span title=\"visits: Int\">visits</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">3</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3</span></span>"] }, \n",
|
|
"{ name: "<span title=\"priority: String\">priority</span>", children: [], rightAlign: false, values: ["yes","yes","no"] }, \n",
|
|
"], id: 486539284, rootId: 486539284, totalRows: 3 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539284) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_11() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_11\");\n",
|
|
" resize_iframe_out_11(elem);\n",
|
|
" setInterval(resize_iframe_out_11, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_11(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539285\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">animal</th><th class=\"bottomBorder\" style=\"text-align:left\">age</th><th class=\"bottomBorder\" style=\"text-align:left\">visits</th><th class=\"bottomBorder\" style=\"text-align:left\">priority</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">cat</td><td style=\"vertical-align:top\">3.000000</td><td style=\"vertical-align:top\">3</td><td style=\"vertical-align:top\">yes</td></tr><tr><td style=\"vertical-align:top\">dog</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">3</td><td style=\"vertical-align:top\">yes</td></tr><tr><td style=\"vertical-align:top\">cat</td><td style=\"vertical-align:top\">2.000000</td><td style=\"vertical-align:top\">3</td><td style=\"vertical-align:top\">no</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539285\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"animal\",\"age\",\"visits\",\"priority\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"}],\"nrow\":3,\"ncol\":4,\"is_formatted\":false},\"kotlin_dataframe\":[{\"animal\":\"cat\",\"age\":3.0,\"visits\":3,\"priority\":\"yes\"},{\"animal\":\"dog\",\"age\":NaN,\"visits\":3,\"priority\":\"yes\"},{\"animal\":\"cat\",\"age\":2.0,\"visits\":3,\"priority\":\"no\"}]}"
|
|
},
|
|
"execution_count": 8,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 8
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": "**8.** Select the rows where the age is missing, i.e. it is NaN."
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:44.432826220Z",
|
|
"start_time": "2025-12-18T11:19:44.195451619Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_26_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": "df.filter { age.isNaN() }",
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_13()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_13\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539288"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataFrame: rowsCount = 2, columnsCount = 4</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"animal: String\">animal</span>", children: [], rightAlign: false, values: ["dog","cat"] }, \n",
|
|
"{ name: "<span title=\"age: Double\">age</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>"] }, \n",
|
|
"{ name: "<span title=\"visits: Int\">visits</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">3</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">1</span></span>"] }, \n",
|
|
"{ name: "<span title=\"priority: String\">priority</span>", children: [], rightAlign: false, values: ["yes","yes"] }, \n",
|
|
"], id: 486539288, rootId: 486539288, totalRows: 2 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539288) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_13() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_13\");\n",
|
|
" resize_iframe_out_13(elem);\n",
|
|
" setInterval(resize_iframe_out_13, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_13(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539289\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">animal</th><th class=\"bottomBorder\" style=\"text-align:left\">age</th><th class=\"bottomBorder\" style=\"text-align:left\">visits</th><th class=\"bottomBorder\" style=\"text-align:left\">priority</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">dog</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">3</td><td style=\"vertical-align:top\">yes</td></tr><tr><td style=\"vertical-align:top\">cat</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">1</td><td style=\"vertical-align:top\">yes</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539289\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"animal\",\"age\",\"visits\",\"priority\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"}],\"nrow\":2,\"ncol\":4,\"is_formatted\":false},\"kotlin_dataframe\":[{\"animal\":\"dog\",\"age\":NaN,\"visits\":3,\"priority\":\"yes\"},{\"animal\":\"cat\",\"age\":NaN,\"visits\":1,\"priority\":\"yes\"}]}"
|
|
},
|
|
"execution_count": 9,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 9
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": "**9.** Select the rows where the animal is a cat and the age is less than 3."
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:44.731860002Z",
|
|
"start_time": "2025-12-18T11:19:44.516203139Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_28_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": "df.filter { animal == \"cat\" && age < 3 }",
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_15()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_15\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539292"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataFrame: rowsCount = 2, columnsCount = 4</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"animal: String\">animal</span>", children: [], rightAlign: false, values: ["cat","cat"] }, \n",
|
|
"{ name: "<span title=\"age: Double\">age</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">2.5</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2.0</span></span>"] }, \n",
|
|
"{ name: "<span title=\"visits: Int\">visits</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">1</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3</span></span>"] }, \n",
|
|
"{ name: "<span title=\"priority: String\">priority</span>", children: [], rightAlign: false, values: ["yes","no"] }, \n",
|
|
"], id: 486539292, rootId: 486539292, totalRows: 2 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539292) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_15() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_15\");\n",
|
|
" resize_iframe_out_15(elem);\n",
|
|
" setInterval(resize_iframe_out_15, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_15(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539293\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">animal</th><th class=\"bottomBorder\" style=\"text-align:left\">age</th><th class=\"bottomBorder\" style=\"text-align:left\">visits</th><th class=\"bottomBorder\" style=\"text-align:left\">priority</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">cat</td><td style=\"vertical-align:top\">2.500000</td><td style=\"vertical-align:top\">1</td><td style=\"vertical-align:top\">yes</td></tr><tr><td style=\"vertical-align:top\">cat</td><td style=\"vertical-align:top\">2.000000</td><td style=\"vertical-align:top\">3</td><td style=\"vertical-align:top\">no</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539293\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"animal\",\"age\",\"visits\",\"priority\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"}],\"nrow\":2,\"ncol\":4,\"is_formatted\":false},\"kotlin_dataframe\":[{\"animal\":\"cat\",\"age\":2.5,\"visits\":1,\"priority\":\"yes\"},{\"animal\":\"cat\",\"age\":2.0,\"visits\":3,\"priority\":\"no\"}]}"
|
|
},
|
|
"execution_count": 10,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 10
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": "**10.** Select the rows where age is between 2 and 4 (inclusive)."
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:45.067952922Z",
|
|
"start_time": "2025-12-18T11:19:44.828539799Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_30_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": "df.filter { age in 2.0..4.0 }",
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_17()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_17\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539296"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataFrame: rowsCount = 4, columnsCount = 4</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"animal: String\">animal</span>", children: [], rightAlign: false, values: ["cat","cat","cat","dog"] }, \n",
|
|
"{ name: "<span title=\"age: Double\">age</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">2.5</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3.0</span></span>"] }, \n",
|
|
"{ name: "<span title=\"visits: Int\">visits</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">1</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">1</span></span>"] }, \n",
|
|
"{ name: "<span title=\"priority: String\">priority</span>", children: [], rightAlign: false, values: ["yes","yes","no","no"] }, \n",
|
|
"], id: 486539296, rootId: 486539296, totalRows: 4 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539296) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_17() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_17\");\n",
|
|
" resize_iframe_out_17(elem);\n",
|
|
" setInterval(resize_iframe_out_17, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_17(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539297\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">animal</th><th class=\"bottomBorder\" style=\"text-align:left\">age</th><th class=\"bottomBorder\" style=\"text-align:left\">visits</th><th class=\"bottomBorder\" style=\"text-align:left\">priority</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">cat</td><td style=\"vertical-align:top\">2.500000</td><td style=\"vertical-align:top\">1</td><td style=\"vertical-align:top\">yes</td></tr><tr><td style=\"vertical-align:top\">cat</td><td style=\"vertical-align:top\">3.000000</td><td style=\"vertical-align:top\">3</td><td style=\"vertical-align:top\">yes</td></tr><tr><td style=\"vertical-align:top\">cat</td><td style=\"vertical-align:top\">2.000000</td><td style=\"vertical-align:top\">3</td><td style=\"vertical-align:top\">no</td></tr><tr><td style=\"vertical-align:top\">dog</td><td style=\"vertical-align:top\">3.000000</td><td style=\"vertical-align:top\">1</td><td style=\"vertical-align:top\">no</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539297\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"animal\",\"age\",\"visits\",\"priority\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"}],\"nrow\":4,\"ncol\":4,\"is_formatted\":false},\"kotlin_dataframe\":[{\"animal\":\"cat\",\"age\":2.5,\"visits\":1,\"priority\":\"yes\"},{\"animal\":\"cat\",\"age\":3.0,\"visits\":3,\"priority\":\"yes\"},{\"animal\":\"cat\",\"age\":2.0,\"visits\":3,\"priority\":\"no\"},{\"animal\":\"dog\",\"age\":3.0,\"visits\":1,\"priority\":\"no\"}]}"
|
|
},
|
|
"execution_count": 11,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 11
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": "**11.** Change the age in row 5 to 1.5"
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:45.321374555Z",
|
|
"start_time": "2025-12-18T11:19:45.119529698Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_32_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": "df.update { age }.at(5).with { 1.5 }",
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_19()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_19\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539300"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataFrame: rowsCount = 10, columnsCount = 4</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"animal: String\">animal</span>", children: [], rightAlign: false, values: ["cat","cat","snake","dog","dog","cat","snake","cat","dog","dog"] }, \n",
|
|
"{ name: "<span title=\"age: Double\">age</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">2.5</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.5</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">5.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">1.5</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">4.5</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">7.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3.0</span></span>"] }, \n",
|
|
"{ name: "<span title=\"visits: Int\">visits</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">1</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">1</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">1</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">1</span></span>"] }, \n",
|
|
"{ name: "<span title=\"priority: String\">priority</span>", children: [], rightAlign: false, values: ["yes","yes","no","yes","no","no","no","yes","no","no"] }, \n",
|
|
"], id: 486539300, rootId: 486539300, totalRows: 10 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539300) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_19() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_19\");\n",
|
|
" resize_iframe_out_19(elem);\n",
|
|
" setInterval(resize_iframe_out_19, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_19(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539301\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">animal</th><th class=\"bottomBorder\" style=\"text-align:left\">age</th><th class=\"bottomBorder\" style=\"text-align:left\">visits</th><th class=\"bottomBorder\" style=\"text-align:left\">priority</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">cat</td><td style=\"vertical-align:top\">2.500000</td><td style=\"vertical-align:top\">1</td><td style=\"vertical-align:top\">yes</td></tr><tr><td style=\"vertical-align:top\">cat</td><td style=\"vertical-align:top\">3.000000</td><td style=\"vertical-align:top\">3</td><td style=\"vertical-align:top\">yes</td></tr><tr><td style=\"vertical-align:top\">snake</td><td style=\"vertical-align:top\">0.500000</td><td style=\"vertical-align:top\">2</td><td style=\"vertical-align:top\">no</td></tr><tr><td style=\"vertical-align:top\">dog</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">3</td><td style=\"vertical-align:top\">yes</td></tr><tr><td style=\"vertical-align:top\">dog</td><td style=\"vertical-align:top\">5.000000</td><td style=\"vertical-align:top\">2</td><td style=\"vertical-align:top\">no</td></tr><tr><td style=\"vertical-align:top\">cat</td><td style=\"vertical-align:top\">1.500000</td><td style=\"vertical-align:top\">3</td><td style=\"vertical-align:top\">no</td></tr><tr><td style=\"vertical-align:top\">snake</td><td style=\"vertical-align:top\">4.500000</td><td style=\"vertical-align:top\">1</td><td style=\"vertical-align:top\">no</td></tr><tr><td style=\"vertical-align:top\">cat</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">1</td><td style=\"vertical-align:top\">yes</td></tr><tr><td style=\"vertical-align:top\">dog</td><td style=\"vertical-align:top\">7.000000</td><td style=\"vertical-align:top\">2</td><td style=\"vertical-align:top\">no</td></tr><tr><td style=\"vertical-align:top\">dog</td><td style=\"vertical-align:top\">3.000000</td><td style=\"vertical-align:top\">1</td><td style=\"vertical-align:top\">no</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539301\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"animal\",\"age\",\"visits\",\"priority\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"}],\"nrow\":10,\"ncol\":4,\"is_formatted\":false},\"kotlin_dataframe\":[{\"animal\":\"cat\",\"age\":2.5,\"visits\":1,\"priority\":\"yes\"},{\"animal\":\"cat\",\"age\":3.0,\"visits\":3,\"priority\":\"yes\"},{\"animal\":\"snake\",\"age\":0.5,\"visits\":2,\"priority\":\"no\"},{\"animal\":\"dog\",\"age\":NaN,\"visits\":3,\"priority\":\"yes\"},{\"animal\":\"dog\",\"age\":5.0,\"visits\":2,\"priority\":\"no\"},{\"animal\":\"cat\",\"age\":1.5,\"visits\":3,\"priority\":\"no\"},{\"animal\":\"snake\",\"age\":4.5,\"visits\":1,\"priority\":\"no\"},{\"animal\":\"cat\",\"age\":NaN,\"visits\":1,\"priority\":\"yes\"},{\"animal\":\"dog\",\"age\":7.0,\"visits\":2,\"priority\":\"no\"},{\"animal\":\"dog\",\"age\":3.0,\"visits\":1,\"priority\":\"no\"}]}"
|
|
},
|
|
"execution_count": 12,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 12
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": "**12.** Calculate the sum of all visits in df (i.e. the total number of visits)."
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:45.509286538Z",
|
|
"start_time": "2025-12-18T11:19:45.377472164Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_34_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": "df.visits.sum()",
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"19"
|
|
]
|
|
},
|
|
"execution_count": 13,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 13
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": "**13.** Calculate the mean age for each different animal in df."
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:45.733964446Z",
|
|
"start_time": "2025-12-18T11:19:45.522355616Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_35_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": "df.groupBy { animal }.mean { age }",
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_21()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_21\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539304"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataFrame: rowsCount = 3, columnsCount = 2</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"animal: String\">animal</span>", children: [], rightAlign: false, values: ["cat","snake","dog"] }, \n",
|
|
"{ name: "<span title=\"age: Double\">age</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2.5</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>"] }, \n",
|
|
"], id: 486539304, rootId: 486539304, totalRows: 3 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539304) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_21() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_21\");\n",
|
|
" resize_iframe_out_21(elem);\n",
|
|
" setInterval(resize_iframe_out_21, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_21(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539305\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">animal</th><th class=\"bottomBorder\" style=\"text-align:left\">age</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">cat</td><td style=\"vertical-align:top\">NaN</td></tr><tr><td style=\"vertical-align:top\">snake</td><td style=\"vertical-align:top\">2.500000</td></tr><tr><td style=\"vertical-align:top\">dog</td><td style=\"vertical-align:top\">NaN</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539305\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"animal\",\"age\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"}],\"nrow\":3,\"ncol\":2,\"is_formatted\":false},\"kotlin_dataframe\":[{\"animal\":\"cat\",\"age\":NaN},{\"animal\":\"snake\",\"age\":2.5},{\"animal\":\"dog\",\"age\":NaN}]}"
|
|
},
|
|
"execution_count": 14,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 14
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": "**14.** Append a new row to df with your choice of values for each column. Then delete that row to return the original DataFrame."
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:45.965591312Z",
|
|
"start_time": "2025-12-18T11:19:45.805912316Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_37_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"val modifiedDf = df.append(\"dog\", 5.5, 2, \"no\")\n",
|
|
"modifiedDf.dropLast()"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_23()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_23\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539308"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataFrame: rowsCount = 10, columnsCount = 4</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"animal: String\">animal</span>", children: [], rightAlign: false, values: ["cat","cat","snake","dog","dog","cat","snake","cat","dog","dog"] }, \n",
|
|
"{ name: "<span title=\"age: Double\">age</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">2.5</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.5</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">5.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">4.5</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">7.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3.0</span></span>"] }, \n",
|
|
"{ name: "<span title=\"visits: Int\">visits</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">1</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">1</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">1</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">1</span></span>"] }, \n",
|
|
"{ name: "<span title=\"priority: String\">priority</span>", children: [], rightAlign: false, values: ["yes","yes","no","yes","no","no","no","yes","no","no"] }, \n",
|
|
"], id: 486539308, rootId: 486539308, totalRows: 10 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539308) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_23() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_23\");\n",
|
|
" resize_iframe_out_23(elem);\n",
|
|
" setInterval(resize_iframe_out_23, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_23(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539309\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">animal</th><th class=\"bottomBorder\" style=\"text-align:left\">age</th><th class=\"bottomBorder\" style=\"text-align:left\">visits</th><th class=\"bottomBorder\" style=\"text-align:left\">priority</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">cat</td><td style=\"vertical-align:top\">2.500000</td><td style=\"vertical-align:top\">1</td><td style=\"vertical-align:top\">yes</td></tr><tr><td style=\"vertical-align:top\">cat</td><td style=\"vertical-align:top\">3.000000</td><td style=\"vertical-align:top\">3</td><td style=\"vertical-align:top\">yes</td></tr><tr><td style=\"vertical-align:top\">snake</td><td style=\"vertical-align:top\">0.500000</td><td style=\"vertical-align:top\">2</td><td style=\"vertical-align:top\">no</td></tr><tr><td style=\"vertical-align:top\">dog</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">3</td><td style=\"vertical-align:top\">yes</td></tr><tr><td style=\"vertical-align:top\">dog</td><td style=\"vertical-align:top\">5.000000</td><td style=\"vertical-align:top\">2</td><td style=\"vertical-align:top\">no</td></tr><tr><td style=\"vertical-align:top\">cat</td><td style=\"vertical-align:top\">2.000000</td><td style=\"vertical-align:top\">3</td><td style=\"vertical-align:top\">no</td></tr><tr><td style=\"vertical-align:top\">snake</td><td style=\"vertical-align:top\">4.500000</td><td style=\"vertical-align:top\">1</td><td style=\"vertical-align:top\">no</td></tr><tr><td style=\"vertical-align:top\">cat</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">1</td><td style=\"vertical-align:top\">yes</td></tr><tr><td style=\"vertical-align:top\">dog</td><td style=\"vertical-align:top\">7.000000</td><td style=\"vertical-align:top\">2</td><td style=\"vertical-align:top\">no</td></tr><tr><td style=\"vertical-align:top\">dog</td><td style=\"vertical-align:top\">3.000000</td><td style=\"vertical-align:top\">1</td><td style=\"vertical-align:top\">no</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539309\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"animal\",\"age\",\"visits\",\"priority\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"}],\"nrow\":10,\"ncol\":4,\"is_formatted\":false},\"kotlin_dataframe\":[{\"animal\":\"cat\",\"age\":2.5,\"visits\":1,\"priority\":\"yes\"},{\"animal\":\"cat\",\"age\":3.0,\"visits\":3,\"priority\":\"yes\"},{\"animal\":\"snake\",\"age\":0.5,\"visits\":2,\"priority\":\"no\"},{\"animal\":\"dog\",\"age\":NaN,\"visits\":3,\"priority\":\"yes\"},{\"animal\":\"dog\",\"age\":5.0,\"visits\":2,\"priority\":\"no\"},{\"animal\":\"cat\",\"age\":2.0,\"visits\":3,\"priority\":\"no\"},{\"animal\":\"snake\",\"age\":4.5,\"visits\":1,\"priority\":\"no\"},{\"animal\":\"cat\",\"age\":NaN,\"visits\":1,\"priority\":\"yes\"},{\"animal\":\"dog\",\"age\":7.0,\"visits\":2,\"priority\":\"no\"},{\"animal\":\"dog\",\"age\":3.0,\"visits\":1,\"priority\":\"no\"}]}"
|
|
},
|
|
"execution_count": 15,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 15
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": "**15.** Count the number of each type of animal in df."
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:46.367888372Z",
|
|
"start_time": "2025-12-18T11:19:46.058158419Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_39_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": "df.groupBy { animal }.count()",
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_25()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_25\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539312"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataFrame: rowsCount = 3, columnsCount = 2</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"animal: String\">animal</span>", children: [], rightAlign: false, values: ["cat","snake","dog"] }, \n",
|
|
"{ name: "<span title=\"count: Int\">count</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">4</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">4</span></span>"] }, \n",
|
|
"], id: 486539312, rootId: 486539312, totalRows: 3 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539312) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_25() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_25\");\n",
|
|
" resize_iframe_out_25(elem);\n",
|
|
" setInterval(resize_iframe_out_25, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_25(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539313\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">animal</th><th class=\"bottomBorder\" style=\"text-align:left\">count</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">cat</td><td style=\"vertical-align:top\">4</td></tr><tr><td style=\"vertical-align:top\">snake</td><td style=\"vertical-align:top\">2</td></tr><tr><td style=\"vertical-align:top\">dog</td><td style=\"vertical-align:top\">4</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539313\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"animal\",\"count\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"}],\"nrow\":3,\"ncol\":2,\"is_formatted\":false},\"kotlin_dataframe\":[{\"animal\":\"cat\",\"count\":4},{\"animal\":\"snake\",\"count\":2},{\"animal\":\"dog\",\"count\":4}]}"
|
|
},
|
|
"execution_count": 16,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 16
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": "**16.** Sort df first by the values in the 'age' in descending order, then by the value in the 'visits' column in ascending order."
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:46.660623189Z",
|
|
"start_time": "2025-12-18T11:19:46.449941128Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_41_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": "df.sortBy { age.desc() and visits }",
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_27()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_27\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539316"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataFrame: rowsCount = 10, columnsCount = 4</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"animal: String\">animal</span>", children: [], rightAlign: false, values: ["cat","dog","dog","dog","snake","dog","cat","cat","cat","snake"] }, \n",
|
|
"{ name: "<span title=\"age: Double\">age</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">7.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">5.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">4.5</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2.5</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.5</span></span>"] }, \n",
|
|
"{ name: "<span title=\"visits: Int\">visits</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">1</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">1</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">1</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">1</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2</span></span>"] }, \n",
|
|
"{ name: "<span title=\"priority: String\">priority</span>", children: [], rightAlign: false, values: ["yes","yes","no","no","no","no","yes","yes","no","no"] }, \n",
|
|
"], id: 486539316, rootId: 486539316, totalRows: 10 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539316) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_27() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_27\");\n",
|
|
" resize_iframe_out_27(elem);\n",
|
|
" setInterval(resize_iframe_out_27, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_27(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539317\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">animal</th><th class=\"bottomBorder\" style=\"text-align:left\">age</th><th class=\"bottomBorder\" style=\"text-align:left\">visits</th><th class=\"bottomBorder\" style=\"text-align:left\">priority</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">cat</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">1</td><td style=\"vertical-align:top\">yes</td></tr><tr><td style=\"vertical-align:top\">dog</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">3</td><td style=\"vertical-align:top\">yes</td></tr><tr><td style=\"vertical-align:top\">dog</td><td style=\"vertical-align:top\">7.000000</td><td style=\"vertical-align:top\">2</td><td style=\"vertical-align:top\">no</td></tr><tr><td style=\"vertical-align:top\">dog</td><td style=\"vertical-align:top\">5.000000</td><td style=\"vertical-align:top\">2</td><td style=\"vertical-align:top\">no</td></tr><tr><td style=\"vertical-align:top\">snake</td><td style=\"vertical-align:top\">4.500000</td><td style=\"vertical-align:top\">1</td><td style=\"vertical-align:top\">no</td></tr><tr><td style=\"vertical-align:top\">dog</td><td style=\"vertical-align:top\">3.000000</td><td style=\"vertical-align:top\">1</td><td style=\"vertical-align:top\">no</td></tr><tr><td style=\"vertical-align:top\">cat</td><td style=\"vertical-align:top\">3.000000</td><td style=\"vertical-align:top\">3</td><td style=\"vertical-align:top\">yes</td></tr><tr><td style=\"vertical-align:top\">cat</td><td style=\"vertical-align:top\">2.500000</td><td style=\"vertical-align:top\">1</td><td style=\"vertical-align:top\">yes</td></tr><tr><td style=\"vertical-align:top\">cat</td><td style=\"vertical-align:top\">2.000000</td><td style=\"vertical-align:top\">3</td><td style=\"vertical-align:top\">no</td></tr><tr><td style=\"vertical-align:top\">snake</td><td style=\"vertical-align:top\">0.500000</td><td style=\"vertical-align:top\">2</td><td style=\"vertical-align:top\">no</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539317\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"animal\",\"age\",\"visits\",\"priority\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"}],\"nrow\":10,\"ncol\":4,\"is_formatted\":false},\"kotlin_dataframe\":[{\"animal\":\"cat\",\"age\":NaN,\"visits\":1,\"priority\":\"yes\"},{\"animal\":\"dog\",\"age\":NaN,\"visits\":3,\"priority\":\"yes\"},{\"animal\":\"dog\",\"age\":7.0,\"visits\":2,\"priority\":\"no\"},{\"animal\":\"dog\",\"age\":5.0,\"visits\":2,\"priority\":\"no\"},{\"animal\":\"snake\",\"age\":4.5,\"visits\":1,\"priority\":\"no\"},{\"animal\":\"dog\",\"age\":3.0,\"visits\":1,\"priority\":\"no\"},{\"animal\":\"cat\",\"age\":3.0,\"visits\":3,\"priority\":\"yes\"},{\"animal\":\"cat\",\"age\":2.5,\"visits\":1,\"priority\":\"yes\"},{\"animal\":\"cat\",\"age\":2.0,\"visits\":3,\"priority\":\"no\"},{\"animal\":\"snake\",\"age\":0.5,\"visits\":2,\"priority\":\"no\"}]}"
|
|
},
|
|
"execution_count": 17,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 17
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": "**17.** The 'priority' column contains the values 'yes' and 'no'. Replace this column with a column of boolean values: 'yes' should be True and 'no' should be False."
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:46.937073806Z",
|
|
"start_time": "2025-12-18T11:19:46.722579483Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_43_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": "df.convert { priority }.with { it == \"yes\" }",
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_29()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_29\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539320"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataFrame: rowsCount = 10, columnsCount = 4</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"animal: String\">animal</span>", children: [], rightAlign: false, values: ["cat","cat","snake","dog","dog","cat","snake","cat","dog","dog"] }, \n",
|
|
"{ name: "<span title=\"age: Double\">age</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">2.5</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.5</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">5.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">4.5</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">7.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3.0</span></span>"] }, \n",
|
|
"{ name: "<span title=\"visits: Int\">visits</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">1</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">1</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">1</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">1</span></span>"] }, \n",
|
|
"{ name: "<span title=\"priority: Boolean\">priority</span>", children: [], rightAlign: false, values: ["true","true","false","true","false","false","false","true","false","false"] }, \n",
|
|
"], id: 486539320, rootId: 486539320, totalRows: 10 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539320) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_29() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_29\");\n",
|
|
" resize_iframe_out_29(elem);\n",
|
|
" setInterval(resize_iframe_out_29, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_29(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539321\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">animal</th><th class=\"bottomBorder\" style=\"text-align:left\">age</th><th class=\"bottomBorder\" style=\"text-align:left\">visits</th><th class=\"bottomBorder\" style=\"text-align:left\">priority</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">cat</td><td style=\"vertical-align:top\">2.500000</td><td style=\"vertical-align:top\">1</td><td style=\"vertical-align:top\">true</td></tr><tr><td style=\"vertical-align:top\">cat</td><td style=\"vertical-align:top\">3.000000</td><td style=\"vertical-align:top\">3</td><td style=\"vertical-align:top\">true</td></tr><tr><td style=\"vertical-align:top\">snake</td><td style=\"vertical-align:top\">0.500000</td><td style=\"vertical-align:top\">2</td><td style=\"vertical-align:top\">false</td></tr><tr><td style=\"vertical-align:top\">dog</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">3</td><td style=\"vertical-align:top\">true</td></tr><tr><td style=\"vertical-align:top\">dog</td><td style=\"vertical-align:top\">5.000000</td><td style=\"vertical-align:top\">2</td><td style=\"vertical-align:top\">false</td></tr><tr><td style=\"vertical-align:top\">cat</td><td style=\"vertical-align:top\">2.000000</td><td style=\"vertical-align:top\">3</td><td style=\"vertical-align:top\">false</td></tr><tr><td style=\"vertical-align:top\">snake</td><td style=\"vertical-align:top\">4.500000</td><td style=\"vertical-align:top\">1</td><td style=\"vertical-align:top\">false</td></tr><tr><td style=\"vertical-align:top\">cat</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">1</td><td style=\"vertical-align:top\">true</td></tr><tr><td style=\"vertical-align:top\">dog</td><td style=\"vertical-align:top\">7.000000</td><td style=\"vertical-align:top\">2</td><td style=\"vertical-align:top\">false</td></tr><tr><td style=\"vertical-align:top\">dog</td><td style=\"vertical-align:top\">3.000000</td><td style=\"vertical-align:top\">1</td><td style=\"vertical-align:top\">false</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539321\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"animal\",\"age\",\"visits\",\"priority\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Boolean\"}],\"nrow\":10,\"ncol\":4,\"is_formatted\":false},\"kotlin_dataframe\":[{\"animal\":\"cat\",\"age\":2.5,\"visits\":1,\"priority\":true},{\"animal\":\"cat\",\"age\":3.0,\"visits\":3,\"priority\":true},{\"animal\":\"snake\",\"age\":0.5,\"visits\":2,\"priority\":false},{\"animal\":\"dog\",\"age\":NaN,\"visits\":3,\"priority\":true},{\"animal\":\"dog\",\"age\":5.0,\"visits\":2,\"priority\":false},{\"animal\":\"cat\",\"age\":2.0,\"visits\":3,\"priority\":false},{\"animal\":\"snake\",\"age\":4.5,\"visits\":1,\"priority\":false},{\"animal\":\"cat\",\"age\":NaN,\"visits\":1,\"priority\":true},{\"animal\":\"dog\",\"age\":7.0,\"visits\":2,\"priority\":false},{\"animal\":\"dog\",\"age\":3.0,\"visits\":1,\"priority\":false}]}"
|
|
},
|
|
"execution_count": 18,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 18
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": "**18.** In the 'animal' column, change the 'dog' entries to 'corgi'."
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:47.183097405Z",
|
|
"start_time": "2025-12-18T11:19:46.992589282Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_45_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": "df.update { animal }.where { it == \"dog\" }.with { \"corgi\" }",
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_31()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_31\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539324"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataFrame: rowsCount = 10, columnsCount = 4</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"animal: String\">animal</span>", children: [], rightAlign: false, values: ["cat","cat","snake","corgi","corgi","cat","snake","cat","corgi","corgi"] }, \n",
|
|
"{ name: "<span title=\"age: Double\">age</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">2.5</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.5</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">5.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">4.5</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">7.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3.0</span></span>"] }, \n",
|
|
"{ name: "<span title=\"visits: Int\">visits</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">1</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">1</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">1</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">1</span></span>"] }, \n",
|
|
"{ name: "<span title=\"priority: String\">priority</span>", children: [], rightAlign: false, values: ["yes","yes","no","yes","no","no","no","yes","no","no"] }, \n",
|
|
"], id: 486539324, rootId: 486539324, totalRows: 10 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539324) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_31() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_31\");\n",
|
|
" resize_iframe_out_31(elem);\n",
|
|
" setInterval(resize_iframe_out_31, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_31(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539325\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">animal</th><th class=\"bottomBorder\" style=\"text-align:left\">age</th><th class=\"bottomBorder\" style=\"text-align:left\">visits</th><th class=\"bottomBorder\" style=\"text-align:left\">priority</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">cat</td><td style=\"vertical-align:top\">2.500000</td><td style=\"vertical-align:top\">1</td><td style=\"vertical-align:top\">yes</td></tr><tr><td style=\"vertical-align:top\">cat</td><td style=\"vertical-align:top\">3.000000</td><td style=\"vertical-align:top\">3</td><td style=\"vertical-align:top\">yes</td></tr><tr><td style=\"vertical-align:top\">snake</td><td style=\"vertical-align:top\">0.500000</td><td style=\"vertical-align:top\">2</td><td style=\"vertical-align:top\">no</td></tr><tr><td style=\"vertical-align:top\">corgi</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">3</td><td style=\"vertical-align:top\">yes</td></tr><tr><td style=\"vertical-align:top\">corgi</td><td style=\"vertical-align:top\">5.000000</td><td style=\"vertical-align:top\">2</td><td style=\"vertical-align:top\">no</td></tr><tr><td style=\"vertical-align:top\">cat</td><td style=\"vertical-align:top\">2.000000</td><td style=\"vertical-align:top\">3</td><td style=\"vertical-align:top\">no</td></tr><tr><td style=\"vertical-align:top\">snake</td><td style=\"vertical-align:top\">4.500000</td><td style=\"vertical-align:top\">1</td><td style=\"vertical-align:top\">no</td></tr><tr><td style=\"vertical-align:top\">cat</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">1</td><td style=\"vertical-align:top\">yes</td></tr><tr><td style=\"vertical-align:top\">corgi</td><td style=\"vertical-align:top\">7.000000</td><td style=\"vertical-align:top\">2</td><td style=\"vertical-align:top\">no</td></tr><tr><td style=\"vertical-align:top\">corgi</td><td style=\"vertical-align:top\">3.000000</td><td style=\"vertical-align:top\">1</td><td style=\"vertical-align:top\">no</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539325\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"animal\",\"age\",\"visits\",\"priority\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"}],\"nrow\":10,\"ncol\":4,\"is_formatted\":false},\"kotlin_dataframe\":[{\"animal\":\"cat\",\"age\":2.5,\"visits\":1,\"priority\":\"yes\"},{\"animal\":\"cat\",\"age\":3.0,\"visits\":3,\"priority\":\"yes\"},{\"animal\":\"snake\",\"age\":0.5,\"visits\":2,\"priority\":\"no\"},{\"animal\":\"corgi\",\"age\":NaN,\"visits\":3,\"priority\":\"yes\"},{\"animal\":\"corgi\",\"age\":5.0,\"visits\":2,\"priority\":\"no\"},{\"animal\":\"cat\",\"age\":2.0,\"visits\":3,\"priority\":\"no\"},{\"animal\":\"snake\",\"age\":4.5,\"visits\":1,\"priority\":\"no\"},{\"animal\":\"cat\",\"age\":NaN,\"visits\":1,\"priority\":\"yes\"},{\"animal\":\"corgi\",\"age\":7.0,\"visits\":2,\"priority\":\"no\"},{\"animal\":\"corgi\",\"age\":3.0,\"visits\":1,\"priority\":\"no\"}]}"
|
|
},
|
|
"execution_count": 19,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 19
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"**19.** For each animal type and each number of visits, find the mean age.\n",
|
|
"\n",
|
|
"In other words, each row should be an animal, there should be a column for each of the number of visits and the values should be the mean ages."
|
|
]
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:47.538227593Z",
|
|
"start_time": "2025-12-18T11:19:47.243994037Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_47_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": "df.pivot { visits }.groupBy { animal }.mean(skipNaN = true) { age }",
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_33()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_33\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539328"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataFrame: rowsCount = 3, columnsCount = 2</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"animal: String\">animal</span>", children: [], rightAlign: false, values: ["cat","snake","dog"] }, \n",
|
|
"{ name: "<span title=\"1: Double\">1</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">2.5</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">4.5</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3.0</span></span>"] }, \n",
|
|
"{ name: "<span title=\"3: Double?\">3</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">2.5</span></span>","<span class=\"formatted\" title=\"\"><span class=\"null\">null</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>"] }, \n",
|
|
"{ name: "<span title=\"2: Double?\">2</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"null\">null</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.5</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">6.0</span></span>"] }, \n",
|
|
"{ name: "<span title=\"visits: DataRow<*>\">visits</span>", children: [1, 2, 3], rightAlign: false, values: ["<span class=\"formatted\" title=\"1: 2.5\n3: 2.5\"><span class=\"structural\">{ </span><span class=\"structural\">1: </span><span class=\"numbers\">2.5</span><span class=\"structural\">, </span><span class=\"structural\">3: </span><span class=\"numbers\">2.5</span><span class=\"structural\"> }</span></span>","<span class=\"formatted\" title=\"1: 4.5\n2: 0.5\"><span class=\"structural\">{ </span><span class=\"structural\">1: </span><span class=\"numbers\">4.5</span><span class=\"structural\">, </span><span class=\"structural\">2: </span><span class=\"numbers\">0.5</span><span class=\"structural\"> }</span></span>","<span class=\"formatted\" title=\"1: 3.0\n3: NaN\n2: 6.0\"><span class=\"structural\">{ </span><span class=\"structural\">1: </span><span class=\"numbers\">3.0</span><span class=\"structural\">, </span><span class=\"structural\">3: </span><span class=\"numbers\">NaN</span><span class=\"structural\">, </span><span class=\"structural\">2: </span><span class=\"numbers\">6.0</span><span class=\"structural\"> }</span></span>"] }, \n",
|
|
"], id: 486539328, rootId: 486539328, totalRows: 3 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539328) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_33() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_33\");\n",
|
|
" resize_iframe_out_33(elem);\n",
|
|
" setInterval(resize_iframe_out_33, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_33(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539329\"><thead><tr><th class=\"rightBorder\" style=\"text-align:left\">animal</th><th class=\"rightBorder leftBorder\" style=\"text-align:left\">visits</th><th style=\"text-align:left\"></th><th style=\"text-align:left\"></th></tr><tr><th class=\"bottomBorder rightBorder\" style=\"text-align:left\"></th><th class=\"bottomBorder rightBorder leftBorder\" style=\"text-align:left\">1</th><th class=\"bottomBorder\" style=\"text-align:left\">3</th><th class=\"bottomBorder\" style=\"text-align:left\">2</th></tr></thead><tbody><tr><td class=\"rightBorder\" style=\"vertical-align:top\">cat</td><td class=\"rightBorder leftBorder\" style=\"vertical-align:top\">2.500000</td><td style=\"vertical-align:top\">2.500000</td><td style=\"vertical-align:top\">null</td></tr><tr><td class=\"rightBorder\" style=\"vertical-align:top\">snake</td><td class=\"rightBorder leftBorder\" style=\"vertical-align:top\">4.500000</td><td style=\"vertical-align:top\">null</td><td style=\"vertical-align:top\">0.500000</td></tr><tr><td class=\"rightBorder\" style=\"vertical-align:top\">dog</td><td class=\"rightBorder leftBorder\" style=\"vertical-align:top\">3.000000</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">6.000000</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539329\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"animal\",\"visits\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ColumnGroup\"}],\"nrow\":3,\"ncol\":2,\"is_formatted\":false},\"kotlin_dataframe\":[{\"animal\":\"cat\",\"visits\":{\"data\":{\"1\":2.5,\"3\":2.5,\"2\":null},\"metadata\":{\"kind\":\"ColumnGroup\",\"columns\":[\"1\",\"3\",\"2\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double?\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double?\"}]}}},{\"animal\":\"snake\",\"visits\":{\"data\":{\"1\":4.5,\"3\":null,\"2\":0.5},\"metadata\":{\"kind\":\"ColumnGroup\",\"columns\":[\"1\",\"3\",\"2\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double?\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double?\"}]}}},{\"animal\":\"dog\",\"visits\":{\"data\":{\"1\":3.0,\"3\":NaN,\"2\":6.0},\"metadata\":{\"kind\":\"ColumnGroup\",\"columns\":[\"1\",\"3\",\"2\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double?\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double?\"}]}}}]}"
|
|
},
|
|
"execution_count": 20,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 20
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"## DataFrame: beyond the basics\n",
|
|
"### Slightly trickier: you may need to combine two or more methods to get the right answer\n",
|
|
"Difficulty: medium\n",
|
|
"\n",
|
|
"The previous section was tour through some basic but essential DataFrame operations.\n",
|
|
"Below are some ways that you might need to cut your data, but for which there is no single \"out-of-the-box\" method."
|
|
]
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"**20.** You have a DataFrame df with a column 'A' of integers. For example:\n",
|
|
"```kotlin\n",
|
|
"val df = dataFrameOf(\"A\" to columnOf(1, 2, 2, 3, 4, 5, 5, 5, 6, 7, 7))\n",
|
|
"```\n",
|
|
"How do you filter out rows which contain the same integer as the row immediately above?\n",
|
|
"\n",
|
|
"You should be left with a column containing the following values:\n",
|
|
"```\n",
|
|
"1, 2, 3, 4, 5, 6, 7\n",
|
|
"```"
|
|
]
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:47.812973387Z",
|
|
"start_time": "2025-12-18T11:19:47.592009662Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_49_jupyter",
|
|
"Line_50_jupyter",
|
|
"Line_51_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"val df = dataFrameOf(\"A\" to columnOf(1, 2, 2, 3, 4, 5, 5, 5, 6, 7, 7))\n",
|
|
"df"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_35()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_35\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539332"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataFrame: rowsCount = 11, columnsCount = 1</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"A: Int\">A</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">1</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">4</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">5</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">5</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">5</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">6</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">7</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">7</span></span>"] }, \n",
|
|
"], id: 486539332, rootId: 486539332, totalRows: 11 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539332) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_35() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_35\");\n",
|
|
" resize_iframe_out_35(elem);\n",
|
|
" setInterval(resize_iframe_out_35, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_35(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539333\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">A</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">1</td></tr><tr><td style=\"vertical-align:top\">2</td></tr><tr><td style=\"vertical-align:top\">2</td></tr><tr><td style=\"vertical-align:top\">3</td></tr><tr><td style=\"vertical-align:top\">4</td></tr><tr><td style=\"vertical-align:top\">5</td></tr><tr><td style=\"vertical-align:top\">5</td></tr><tr><td style=\"vertical-align:top\">5</td></tr><tr><td style=\"vertical-align:top\">6</td></tr><tr><td style=\"vertical-align:top\">7</td></tr><tr><td style=\"vertical-align:top\">7</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539333\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"A\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"}],\"nrow\":11,\"ncol\":1,\"is_formatted\":false},\"kotlin_dataframe\":[{\"A\":1},{\"A\":2},{\"A\":2},{\"A\":3},{\"A\":4},{\"A\":5},{\"A\":5},{\"A\":5},{\"A\":6},{\"A\":7},{\"A\":7}]}"
|
|
},
|
|
"execution_count": 21,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 21
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:48.106029432Z",
|
|
"start_time": "2025-12-18T11:19:47.883015099Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_53_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": "df.filter { prev()?.A != A }",
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_37()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_37\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539336"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataFrame: rowsCount = 7, columnsCount = 1</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"A: Int\">A</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">1</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">4</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">5</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">6</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">7</span></span>"] }, \n",
|
|
"], id: 486539336, rootId: 486539336, totalRows: 7 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539336) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_37() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_37\");\n",
|
|
" resize_iframe_out_37(elem);\n",
|
|
" setInterval(resize_iframe_out_37, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_37(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539337\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">A</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">1</td></tr><tr><td style=\"vertical-align:top\">2</td></tr><tr><td style=\"vertical-align:top\">3</td></tr><tr><td style=\"vertical-align:top\">4</td></tr><tr><td style=\"vertical-align:top\">5</td></tr><tr><td style=\"vertical-align:top\">6</td></tr><tr><td style=\"vertical-align:top\">7</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539337\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"A\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"}],\"nrow\":7,\"ncol\":1,\"is_formatted\":false},\"kotlin_dataframe\":[{\"A\":1},{\"A\":2},{\"A\":3},{\"A\":4},{\"A\":5},{\"A\":6},{\"A\":7}]}"
|
|
},
|
|
"execution_count": 22,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 22
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:48.354220694Z",
|
|
"start_time": "2025-12-18T11:19:48.153924502Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_55_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": "df.filter { diffOrNull { A } != 0 }",
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_39()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_39\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539340"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataFrame: rowsCount = 7, columnsCount = 1</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"A: Int\">A</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">1</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">4</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">5</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">6</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">7</span></span>"] }, \n",
|
|
"], id: 486539340, rootId: 486539340, totalRows: 7 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539340) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_39() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_39\");\n",
|
|
" resize_iframe_out_39(elem);\n",
|
|
" setInterval(resize_iframe_out_39, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_39(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539341\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">A</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">1</td></tr><tr><td style=\"vertical-align:top\">2</td></tr><tr><td style=\"vertical-align:top\">3</td></tr><tr><td style=\"vertical-align:top\">4</td></tr><tr><td style=\"vertical-align:top\">5</td></tr><tr><td style=\"vertical-align:top\">6</td></tr><tr><td style=\"vertical-align:top\">7</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539341\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"A\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"}],\"nrow\":7,\"ncol\":1,\"is_formatted\":false},\"kotlin_dataframe\":[{\"A\":1},{\"A\":2},{\"A\":3},{\"A\":4},{\"A\":5},{\"A\":6},{\"A\":7}]}"
|
|
},
|
|
"execution_count": 23,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 23
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": "We could use `distinct()` here but it won't work as desired if A is [1, 1, 2, 2, 1, 1] for example."
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:48.524516883Z",
|
|
"start_time": "2025-12-18T11:19:48.428439626Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_57_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": "df.distinct()",
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_41()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_41\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539344"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataFrame: rowsCount = 7, columnsCount = 1</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"A: Int\">A</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">1</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">4</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">5</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">6</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">7</span></span>"] }, \n",
|
|
"], id: 486539344, rootId: 486539344, totalRows: 7 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539344) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_41() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_41\");\n",
|
|
" resize_iframe_out_41(elem);\n",
|
|
" setInterval(resize_iframe_out_41, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_41(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539345\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">A</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">1</td></tr><tr><td style=\"vertical-align:top\">2</td></tr><tr><td style=\"vertical-align:top\">3</td></tr><tr><td style=\"vertical-align:top\">4</td></tr><tr><td style=\"vertical-align:top\">5</td></tr><tr><td style=\"vertical-align:top\">6</td></tr><tr><td style=\"vertical-align:top\">7</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539345\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"A\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"}],\"nrow\":7,\"ncol\":1,\"is_formatted\":false},\"kotlin_dataframe\":[{\"A\":1},{\"A\":2},{\"A\":3},{\"A\":4},{\"A\":5},{\"A\":6},{\"A\":7}]}"
|
|
},
|
|
"execution_count": 24,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 24
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"**21.** Given a DataFrame of random numeric values:\n",
|
|
"```kotlin\n",
|
|
"val df = dataFrameOf(\"a\", \"b\", \"c\").randomDouble(5) // this is a 5x3 DataFrame of double values\n",
|
|
"```\n",
|
|
"\n",
|
|
"how do you subtract the row mean from each element in the row?"
|
|
]
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:48.976011050Z",
|
|
"start_time": "2025-12-18T11:19:48.636984362Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_58_jupyter",
|
|
"Line_59_jupyter",
|
|
"Line_60_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"val df = dataFrameOf(\"a\", \"b\", \"c\").randomDouble(5)\n",
|
|
"df"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_42()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_42\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539346"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataFrame: rowsCount = 5, columnsCount = 3</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"a: Double\">a</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.389647</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.788586</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.858807</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.883197</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.931211</span></span>"] }, \n",
|
|
"{ name: "<span title=\"b: Double\">b</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.552994</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.127921</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.673938</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.765814</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.402562</span></span>"] }, \n",
|
|
"{ name: "<span title=\"c: Double\">c</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.853043</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.833489</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.781276</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.929804</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.438368</span></span>"] }, \n",
|
|
"], id: 486539346, rootId: 486539346, totalRows: 5 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539346) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_42() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_42\");\n",
|
|
" resize_iframe_out_42(elem);\n",
|
|
" setInterval(resize_iframe_out_42, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_42(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539347\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">a</th><th class=\"bottomBorder\" style=\"text-align:left\">b</th><th class=\"bottomBorder\" style=\"text-align:left\">c</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">0.389647</td><td style=\"vertical-align:top\">0.552994</td><td style=\"vertical-align:top\">0.853043</td></tr><tr><td style=\"vertical-align:top\">0.788586</td><td style=\"vertical-align:top\">0.127921</td><td style=\"vertical-align:top\">0.833489</td></tr><tr><td style=\"vertical-align:top\">0.858807</td><td style=\"vertical-align:top\">0.673938</td><td style=\"vertical-align:top\">0.781276</td></tr><tr><td style=\"vertical-align:top\">0.883197</td><td style=\"vertical-align:top\">0.765814</td><td style=\"vertical-align:top\">0.929804</td></tr><tr><td style=\"vertical-align:top\">0.931211</td><td style=\"vertical-align:top\">0.402562</td><td style=\"vertical-align:top\">0.438368</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539347\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"a\",\"b\",\"c\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"}],\"nrow\":5,\"ncol\":3,\"is_formatted\":false},\"kotlin_dataframe\":[{\"a\":0.38964725344768747,\"b\":0.552993764027322,\"c\":0.8530430376111371},{\"a\":0.7885858820136266,\"b\":0.12792147763728656,\"c\":0.8334889732578966},{\"a\":0.8588073780857777,\"b\":0.673938093076138,\"c\":0.7812759099616297},{\"a\":0.8831974604892261,\"b\":0.765814199023807,\"c\":0.9298044650001936},{\"a\":0.931211129866274,\"b\":0.40256161724758266,\"c\":0.4383683880175443}]}"
|
|
},
|
|
"execution_count": 25,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 25
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:49.490759745Z",
|
|
"start_time": "2025-12-18T11:19:49.100396054Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_63_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"df.update { colsOf<Double>() }\n",
|
|
" .with { it - rowMean() }"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_45()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_45\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539352"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataFrame: rowsCount = 5, columnsCount = 3</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"a: Double\">a</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">-0.208914</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.205254</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.087467</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.023592</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.340497</span></span>"] }, \n",
|
|
"{ name: "<span title=\"b: Double\">b</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">-0.045568</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-0.455411</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-0.097402</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-0.093791</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-0.188152</span></span>"] }, \n",
|
|
"{ name: "<span title=\"c: Double\">c</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.254482</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.250157</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.009935</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.070199</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-0.152345</span></span>"] }, \n",
|
|
"], id: 486539352, rootId: 486539352, totalRows: 5 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539352) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_45() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_45\");\n",
|
|
" resize_iframe_out_45(elem);\n",
|
|
" setInterval(resize_iframe_out_45, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_45(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539353\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">a</th><th class=\"bottomBorder\" style=\"text-align:left\">b</th><th class=\"bottomBorder\" style=\"text-align:left\">c</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">-0.208914</td><td style=\"vertical-align:top\">-0.045568</td><td style=\"vertical-align:top\">0.254482</td></tr><tr><td style=\"vertical-align:top\">0.205254</td><td style=\"vertical-align:top\">-0.455411</td><td style=\"vertical-align:top\">0.250157</td></tr><tr><td style=\"vertical-align:top\">0.087467</td><td style=\"vertical-align:top\">-0.097402</td><td style=\"vertical-align:top\">0.009935</td></tr><tr><td style=\"vertical-align:top\">0.023592</td><td style=\"vertical-align:top\">-0.093791</td><td style=\"vertical-align:top\">0.070199</td></tr><tr><td style=\"vertical-align:top\">0.340497</td><td style=\"vertical-align:top\">-0.188152</td><td style=\"vertical-align:top\">-0.152345</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539353\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"a\",\"b\",\"c\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"}],\"nrow\":5,\"ncol\":3,\"is_formatted\":false},\"kotlin_dataframe\":[{\"a\":-0.2089140982476947,\"b\":-0.04556758766806013,\"c\":0.25448168591575493},{\"a\":0.20525377104402331,\"b\":-0.4554106333323167,\"c\":0.25015686228829337},{\"a\":0.08746691771126269,\"b\":-0.09740236729837703,\"c\":0.009935449587114675},{\"a\":0.02359208565148385,\"b\":-0.09379117581393526,\"c\":0.0701990901624514},{\"a\":0.3404974181558069,\"b\":-0.1881520944628844,\"c\":-0.15234532369292275}]}"
|
|
},
|
|
"execution_count": 26,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 26
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"**22.** Suppose you have a DataFrame with 10 columns of real numbers, for example:\n",
|
|
"```kotlin\n",
|
|
"val names = ('a'..'j').map { it.toString() }\n",
|
|
"val df = dataFrameOf(names).randomDouble(5)\n",
|
|
"```\n",
|
|
"\n",
|
|
"Which column of numbers has the smallest sum? Return that column's label."
|
|
]
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:49.906927775Z",
|
|
"start_time": "2025-12-18T11:19:49.567367152Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_65_jupyter",
|
|
"Line_66_jupyter",
|
|
"Line_67_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"val names = ('a'..'j').map { it.toString() }\n",
|
|
"val df = dataFrameOf(names).randomDouble(5)\n",
|
|
"df"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_47()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_47\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539356"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataFrame: rowsCount = 5, columnsCount = 10</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"a: Double\">a</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.841911</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.498208</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.788916</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.553347</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.874932</span></span>"] }, \n",
|
|
"{ name: "<span title=\"b: Double\">b</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.282187</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.847661</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.162458</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.482594</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.162043</span></span>"] }, \n",
|
|
"{ name: "<span title=\"c: Double\">c</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.504844</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.227987</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.183311</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.405461</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.477525</span></span>"] }, \n",
|
|
"{ name: "<span title=\"d: Double\">d</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.316049</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.518230</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.926585</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.369849</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.884059</span></span>"] }, \n",
|
|
"{ name: "<span title=\"e: Double\">e</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.490350</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.126070</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.429727</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.431532</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.292586</span></span>"] }, \n",
|
|
"{ name: "<span title=\"f: Double\">f</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.593206</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.616324</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.740767</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.177826</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.854866</span></span>"] }, \n",
|
|
"{ name: "<span title=\"g: Double\">g</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.550719</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.147116</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.930618</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.465287</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.456486</span></span>"] }, \n",
|
|
"{ name: "<span title=\"h: Double\">h</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.814340</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.262463</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.971054</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.262496</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.589303</span></span>"] }, \n",
|
|
"{ name: "<span title=\"i: Double\">i</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.089081</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.323552</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.802308</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.201674</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.140426</span></span>"] }, \n",
|
|
"{ name: "<span title=\"j: Double\">j</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.113149</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.737167</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.230486</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.430214</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.911116</span></span>"] }, \n",
|
|
"], id: 486539356, rootId: 486539356, totalRows: 5 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539356) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_47() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_47\");\n",
|
|
" resize_iframe_out_47(elem);\n",
|
|
" setInterval(resize_iframe_out_47, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_47(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539357\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">a</th><th class=\"bottomBorder\" style=\"text-align:left\">b</th><th class=\"bottomBorder\" style=\"text-align:left\">c</th><th class=\"bottomBorder\" style=\"text-align:left\">d</th><th class=\"bottomBorder\" style=\"text-align:left\">e</th><th class=\"bottomBorder\" style=\"text-align:left\">f</th><th class=\"bottomBorder\" style=\"text-align:left\">g</th><th class=\"bottomBorder\" style=\"text-align:left\">h</th><th class=\"bottomBorder\" style=\"text-align:left\">i</th><th class=\"bottomBorder\" style=\"text-align:left\">j</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">0.841911</td><td style=\"vertical-align:top\">0.282187</td><td style=\"vertical-align:top\">0.504844</td><td style=\"vertical-align:top\">0.316049</td><td style=\"vertical-align:top\">0.490350</td><td style=\"vertical-align:top\">0.593206</td><td style=\"vertical-align:top\">0.550719</td><td style=\"vertical-align:top\">0.814340</td><td style=\"vertical-align:top\">0.089081</td><td style=\"vertical-align:top\">0.113149</td></tr><tr><td style=\"vertical-align:top\">0.498208</td><td style=\"vertical-align:top\">0.847661</td><td style=\"vertical-align:top\">0.227987</td><td style=\"vertical-align:top\">0.518230</td><td style=\"vertical-align:top\">0.126070</td><td style=\"vertical-align:top\">0.616324</td><td style=\"vertical-align:top\">0.147116</td><td style=\"vertical-align:top\">0.262463</td><td style=\"vertical-align:top\">0.323552</td><td style=\"vertical-align:top\">0.737167</td></tr><tr><td style=\"vertical-align:top\">0.788916</td><td style=\"vertical-align:top\">0.162458</td><td style=\"vertical-align:top\">0.183311</td><td style=\"vertical-align:top\">0.926585</td><td style=\"vertical-align:top\">0.429727</td><td style=\"vertical-align:top\">0.740767</td><td style=\"vertical-align:top\">0.930618</td><td style=\"vertical-align:top\">0.971054</td><td style=\"vertical-align:top\">0.802308</td><td style=\"vertical-align:top\">0.230486</td></tr><tr><td style=\"vertical-align:top\">0.553347</td><td style=\"vertical-align:top\">0.482594</td><td style=\"vertical-align:top\">0.405461</td><td style=\"vertical-align:top\">0.369849</td><td style=\"vertical-align:top\">0.431532</td><td style=\"vertical-align:top\">0.177826</td><td style=\"vertical-align:top\">0.465287</td><td style=\"vertical-align:top\">0.262496</td><td style=\"vertical-align:top\">0.201674</td><td style=\"vertical-align:top\">0.430214</td></tr><tr><td style=\"vertical-align:top\">0.874932</td><td style=\"vertical-align:top\">0.162043</td><td style=\"vertical-align:top\">0.477525</td><td style=\"vertical-align:top\">0.884059</td><td style=\"vertical-align:top\">0.292586</td><td style=\"vertical-align:top\">0.854866</td><td style=\"vertical-align:top\">0.456486</td><td style=\"vertical-align:top\">0.589303</td><td style=\"vertical-align:top\">0.140426</td><td style=\"vertical-align:top\">0.911116</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539357\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"}],\"nrow\":5,\"ncol\":10,\"is_formatted\":false},\"kotlin_dataframe\":[{\"a\":0.8419114160124052,\"b\":0.282186920782716,\"c\":0.5048443177170018,\"d\":0.31604901017535125,\"e\":0.4903503697680932,\"f\":0.5932062822034694,\"g\":0.5507189032521874,\"h\":0.8143400642944842,\"i\":0.0890806635407565,\"j\":0.11314865188165824},{\"a\":0.49820844533063235,\"b\":0.8476612083057321,\"c\":0.22798742360150803,\"d\":0.5182296202669303,\"e\":0.12607036482076805,\"f\":0.6163241622452882,\"g\":0.1471161686192296,\"h\":0.26246326600812764,\"i\":0.32355220762629744,\"j\":0.7371668074893234},{\"a\":0.788915937670967,\"b\":0.16245843051774012,\"c\":0.18331082327972492,\"d\":0.9265848824100162,\"e\":0.4297273634305062,\"f\":0.7407665914938036,\"g\":0.9306177608421328,\"h\":0.9710544319125589,\"i\":0.802308385674185,\"j\":0.23048565019517087},{\"a\":0.553347476141766,\"b\":0.48259411048976075,\"c\":0.40546089768988547,\"d\":0.3698490765337128,\"e\":0.43153183270372275,\"f\":0.17782580998707898,\"g\":0.465287247289943,\"h\":0.2624963066894521,\"i\":0.20167375143620148,\"j\":0.43021369129837617},{\"a\":0.8749319981380302,\"b\":0.16204312466903636,\"c\":0.4775248119116894,\"d\":0.8840586021809772,\"e\":0.2925857979551013,\"f\":0.8548662347706445,\"g\":0.4564858905910003,\"h\":0.5893027524048042,\"i\":0.1404261330157901,\"j\":0.911116058678073}]}"
|
|
},
|
|
"execution_count": 27,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 27
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:50.235988942Z",
|
|
"start_time": "2025-12-18T11:19:49.987687771Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_69_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": "df.sum().transpose().minBy(\"value\")[\"name\"]",
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"i"
|
|
]
|
|
},
|
|
"execution_count": 28,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 28
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": "**23.** How do you count how many unique rows a DataFrame has (i.e. ignore all rows that are duplicates)?"
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:50.387907271Z",
|
|
"start_time": "2025-12-18T11:19:50.238960093Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_70_jupyter",
|
|
"Line_71_jupyter",
|
|
"Line_72_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"val df = dataFrameOf(\"a\", \"b\", \"c\").randomInt(30, 0..2)\n",
|
|
"df.distinct().count()"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"19"
|
|
]
|
|
},
|
|
"execution_count": 29,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 29
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"**24.** In the cell below, you have a DataFrame `df` that consists of 10 columns of floating-point numbers. Exactly 5 entries in each row are NaN values.\n",
|
|
"\n",
|
|
"For each row of the DataFrame, find the *column* which contains the *third* NaN value.\n",
|
|
"\n",
|
|
"You should return a column of column labels: `e, c, d, h, d`"
|
|
]
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:50.641509850Z",
|
|
"start_time": "2025-12-18T11:19:50.391210050Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_73_jupyter",
|
|
"Line_74_jupyter",
|
|
"Line_75_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"val nan = Double.NaN\n",
|
|
"val names = ('a'..'j').map { it.toString() }\n",
|
|
"val data = listOf(\n",
|
|
" 0.04, nan, nan, 0.25, nan, 0.43, 0.71, 0.51, nan, nan,\n",
|
|
" nan, nan, nan, 0.04, 0.76, nan, nan, 0.67, 0.76, 0.16,\n",
|
|
" nan, nan, 0.5, nan, 0.31, 0.4, nan, nan, 0.24, 0.01,\n",
|
|
" 0.49, nan, nan, 0.62, 0.73, 0.26, 0.85, nan, nan, nan,\n",
|
|
" nan, nan, 0.41, nan, 0.05, nan, 0.61, nan, 0.48, 0.68,\n",
|
|
")\n",
|
|
"val df = dataFrameOf(names)(*data.toTypedArray())\n",
|
|
"df"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_49()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_49\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539360"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataFrame: rowsCount = 5, columnsCount = 10</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"a: Double\">a</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.04</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.49</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>"] }, \n",
|
|
"{ name: "<span title=\"b: Double\">b</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>"] }, \n",
|
|
"{ name: "<span title=\"c: Double\">c</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.50</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.41</span></span>"] }, \n",
|
|
"{ name: "<span title=\"d: Double\">d</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.25</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.04</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.62</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>"] }, \n",
|
|
"{ name: "<span title=\"e: Double\">e</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.76</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.31</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.73</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.05</span></span>"] }, \n",
|
|
"{ name: "<span title=\"f: Double\">f</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.43</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.40</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.26</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>"] }, \n",
|
|
"{ name: "<span title=\"g: Double\">g</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.71</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.85</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.61</span></span>"] }, \n",
|
|
"{ name: "<span title=\"h: Double\">h</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.51</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.67</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>"] }, \n",
|
|
"{ name: "<span title=\"i: Double\">i</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.76</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.24</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.48</span></span>"] }, \n",
|
|
"{ name: "<span title=\"j: Double\">j</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.16</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.01</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.68</span></span>"] }, \n",
|
|
"], id: 486539360, rootId: 486539360, totalRows: 5 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539360) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_49() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_49\");\n",
|
|
" resize_iframe_out_49(elem);\n",
|
|
" setInterval(resize_iframe_out_49, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_49(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539361\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">a</th><th class=\"bottomBorder\" style=\"text-align:left\">b</th><th class=\"bottomBorder\" style=\"text-align:left\">c</th><th class=\"bottomBorder\" style=\"text-align:left\">d</th><th class=\"bottomBorder\" style=\"text-align:left\">e</th><th class=\"bottomBorder\" style=\"text-align:left\">f</th><th class=\"bottomBorder\" style=\"text-align:left\">g</th><th class=\"bottomBorder\" style=\"text-align:left\">h</th><th class=\"bottomBorder\" style=\"text-align:left\">i</th><th class=\"bottomBorder\" style=\"text-align:left\">j</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">0.040000</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">0.250000</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">0.430000</td><td style=\"vertical-align:top\">0.710000</td><td style=\"vertical-align:top\">0.510000</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">NaN</td></tr><tr><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">0.040000</td><td style=\"vertical-align:top\">0.760000</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">0.670000</td><td style=\"vertical-align:top\">0.760000</td><td style=\"vertical-align:top\">0.160000</td></tr><tr><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">0.500000</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">0.310000</td><td style=\"vertical-align:top\">0.400000</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">0.240000</td><td style=\"vertical-align:top\">0.010000</td></tr><tr><td style=\"vertical-align:top\">0.490000</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">0.620000</td><td style=\"vertical-align:top\">0.730000</td><td style=\"vertical-align:top\">0.260000</td><td style=\"vertical-align:top\">0.850000</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">NaN</td></tr><tr><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">0.410000</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">0.050000</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">0.610000</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">0.480000</td><td style=\"vertical-align:top\">0.680000</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539361\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"}],\"nrow\":5,\"ncol\":10,\"is_formatted\":false},\"kotlin_dataframe\":[{\"a\":0.04,\"b\":NaN,\"c\":NaN,\"d\":0.25,\"e\":NaN,\"f\":0.43,\"g\":0.71,\"h\":0.51,\"i\":NaN,\"j\":NaN},{\"a\":NaN,\"b\":NaN,\"c\":NaN,\"d\":0.04,\"e\":0.76,\"f\":NaN,\"g\":NaN,\"h\":0.67,\"i\":0.76,\"j\":0.16},{\"a\":NaN,\"b\":NaN,\"c\":0.5,\"d\":NaN,\"e\":0.31,\"f\":0.4,\"g\":NaN,\"h\":NaN,\"i\":0.24,\"j\":0.01},{\"a\":0.49,\"b\":NaN,\"c\":NaN,\"d\":0.62,\"e\":0.73,\"f\":0.26,\"g\":0.85,\"h\":NaN,\"i\":NaN,\"j\":NaN},{\"a\":NaN,\"b\":NaN,\"c\":0.41,\"d\":NaN,\"e\":0.05,\"f\":NaN,\"g\":0.61,\"h\":NaN,\"i\":0.48,\"j\":0.68}]}"
|
|
},
|
|
"execution_count": 30,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 30
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:51.054313756Z",
|
|
"start_time": "2025-12-18T11:19:50.738227798Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_77_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"df.mapToColumn(\"res\") { \n",
|
|
" namedValuesOf<Double>()\n",
|
|
" .filter { it.value.isNaN() }.drop(2)\n",
|
|
" .firstOrNull()?.name \n",
|
|
"}"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_51()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_51\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539364"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataColumn: name = "res", type = String, size = 5</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"res: String\">res</span>", children: [], rightAlign: false, values: ["e","c","d","h","d"] }, \n",
|
|
"], id: 486539364, rootId: 486539364, totalRows: 5 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539364) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_51() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_51\");\n",
|
|
" resize_iframe_out_51(elem);\n",
|
|
" setInterval(resize_iframe_out_51, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_51(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539365\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">res</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">e</td></tr><tr><td style=\"vertical-align:top\">c</td></tr><tr><td style=\"vertical-align:top\">d</td></tr><tr><td style=\"vertical-align:top\">h</td></tr><tr><td style=\"vertical-align:top\">d</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539365\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"res\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"}],\"nrow\":5,\"ncol\":1,\"is_formatted\":false},\"kotlin_dataframe\":[{\"res\":\"e\"},{\"res\":\"c\"},{\"res\":\"d\"},{\"res\":\"h\"},{\"res\":\"d\"}]}"
|
|
},
|
|
"execution_count": 31,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 31
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"**25.** A DataFrame has a column of groups 'grps' and a column of integer values 'vals':\n",
|
|
"```kotlin\n",
|
|
"val df = dataFrameOf(\n",
|
|
" \"grps\" to columnOf(\"a\", \"a\", \"a\", \"b\", \"b\", \"c\", \"a\", \"a\", \"b\", \"c\", \"c\", \"c\", \"b\", \"b\", \"c\"),\n",
|
|
" \"vals\" to columnOf(12, 345, 3, 1, 45, 14, 4, 52, 54, 23, 235, 21, 57, 3, 87),\n",
|
|
")\n",
|
|
"```\n",
|
|
"\n",
|
|
"For each group, find the sum of the three greatest values. You should end up with the answer as follows:\n",
|
|
"```\n",
|
|
"grps\n",
|
|
"a 409\n",
|
|
"b 156\n",
|
|
"c 345\n",
|
|
"```"
|
|
]
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:51.467157852Z",
|
|
"start_time": "2025-12-18T11:19:51.142193506Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_79_jupyter",
|
|
"Line_80_jupyter",
|
|
"Line_81_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"val df = dataFrameOf(\n",
|
|
" \"grps\" to columnOf(\"a\", \"a\", \"a\", \"b\", \"b\", \"c\", \"a\", \"a\", \"b\", \"c\", \"c\", \"c\", \"b\", \"b\", \"c\"),\n",
|
|
" \"vals\" to columnOf(12, 345, 3, 1, 45, 14, 4, 52, 54, 23, 235, 21, 57, 3, 87),\n",
|
|
")\n",
|
|
"df"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_53()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_53\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539368"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataFrame: rowsCount = 15, columnsCount = 2</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"grps: String\">grps</span>", children: [], rightAlign: false, values: ["a","a","a","b","b","c","a","a","b","c","c","c","b","b","c"] }, \n",
|
|
"{ name: "<span title=\"vals: Int\">vals</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">12</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">345</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">1</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">45</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">14</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">4</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">52</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">54</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">23</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">235</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">21</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">57</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">87</span></span>"] }, \n",
|
|
"], id: 486539368, rootId: 486539368, totalRows: 15 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539368) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_53() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_53\");\n",
|
|
" resize_iframe_out_53(elem);\n",
|
|
" setInterval(resize_iframe_out_53, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_53(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539369\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">grps</th><th class=\"bottomBorder\" style=\"text-align:left\">vals</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">a</td><td style=\"vertical-align:top\">12</td></tr><tr><td style=\"vertical-align:top\">a</td><td style=\"vertical-align:top\">345</td></tr><tr><td style=\"vertical-align:top\">a</td><td style=\"vertical-align:top\">3</td></tr><tr><td style=\"vertical-align:top\">b</td><td style=\"vertical-align:top\">1</td></tr><tr><td style=\"vertical-align:top\">b</td><td style=\"vertical-align:top\">45</td></tr><tr><td style=\"vertical-align:top\">c</td><td style=\"vertical-align:top\">14</td></tr><tr><td style=\"vertical-align:top\">a</td><td style=\"vertical-align:top\">4</td></tr><tr><td style=\"vertical-align:top\">a</td><td style=\"vertical-align:top\">52</td></tr><tr><td style=\"vertical-align:top\">b</td><td style=\"vertical-align:top\">54</td></tr><tr><td style=\"vertical-align:top\">c</td><td style=\"vertical-align:top\">23</td></tr><tr><td style=\"vertical-align:top\">c</td><td style=\"vertical-align:top\">235</td></tr><tr><td style=\"vertical-align:top\">c</td><td style=\"vertical-align:top\">21</td></tr><tr><td style=\"vertical-align:top\">b</td><td style=\"vertical-align:top\">57</td></tr><tr><td style=\"vertical-align:top\">b</td><td style=\"vertical-align:top\">3</td></tr><tr><td style=\"vertical-align:top\">c</td><td style=\"vertical-align:top\">87</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539369\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"grps\",\"vals\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"}],\"nrow\":15,\"ncol\":2,\"is_formatted\":false},\"kotlin_dataframe\":[{\"grps\":\"a\",\"vals\":12},{\"grps\":\"a\",\"vals\":345},{\"grps\":\"a\",\"vals\":3},{\"grps\":\"b\",\"vals\":1},{\"grps\":\"b\",\"vals\":45},{\"grps\":\"c\",\"vals\":14},{\"grps\":\"a\",\"vals\":4},{\"grps\":\"a\",\"vals\":52},{\"grps\":\"b\",\"vals\":54},{\"grps\":\"c\",\"vals\":23},{\"grps\":\"c\",\"vals\":235},{\"grps\":\"c\",\"vals\":21},{\"grps\":\"b\",\"vals\":57},{\"grps\":\"b\",\"vals\":3},{\"grps\":\"c\",\"vals\":87}]}"
|
|
},
|
|
"execution_count": 32,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 32
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:51.874156449Z",
|
|
"start_time": "2025-12-18T11:19:51.536795229Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_83_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"df.groupBy { grps }.aggregate { \n",
|
|
" vals.sortDesc().take(3).sum() into \"res\"\n",
|
|
"}"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_55()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_55\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539372"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataFrame: rowsCount = 3, columnsCount = 2</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"grps: String\">grps</span>", children: [], rightAlign: false, values: ["a","b","c"] }, \n",
|
|
"{ name: "<span title=\"res: Int\">res</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">409</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">156</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">345</span></span>"] }, \n",
|
|
"], id: 486539372, rootId: 486539372, totalRows: 3 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539372) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_55() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_55\");\n",
|
|
" resize_iframe_out_55(elem);\n",
|
|
" setInterval(resize_iframe_out_55, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_55(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539373\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">grps</th><th class=\"bottomBorder\" style=\"text-align:left\">res</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">a</td><td style=\"vertical-align:top\">409</td></tr><tr><td style=\"vertical-align:top\">b</td><td style=\"vertical-align:top\">156</td></tr><tr><td style=\"vertical-align:top\">c</td><td style=\"vertical-align:top\">345</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539373\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"grps\",\"res\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"}],\"nrow\":3,\"ncol\":2,\"is_formatted\":false},\"kotlin_dataframe\":[{\"grps\":\"a\",\"res\":409},{\"grps\":\"b\",\"res\":156},{\"grps\":\"c\",\"res\":345}]}"
|
|
},
|
|
"execution_count": 33,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 33
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"**26.** The DataFrame `df` constructed below has two integer columns 'A' and 'B'. The values in 'A' are between 1 and 100 (inclusive).\n",
|
|
"\n",
|
|
"For each group of 10 consecutive integers in 'A' (i.e. `(0, 10]`, `(10, 20]`, ...), calculate the sum of the corresponding values in column 'B'.\n",
|
|
"\n",
|
|
"The answer is as follows:\n",
|
|
"\n",
|
|
"```\n",
|
|
"A\n",
|
|
"(0, 10] 635\n",
|
|
"(10, 20] 360\n",
|
|
"(20, 30] 315\n",
|
|
"(30, 40] 306\n",
|
|
"(40, 50] 750\n",
|
|
"(50, 60] 284\n",
|
|
"(60, 70] 424\n",
|
|
"(70, 80] 526\n",
|
|
"(80, 90] 835\n",
|
|
"(90, 100] 852\n",
|
|
"```"
|
|
]
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:52.289287480Z",
|
|
"start_time": "2025-12-18T11:19:51.941954661Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_85_jupyter",
|
|
"Line_86_jupyter",
|
|
"Line_87_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"import kotlin.random.Random\n",
|
|
"\n",
|
|
"val random = Random(42)\n",
|
|
"val list = List(200) { random.nextInt(1, 101) }\n",
|
|
"val df = dataFrameOf(\"A\", \"B\")(*list.toTypedArray())\n",
|
|
"df"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_57()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_57\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539376"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">... showing only top 20 of 100 rows</p><p class="dataframe_description">DataFrame: rowsCount = 100, columnsCount = 2</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"A: Int\">A</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">34</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">42</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">42</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">22</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">70</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">53</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">80</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">59</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">45</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">27</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">70</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">11</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">51</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">46</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">17</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">17</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">56</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">58</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">48</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">73</span></span>"] }, \n",
|
|
"{ name: "<span title=\"B: Int\">B</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">41</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">33</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">41</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">88</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">68</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">4</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">59</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">1</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">14</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">8</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">52</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">60</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">43</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">17</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">42</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">29</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">49</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">7</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">52</span></span>"] }, \n",
|
|
"], id: 486539376, rootId: 486539376, totalRows: 100 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539376) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_57() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_57\");\n",
|
|
" resize_iframe_out_57(elem);\n",
|
|
" setInterval(resize_iframe_out_57, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_57(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539377\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">A</th><th class=\"bottomBorder\" style=\"text-align:left\">B</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">34</td><td style=\"vertical-align:top\">41</td></tr><tr><td style=\"vertical-align:top\">42</td><td style=\"vertical-align:top\">3</td></tr><tr><td style=\"vertical-align:top\">42</td><td style=\"vertical-align:top\">33</td></tr><tr><td style=\"vertical-align:top\">22</td><td style=\"vertical-align:top\">41</td></tr><tr><td style=\"vertical-align:top\">70</td><td style=\"vertical-align:top\">88</td></tr><tr><td style=\"vertical-align:top\">53</td><td style=\"vertical-align:top\">68</td></tr><tr><td style=\"vertical-align:top\">80</td><td style=\"vertical-align:top\">4</td></tr><tr><td style=\"vertical-align:top\">59</td><td style=\"vertical-align:top\">59</td></tr><tr><td style=\"vertical-align:top\">45</td><td style=\"vertical-align:top\">1</td></tr><tr><td style=\"vertical-align:top\">27</td><td style=\"vertical-align:top\">14</td></tr><tr><td style=\"vertical-align:top\">70</td><td style=\"vertical-align:top\">8</td></tr><tr><td style=\"vertical-align:top\">11</td><td style=\"vertical-align:top\">52</td></tr><tr><td style=\"vertical-align:top\">51</td><td style=\"vertical-align:top\">60</td></tr><tr><td style=\"vertical-align:top\">46</td><td style=\"vertical-align:top\">43</td></tr><tr><td style=\"vertical-align:top\">17</td><td style=\"vertical-align:top\">17</td></tr><tr><td style=\"vertical-align:top\">17</td><td style=\"vertical-align:top\">42</td></tr><tr><td style=\"vertical-align:top\">56</td><td style=\"vertical-align:top\">29</td></tr><tr><td style=\"vertical-align:top\">58</td><td style=\"vertical-align:top\">49</td></tr><tr><td style=\"vertical-align:top\">48</td><td style=\"vertical-align:top\">7</td></tr><tr><td style=\"vertical-align:top\">73</td><td style=\"vertical-align:top\">52</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539377\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"A\",\"B\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"}],\"nrow\":100,\"ncol\":2,\"is_formatted\":false},\"kotlin_dataframe\":[{\"A\":34,\"B\":41},{\"A\":42,\"B\":3},{\"A\":42,\"B\":33},{\"A\":22,\"B\":41},{\"A\":70,\"B\":88},{\"A\":53,\"B\":68},{\"A\":80,\"B\":4},{\"A\":59,\"B\":59},{\"A\":45,\"B\":1},{\"A\":27,\"B\":14},{\"A\":70,\"B\":8},{\"A\":11,\"B\":52},{\"A\":51,\"B\":60},{\"A\":46,\"B\":43},{\"A\":17,\"B\":17},{\"A\":17,\"B\":42},{\"A\":56,\"B\":29},{\"A\":58,\"B\":49},{\"A\":48,\"B\":7},{\"A\":73,\"B\":52}]}"
|
|
},
|
|
"execution_count": 34,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 34
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:52.799510118Z",
|
|
"start_time": "2025-12-18T11:19:52.372865385Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_89_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"df.groupBy { A.map { (it - 1) / 10 } }.sum { B }\n",
|
|
" .sortBy { A }\n",
|
|
" .convert { A }.with { \"(${it * 10}, ${it * 10 + 10}]\" }"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_59()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_59\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539380"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataFrame: rowsCount = 10, columnsCount = 2</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"A: String\">A</span>", children: [], rightAlign: false, values: ["(0, 10]","(10, 20]","(20, 30]","(30, 40]","(40, 50]","(50, 60]","(60, 70]","(70, 80]","(80, 90]","(90, 100]"] }, \n",
|
|
"{ name: "<span title=\"B: Int\">B</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">353</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">873</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">321</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">322</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">432</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">754</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">405</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">561</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">657</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">527</span></span>"] }, \n",
|
|
"], id: 486539380, rootId: 486539380, totalRows: 10 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539380) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_59() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_59\");\n",
|
|
" resize_iframe_out_59(elem);\n",
|
|
" setInterval(resize_iframe_out_59, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_59(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539381\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">A</th><th class=\"bottomBorder\" style=\"text-align:left\">B</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">(0, 10]</td><td style=\"vertical-align:top\">353</td></tr><tr><td style=\"vertical-align:top\">(10, 20]</td><td style=\"vertical-align:top\">873</td></tr><tr><td style=\"vertical-align:top\">(20, 30]</td><td style=\"vertical-align:top\">321</td></tr><tr><td style=\"vertical-align:top\">(30, 40]</td><td style=\"vertical-align:top\">322</td></tr><tr><td style=\"vertical-align:top\">(40, 50]</td><td style=\"vertical-align:top\">432</td></tr><tr><td style=\"vertical-align:top\">(50, 60]</td><td style=\"vertical-align:top\">754</td></tr><tr><td style=\"vertical-align:top\">(60, 70]</td><td style=\"vertical-align:top\">405</td></tr><tr><td style=\"vertical-align:top\">(70, 80]</td><td style=\"vertical-align:top\">561</td></tr><tr><td style=\"vertical-align:top\">(80, 90]</td><td style=\"vertical-align:top\">657</td></tr><tr><td style=\"vertical-align:top\">(90, 100]</td><td style=\"vertical-align:top\">527</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539381\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"A\",\"B\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"}],\"nrow\":10,\"ncol\":2,\"is_formatted\":false},\"kotlin_dataframe\":[{\"A\":\"(0, 10]\",\"B\":353},{\"A\":\"(10, 20]\",\"B\":873},{\"A\":\"(20, 30]\",\"B\":321},{\"A\":\"(30, 40]\",\"B\":322},{\"A\":\"(40, 50]\",\"B\":432},{\"A\":\"(50, 60]\",\"B\":754},{\"A\":\"(60, 70]\",\"B\":405},{\"A\":\"(70, 80]\",\"B\":561},{\"A\":\"(80, 90]\",\"B\":657},{\"A\":\"(90, 100]\",\"B\":527}]}"
|
|
},
|
|
"execution_count": 35,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 35
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"## DataFrames: harder problems\n",
|
|
"\n",
|
|
"### These might require a bit of thinking outside the box...\n",
|
|
"\n",
|
|
"Difficulty: hard"
|
|
]
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"**27.** Consider a DataFrame `df` where there is an integer column 'X':\n",
|
|
"```kotlin\n",
|
|
"val df = dataFrameOf(\"X\" to columnOf(7, 2, 0, 3, 4, 2, 5, 0, 3, 4))\n",
|
|
"```\n",
|
|
"For each value, count the difference back to the previous zero (or the start of the column, whichever is closer). These values should therefore be\n",
|
|
"\n",
|
|
"```\n",
|
|
"[1, 2, 0, 1, 2, 3, 4, 0, 1, 2]\n",
|
|
"```\n",
|
|
"\n",
|
|
"Make this a new column 'Y'."
|
|
]
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:53.262677781Z",
|
|
"start_time": "2025-12-18T11:19:52.881011560Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_91_jupyter",
|
|
"Line_92_jupyter",
|
|
"Line_93_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"val df = dataFrameOf(\"X\" to columnOf(7, 2, 0, 3, 4, 2, 5, 0, 3, 4))\n",
|
|
"df"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_61()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_61\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539384"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataFrame: rowsCount = 10, columnsCount = 1</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"X: Int\">X</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">7</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">4</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">5</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">4</span></span>"] }, \n",
|
|
"], id: 486539384, rootId: 486539384, totalRows: 10 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539384) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_61() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_61\");\n",
|
|
" resize_iframe_out_61(elem);\n",
|
|
" setInterval(resize_iframe_out_61, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_61(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539385\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">X</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">7</td></tr><tr><td style=\"vertical-align:top\">2</td></tr><tr><td style=\"vertical-align:top\">0</td></tr><tr><td style=\"vertical-align:top\">3</td></tr><tr><td style=\"vertical-align:top\">4</td></tr><tr><td style=\"vertical-align:top\">2</td></tr><tr><td style=\"vertical-align:top\">5</td></tr><tr><td style=\"vertical-align:top\">0</td></tr><tr><td style=\"vertical-align:top\">3</td></tr><tr><td style=\"vertical-align:top\">4</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539385\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"X\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"}],\"nrow\":10,\"ncol\":1,\"is_formatted\":false},\"kotlin_dataframe\":[{\"X\":7},{\"X\":2},{\"X\":0},{\"X\":3},{\"X\":4},{\"X\":2},{\"X\":5},{\"X\":0},{\"X\":3},{\"X\":4}]}"
|
|
},
|
|
"execution_count": 36,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 36
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:53.552737696Z",
|
|
"start_time": "2025-12-18T11:19:53.347104241Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_95_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"df.mapToColumn(\"Y\") {\n",
|
|
" if (it.X == 0) 0 else (prev()?.newValue() ?: 0) + 1\n",
|
|
"}"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_63()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_63\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539388"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataColumn: name = "Y", type = Int, size = 10</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"Y: Int\">Y</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">1</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">1</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">4</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">1</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2</span></span>"] }, \n",
|
|
"], id: 486539388, rootId: 486539388, totalRows: 10 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539388) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_63() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_63\");\n",
|
|
" resize_iframe_out_63(elem);\n",
|
|
" setInterval(resize_iframe_out_63, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_63(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539389\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">Y</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">1</td></tr><tr><td style=\"vertical-align:top\">2</td></tr><tr><td style=\"vertical-align:top\">0</td></tr><tr><td style=\"vertical-align:top\">1</td></tr><tr><td style=\"vertical-align:top\">2</td></tr><tr><td style=\"vertical-align:top\">3</td></tr><tr><td style=\"vertical-align:top\">4</td></tr><tr><td style=\"vertical-align:top\">0</td></tr><tr><td style=\"vertical-align:top\">1</td></tr><tr><td style=\"vertical-align:top\">2</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539389\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"Y\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"}],\"nrow\":10,\"ncol\":1,\"is_formatted\":false},\"kotlin_dataframe\":[{\"Y\":1},{\"Y\":2},{\"Y\":0},{\"Y\":1},{\"Y\":2},{\"Y\":3},{\"Y\":4},{\"Y\":0},{\"Y\":1},{\"Y\":2}]}"
|
|
},
|
|
"execution_count": 37,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 37
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"**28.** Consider the DataFrame constructed below, which contains rows and columns of numerical data.\n",
|
|
"\n",
|
|
"Create a list of the column-row index locations of the three largest values in this DataFrame.\n",
|
|
"\n",
|
|
"In this case, the answer should be:\n",
|
|
"```\n",
|
|
"[(0, d), (2, c), (3, f)]\n",
|
|
"```"
|
|
]
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:54.071017006Z",
|
|
"start_time": "2025-12-18T11:19:53.641692715Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_97_jupyter",
|
|
"Line_98_jupyter",
|
|
"Line_99_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"val names = ('a'..'h').map { it.toString() } // val names = (0..7).map { it.toString() }\n",
|
|
"val random = Random(30)\n",
|
|
"val list = List(64) { random.nextInt(1, 101) }\n",
|
|
"val df = dataFrameOf(names)(*list.toTypedArray())\n",
|
|
"df"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_65()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_65\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539392"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataFrame: rowsCount = 8, columnsCount = 8</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"a: Int\">a</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">43</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">6</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">49</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">92</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">4</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">55</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">18</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">19</span></span>"] }, \n",
|
|
"{ name: "<span title=\"b: Int\">b</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">88</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">63</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">59</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">41</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">59</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">74</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">64</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">76</span></span>"] }, \n",
|
|
"{ name: "<span title=\"c: Int\">c</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">66</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">43</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">100</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">13</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">72</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">33</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">91</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">75</span></span>"] }, \n",
|
|
"{ name: "<span title=\"d: Int\">d</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">100</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">58</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">52</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">57</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">65</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">66</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">39</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">18</span></span>"] }, \n",
|
|
"{ name: "<span title=\"e: Int\">e</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">9</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">4</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">28</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">28</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">50</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">17</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">80</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">32</span></span>"] }, \n",
|
|
"{ name: "<span title=\"f: Int\">f</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">59</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">85</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">1</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">97</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">35</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">39</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">55</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">97</span></span>"] }, \n",
|
|
"{ name: "<span title=\"g: Int\">g</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">74</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">9</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">19</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">63</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">14</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">80</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">65</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">1</span></span>"] }, \n",
|
|
"{ name: "<span title=\"h: Int\">h</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">23</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">25</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">81</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">39</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">31</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">38</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">32</span></span>"] }, \n",
|
|
"], id: 486539392, rootId: 486539392, totalRows: 8 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539392) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_65() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_65\");\n",
|
|
" resize_iframe_out_65(elem);\n",
|
|
" setInterval(resize_iframe_out_65, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_65(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539393\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">a</th><th class=\"bottomBorder\" style=\"text-align:left\">b</th><th class=\"bottomBorder\" style=\"text-align:left\">c</th><th class=\"bottomBorder\" style=\"text-align:left\">d</th><th class=\"bottomBorder\" style=\"text-align:left\">e</th><th class=\"bottomBorder\" style=\"text-align:left\">f</th><th class=\"bottomBorder\" style=\"text-align:left\">g</th><th class=\"bottomBorder\" style=\"text-align:left\">h</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">43</td><td style=\"vertical-align:top\">88</td><td style=\"vertical-align:top\">66</td><td style=\"vertical-align:top\">100</td><td style=\"vertical-align:top\">9</td><td style=\"vertical-align:top\">59</td><td style=\"vertical-align:top\">74</td><td style=\"vertical-align:top\">23</td></tr><tr><td style=\"vertical-align:top\">6</td><td style=\"vertical-align:top\">63</td><td style=\"vertical-align:top\">43</td><td style=\"vertical-align:top\">58</td><td style=\"vertical-align:top\">4</td><td style=\"vertical-align:top\">85</td><td style=\"vertical-align:top\">9</td><td style=\"vertical-align:top\">25</td></tr><tr><td style=\"vertical-align:top\">49</td><td style=\"vertical-align:top\">59</td><td style=\"vertical-align:top\">100</td><td style=\"vertical-align:top\">52</td><td style=\"vertical-align:top\">28</td><td style=\"vertical-align:top\">1</td><td style=\"vertical-align:top\">19</td><td style=\"vertical-align:top\">81</td></tr><tr><td style=\"vertical-align:top\">92</td><td style=\"vertical-align:top\">41</td><td style=\"vertical-align:top\">13</td><td style=\"vertical-align:top\">57</td><td style=\"vertical-align:top\">28</td><td style=\"vertical-align:top\">97</td><td style=\"vertical-align:top\">63</td><td style=\"vertical-align:top\">39</td></tr><tr><td style=\"vertical-align:top\">4</td><td style=\"vertical-align:top\">59</td><td style=\"vertical-align:top\">72</td><td style=\"vertical-align:top\">65</td><td style=\"vertical-align:top\">50</td><td style=\"vertical-align:top\">35</td><td style=\"vertical-align:top\">14</td><td style=\"vertical-align:top\">31</td></tr><tr><td style=\"vertical-align:top\">55</td><td style=\"vertical-align:top\">74</td><td style=\"vertical-align:top\">33</td><td style=\"vertical-align:top\">66</td><td style=\"vertical-align:top\">17</td><td style=\"vertical-align:top\">39</td><td style=\"vertical-align:top\">80</td><td style=\"vertical-align:top\">38</td></tr><tr><td style=\"vertical-align:top\">18</td><td style=\"vertical-align:top\">64</td><td style=\"vertical-align:top\">91</td><td style=\"vertical-align:top\">39</td><td style=\"vertical-align:top\">80</td><td style=\"vertical-align:top\">55</td><td style=\"vertical-align:top\">65</td><td style=\"vertical-align:top\">2</td></tr><tr><td style=\"vertical-align:top\">19</td><td style=\"vertical-align:top\">76</td><td style=\"vertical-align:top\">75</td><td style=\"vertical-align:top\">18</td><td style=\"vertical-align:top\">32</td><td style=\"vertical-align:top\">97</td><td style=\"vertical-align:top\">1</td><td style=\"vertical-align:top\">32</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539393\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"}],\"nrow\":8,\"ncol\":8,\"is_formatted\":false},\"kotlin_dataframe\":[{\"a\":43,\"b\":88,\"c\":66,\"d\":100,\"e\":9,\"f\":59,\"g\":74,\"h\":23},{\"a\":6,\"b\":63,\"c\":43,\"d\":58,\"e\":4,\"f\":85,\"g\":9,\"h\":25},{\"a\":49,\"b\":59,\"c\":100,\"d\":52,\"e\":28,\"f\":1,\"g\":19,\"h\":81},{\"a\":92,\"b\":41,\"c\":13,\"d\":57,\"e\":28,\"f\":97,\"g\":63,\"h\":39},{\"a\":4,\"b\":59,\"c\":72,\"d\":65,\"e\":50,\"f\":35,\"g\":14,\"h\":31},{\"a\":55,\"b\":74,\"c\":33,\"d\":66,\"e\":17,\"f\":39,\"g\":80,\"h\":38},{\"a\":18,\"b\":64,\"c\":91,\"d\":39,\"e\":80,\"f\":55,\"g\":65,\"h\":2},{\"a\":19,\"b\":76,\"c\":75,\"d\":18,\"e\":32,\"f\":97,\"g\":1,\"h\":32}]}"
|
|
},
|
|
"execution_count": 38,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 38
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:54.475257403Z",
|
|
"start_time": "2025-12-18T11:19:54.139804923Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_101_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"df.add(\"index\") { index() }\n",
|
|
" .gather { dropLast() }.into(\"name\", \"vals\")\n",
|
|
" .sortByDesc(\"vals\").take(3)[\"index\", \"name\"]"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_67()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_67\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539396"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataFrame: rowsCount = 3, columnsCount = 2</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"index: Int\">index</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3</span></span>"] }, \n",
|
|
"{ name: "<span title=\"name: String\">name</span>", children: [], rightAlign: false, values: ["d","c","f"] }, \n",
|
|
"], id: 486539396, rootId: 486539396, totalRows: 3 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539396) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_67() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_67\");\n",
|
|
" resize_iframe_out_67(elem);\n",
|
|
" setInterval(resize_iframe_out_67, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_67(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539397\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">index</th><th class=\"bottomBorder\" style=\"text-align:left\">name</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">0</td><td style=\"vertical-align:top\">d</td></tr><tr><td style=\"vertical-align:top\">2</td><td style=\"vertical-align:top\">c</td></tr><tr><td style=\"vertical-align:top\">3</td><td style=\"vertical-align:top\">f</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539397\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"index\",\"name\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"}],\"nrow\":3,\"ncol\":2,\"is_formatted\":false},\"kotlin_dataframe\":[{\"index\":0,\"name\":\"d\"},{\"index\":2,\"name\":\"c\"},{\"index\":3,\"name\":\"f\"}]}"
|
|
},
|
|
"execution_count": 39,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 39
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"**29.** You are given the DataFrame below with a column of group IDs, 'grps', and a column of corresponding integer values 'vals'.\n",
|
|
"\n",
|
|
"```kotlin\n",
|
|
"val random = Random(31)\n",
|
|
"val lab = listOf(\"A\", \"B\")\n",
|
|
"\n",
|
|
"val vals by columnOf(List(15) { random.nextInt(-30, 30) })\n",
|
|
"val grps by columnOf(List(15) { lab[random.nextInt(0, 2)] })\n",
|
|
"\n",
|
|
"val df = dataFrameOf(vals, grps)\n",
|
|
"```\n",
|
|
"\n",
|
|
"Create a new column 'patched_values' which contains the same values as the 'vals' any negative values in 'vals' with the group mean:\n",
|
|
"\n",
|
|
"```\n",
|
|
"vals grps patched_vals\n",
|
|
" -17 B 21.0\n",
|
|
" -7 B 21.0\n",
|
|
" 28 B 28.0\n",
|
|
" 16 B 16.0\n",
|
|
" -21 B 21.0\n",
|
|
" 19 B 19.0\n",
|
|
" -2 B 21.0\n",
|
|
" -19 B 21.0\n",
|
|
" 16 A 16.0\n",
|
|
" 9 A 9.0\n",
|
|
" -14 A 16.0\n",
|
|
" -19 A 16.0\n",
|
|
" -22 A 16.0\n",
|
|
" -1 A 16.0\n",
|
|
" 23 A 23.0\n",
|
|
"```"
|
|
]
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:55.074975184Z",
|
|
"start_time": "2025-12-18T11:19:54.581439706Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_103_jupyter",
|
|
"Line_104_jupyter",
|
|
"Line_105_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"val random = Random(31)\n",
|
|
"val lab = listOf(\"A\", \"B\")\n",
|
|
"\n",
|
|
"val vals by columnOf(*Array(15) { random.nextInt(-30, 30) })\n",
|
|
"val grps by columnOf(*Array(15) { lab[random.nextInt(0, 2)] })\n",
|
|
"\n",
|
|
"val df = dataFrameOf(vals, grps)\n",
|
|
"df"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_69()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_69\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539400"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataFrame: rowsCount = 15, columnsCount = 2</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"vals: Int\">vals</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">-17</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-7</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">16</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">28</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">9</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">16</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-21</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-14</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-19</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-22</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">19</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-2</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-1</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-19</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">23</span></span>"] }, \n",
|
|
"{ name: "<span title=\"grps: String\">grps</span>", children: [], rightAlign: false, values: ["B","B","A","B","A","B","B","A","A","A","B","B","A","B","A"] }, \n",
|
|
"], id: 486539400, rootId: 486539400, totalRows: 15 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539400) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_69() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_69\");\n",
|
|
" resize_iframe_out_69(elem);\n",
|
|
" setInterval(resize_iframe_out_69, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_69(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539401\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">vals</th><th class=\"bottomBorder\" style=\"text-align:left\">grps</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">-17</td><td style=\"vertical-align:top\">B</td></tr><tr><td style=\"vertical-align:top\">-7</td><td style=\"vertical-align:top\">B</td></tr><tr><td style=\"vertical-align:top\">16</td><td style=\"vertical-align:top\">A</td></tr><tr><td style=\"vertical-align:top\">28</td><td style=\"vertical-align:top\">B</td></tr><tr><td style=\"vertical-align:top\">9</td><td style=\"vertical-align:top\">A</td></tr><tr><td style=\"vertical-align:top\">16</td><td style=\"vertical-align:top\">B</td></tr><tr><td style=\"vertical-align:top\">-21</td><td style=\"vertical-align:top\">B</td></tr><tr><td style=\"vertical-align:top\">-14</td><td style=\"vertical-align:top\">A</td></tr><tr><td style=\"vertical-align:top\">-19</td><td style=\"vertical-align:top\">A</td></tr><tr><td style=\"vertical-align:top\">-22</td><td style=\"vertical-align:top\">A</td></tr><tr><td style=\"vertical-align:top\">19</td><td style=\"vertical-align:top\">B</td></tr><tr><td style=\"vertical-align:top\">-2</td><td style=\"vertical-align:top\">B</td></tr><tr><td style=\"vertical-align:top\">-1</td><td style=\"vertical-align:top\">A</td></tr><tr><td style=\"vertical-align:top\">-19</td><td style=\"vertical-align:top\">B</td></tr><tr><td style=\"vertical-align:top\">23</td><td style=\"vertical-align:top\">A</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539401\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"vals\",\"grps\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"}],\"nrow\":15,\"ncol\":2,\"is_formatted\":false},\"kotlin_dataframe\":[{\"vals\":-17,\"grps\":\"B\"},{\"vals\":-7,\"grps\":\"B\"},{\"vals\":16,\"grps\":\"A\"},{\"vals\":28,\"grps\":\"B\"},{\"vals\":9,\"grps\":\"A\"},{\"vals\":16,\"grps\":\"B\"},{\"vals\":-21,\"grps\":\"B\"},{\"vals\":-14,\"grps\":\"A\"},{\"vals\":-19,\"grps\":\"A\"},{\"vals\":-22,\"grps\":\"A\"},{\"vals\":19,\"grps\":\"B\"},{\"vals\":-2,\"grps\":\"B\"},{\"vals\":-1,\"grps\":\"A\"},{\"vals\":-19,\"grps\":\"B\"},{\"vals\":23,\"grps\":\"A\"}]}"
|
|
},
|
|
"execution_count": 40,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 40
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:55.629440336Z",
|
|
"start_time": "2025-12-18T11:19:55.172126724Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_107_jupyter",
|
|
"Line_108_jupyter",
|
|
"Line_109_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"val means = df.filter { vals >= 0 }\n",
|
|
" .groupBy { grps }.mean()\n",
|
|
" .pivot { grps }.values { vals }\n",
|
|
"\n",
|
|
"df.add(\"patched_values\") {\n",
|
|
" if (vals < 0) means[grps] else vals.toDouble()\n",
|
|
"}"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_71()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_71\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539404"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataFrame: rowsCount = 15, columnsCount = 3</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"vals: Int\">vals</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">-17</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-7</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">16</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">28</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">9</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">16</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-21</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-14</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-19</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-22</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">19</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-2</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-1</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-19</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">23</span></span>"] }, \n",
|
|
"{ name: "<span title=\"grps: String\">grps</span>", children: [], rightAlign: false, values: ["B","B","A","B","A","B","B","A","A","A","B","B","A","B","A"] }, \n",
|
|
"{ name: "<span title=\"patched_values: Any\">patched_values</span>", children: [], rightAlign: false, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">21.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">21.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">16.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">28.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">9.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">16.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">21.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">16.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">16.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">16.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">19.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">21.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">16.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">21.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">23.0</span></span>"] }, \n",
|
|
"], id: 486539404, rootId: 486539404, totalRows: 15 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539404) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_71() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_71\");\n",
|
|
" resize_iframe_out_71(elem);\n",
|
|
" setInterval(resize_iframe_out_71, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_71(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539405\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">vals</th><th class=\"bottomBorder\" style=\"text-align:left\">grps</th><th class=\"bottomBorder\" style=\"text-align:left\">patched_values</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">-17</td><td style=\"vertical-align:top\">B</td><td style=\"vertical-align:top\">21.000000</td></tr><tr><td style=\"vertical-align:top\">-7</td><td style=\"vertical-align:top\">B</td><td style=\"vertical-align:top\">21.000000</td></tr><tr><td style=\"vertical-align:top\">16</td><td style=\"vertical-align:top\">A</td><td style=\"vertical-align:top\">16.000000</td></tr><tr><td style=\"vertical-align:top\">28</td><td style=\"vertical-align:top\">B</td><td style=\"vertical-align:top\">28.000000</td></tr><tr><td style=\"vertical-align:top\">9</td><td style=\"vertical-align:top\">A</td><td style=\"vertical-align:top\">9.000000</td></tr><tr><td style=\"vertical-align:top\">16</td><td style=\"vertical-align:top\">B</td><td style=\"vertical-align:top\">16.000000</td></tr><tr><td style=\"vertical-align:top\">-21</td><td style=\"vertical-align:top\">B</td><td style=\"vertical-align:top\">21.000000</td></tr><tr><td style=\"vertical-align:top\">-14</td><td style=\"vertical-align:top\">A</td><td style=\"vertical-align:top\">16.000000</td></tr><tr><td style=\"vertical-align:top\">-19</td><td style=\"vertical-align:top\">A</td><td style=\"vertical-align:top\">16.000000</td></tr><tr><td style=\"vertical-align:top\">-22</td><td style=\"vertical-align:top\">A</td><td style=\"vertical-align:top\">16.000000</td></tr><tr><td style=\"vertical-align:top\">19</td><td style=\"vertical-align:top\">B</td><td style=\"vertical-align:top\">19.000000</td></tr><tr><td style=\"vertical-align:top\">-2</td><td style=\"vertical-align:top\">B</td><td style=\"vertical-align:top\">21.000000</td></tr><tr><td style=\"vertical-align:top\">-1</td><td style=\"vertical-align:top\">A</td><td style=\"vertical-align:top\">16.000000</td></tr><tr><td style=\"vertical-align:top\">-19</td><td style=\"vertical-align:top\">B</td><td style=\"vertical-align:top\">21.000000</td></tr><tr><td style=\"vertical-align:top\">23</td><td style=\"vertical-align:top\">A</td><td style=\"vertical-align:top\">23.000000</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539405\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"vals\",\"grps\",\"patched_values\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Any\"}],\"nrow\":15,\"ncol\":3,\"is_formatted\":false},\"kotlin_dataframe\":[{\"vals\":-17,\"grps\":\"B\",\"patched_values\":\"21.0\"},{\"vals\":-7,\"grps\":\"B\",\"patched_values\":\"21.0\"},{\"vals\":16,\"grps\":\"A\",\"patched_values\":\"16.0\"},{\"vals\":28,\"grps\":\"B\",\"patched_values\":\"28.0\"},{\"vals\":9,\"grps\":\"A\",\"patched_values\":\"9.0\"},{\"vals\":16,\"grps\":\"B\",\"patched_values\":\"16.0\"},{\"vals\":-21,\"grps\":\"B\",\"patched_values\":\"21.0\"},{\"vals\":-14,\"grps\":\"A\",\"patched_values\":\"16.0\"},{\"vals\":-19,\"grps\":\"A\",\"patched_values\":\"16.0\"},{\"vals\":-22,\"grps\":\"A\",\"patched_values\":\"16.0\"},{\"vals\":19,\"grps\":\"B\",\"patched_values\":\"19.0\"},{\"vals\":-2,\"grps\":\"B\",\"patched_values\":\"21.0\"},{\"vals\":-1,\"grps\":\"A\",\"patched_values\":\"16.0\"},{\"vals\":-19,\"grps\":\"B\",\"patched_values\":\"21.0\"},{\"vals\":23,\"grps\":\"A\",\"patched_values\":\"23.0\"}]}"
|
|
},
|
|
"execution_count": 41,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 41
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"**30.** Implement a rolling mean over groups with window size 3, which ignores NaN value. For example, consider the following DataFrame:\n",
|
|
"```kotlin\n",
|
|
"val df = dataFrameOf(\n",
|
|
" \"groups\" to columnOf(\"a\", \"a\", \"b\", \"b\", \"a\", \"b\", \"b\", \"b\", \"a\", \"b\", \"a\", \"b\"),\n",
|
|
" \"value\" to columnOf(1.0, 2.0, 3.0, Double.NaN, 2.0, 3.0, Double.NaN, 1.0, 7.0, 3.0, Double.NaN, 8.0),\n",
|
|
")\n",
|
|
"df\n",
|
|
"\n",
|
|
"group value\n",
|
|
"a 1.0\n",
|
|
"a 2.0\n",
|
|
"b 3.0\n",
|
|
"b NaN\n",
|
|
"a 2.0\n",
|
|
"b 3.0\n",
|
|
"b NaN\n",
|
|
"b 1.0\n",
|
|
"a 7.0\n",
|
|
"b 3.0\n",
|
|
"a NaN\n",
|
|
"b 8.0\n",
|
|
"```\n",
|
|
"The goal is:\n",
|
|
"```\n",
|
|
"1.000000\n",
|
|
"1.500000\n",
|
|
"3.000000\n",
|
|
"3.000000\n",
|
|
"1.666667\n",
|
|
"3.000000\n",
|
|
"3.000000\n",
|
|
"2.000000\n",
|
|
"3.666667\n",
|
|
"2.000000\n",
|
|
"4.500000\n",
|
|
"4.000000\n",
|
|
"```\n",
|
|
"E.g., the first window of size three for group 'b' has values 3.0, NaN and 3.0 and occurs at row index 5.\n",
|
|
"Instead of being NaN, the value in the new column at this row index should be 3.0 (just the two non-NaN values are used to compute the mean (3+3)/2)"
|
|
]
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:56.047538523Z",
|
|
"start_time": "2025-12-18T11:19:55.719618410Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_111_jupyter",
|
|
"Line_112_jupyter",
|
|
"Line_113_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"val df = dataFrameOf(\n",
|
|
" \"groups\" to columnOf(\"a\", \"a\", \"b\", \"b\", \"a\", \"b\", \"b\", \"b\", \"a\", \"b\", \"a\", \"b\"),\n",
|
|
" \"value\" to columnOf(1.0, 2.0, 3.0, Double.NaN, 2.0, 3.0, Double.NaN, 1.0, 7.0, 3.0, Double.NaN, 8.0),\n",
|
|
")\n",
|
|
"df"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_73()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_73\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539408"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataFrame: rowsCount = 12, columnsCount = 2</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"groups: String\">groups</span>", children: [], rightAlign: false, values: ["a","a","b","b","a","b","b","b","a","b","a","b"] }, \n",
|
|
"{ name: "<span title=\"value: Double\">value</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">1.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">1.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">7.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">8.0</span></span>"] }, \n",
|
|
"], id: 486539408, rootId: 486539408, totalRows: 12 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539408) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_73() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_73\");\n",
|
|
" resize_iframe_out_73(elem);\n",
|
|
" setInterval(resize_iframe_out_73, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_73(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539409\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">groups</th><th class=\"bottomBorder\" style=\"text-align:left\">value</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">a</td><td style=\"vertical-align:top\">1.000000</td></tr><tr><td style=\"vertical-align:top\">a</td><td style=\"vertical-align:top\">2.000000</td></tr><tr><td style=\"vertical-align:top\">b</td><td style=\"vertical-align:top\">3.000000</td></tr><tr><td style=\"vertical-align:top\">b</td><td style=\"vertical-align:top\">NaN</td></tr><tr><td style=\"vertical-align:top\">a</td><td style=\"vertical-align:top\">2.000000</td></tr><tr><td style=\"vertical-align:top\">b</td><td style=\"vertical-align:top\">3.000000</td></tr><tr><td style=\"vertical-align:top\">b</td><td style=\"vertical-align:top\">NaN</td></tr><tr><td style=\"vertical-align:top\">b</td><td style=\"vertical-align:top\">1.000000</td></tr><tr><td style=\"vertical-align:top\">a</td><td style=\"vertical-align:top\">7.000000</td></tr><tr><td style=\"vertical-align:top\">b</td><td style=\"vertical-align:top\">3.000000</td></tr><tr><td style=\"vertical-align:top\">a</td><td style=\"vertical-align:top\">NaN</td></tr><tr><td style=\"vertical-align:top\">b</td><td style=\"vertical-align:top\">8.000000</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539409\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"groups\",\"value\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"}],\"nrow\":12,\"ncol\":2,\"is_formatted\":false},\"kotlin_dataframe\":[{\"groups\":\"a\",\"value\":1.0},{\"groups\":\"a\",\"value\":2.0},{\"groups\":\"b\",\"value\":3.0},{\"groups\":\"b\",\"value\":NaN},{\"groups\":\"a\",\"value\":2.0},{\"groups\":\"b\",\"value\":3.0},{\"groups\":\"b\",\"value\":NaN},{\"groups\":\"b\",\"value\":1.0},{\"groups\":\"a\",\"value\":7.0},{\"groups\":\"b\",\"value\":3.0},{\"groups\":\"a\",\"value\":NaN},{\"groups\":\"b\",\"value\":8.0}]}"
|
|
},
|
|
"execution_count": 42,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 42
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:56.601931010Z",
|
|
"start_time": "2025-12-18T11:19:56.148703247Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_115_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"df.add(\"id\") { index() }\n",
|
|
" .groupBy { groups }.add(\"res\") {\n",
|
|
" relative(-2..0).value.filter { !it.isNaN() }.mean()\n",
|
|
" }.concat()\n",
|
|
" .sortBy(\"id\")\n",
|
|
" .remove(\"id\")"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_75()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_75\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539412"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataFrame: rowsCount = 12, columnsCount = 3</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"groups: String\">groups</span>", children: [], rightAlign: false, values: ["a","a","b","b","a","b","b","b","a","b","a","b"] }, \n",
|
|
"{ name: "<span title=\"value: Double\">value</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">1.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">1.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">7.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">8.0</span></span>"] }, \n",
|
|
"{ name: "<span title=\"res: Double\">res</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">1.000000</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">1.500000</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3.000000</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3.000000</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">1.666667</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3.000000</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3.000000</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2.000000</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3.666667</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2.000000</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">4.500000</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">4.000000</span></span>"] }, \n",
|
|
"], id: 486539412, rootId: 486539412, totalRows: 12 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539412) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_75() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_75\");\n",
|
|
" resize_iframe_out_75(elem);\n",
|
|
" setInterval(resize_iframe_out_75, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_75(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539413\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">groups</th><th class=\"bottomBorder\" style=\"text-align:left\">value</th><th class=\"bottomBorder\" style=\"text-align:left\">res</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">a</td><td style=\"vertical-align:top\">1.000000</td><td style=\"vertical-align:top\">1.000000</td></tr><tr><td style=\"vertical-align:top\">a</td><td style=\"vertical-align:top\">2.000000</td><td style=\"vertical-align:top\">1.500000</td></tr><tr><td style=\"vertical-align:top\">b</td><td style=\"vertical-align:top\">3.000000</td><td style=\"vertical-align:top\">3.000000</td></tr><tr><td style=\"vertical-align:top\">b</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">3.000000</td></tr><tr><td style=\"vertical-align:top\">a</td><td style=\"vertical-align:top\">2.000000</td><td style=\"vertical-align:top\">1.666667</td></tr><tr><td style=\"vertical-align:top\">b</td><td style=\"vertical-align:top\">3.000000</td><td style=\"vertical-align:top\">3.000000</td></tr><tr><td style=\"vertical-align:top\">b</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">3.000000</td></tr><tr><td style=\"vertical-align:top\">b</td><td style=\"vertical-align:top\">1.000000</td><td style=\"vertical-align:top\">2.000000</td></tr><tr><td style=\"vertical-align:top\">a</td><td style=\"vertical-align:top\">7.000000</td><td style=\"vertical-align:top\">3.666667</td></tr><tr><td style=\"vertical-align:top\">b</td><td style=\"vertical-align:top\">3.000000</td><td style=\"vertical-align:top\">2.000000</td></tr><tr><td style=\"vertical-align:top\">a</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">4.500000</td></tr><tr><td style=\"vertical-align:top\">b</td><td style=\"vertical-align:top\">8.000000</td><td style=\"vertical-align:top\">4.000000</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539413\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"groups\",\"value\",\"res\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"}],\"nrow\":12,\"ncol\":3,\"is_formatted\":false},\"kotlin_dataframe\":[{\"groups\":\"a\",\"value\":1.0,\"res\":1.0},{\"groups\":\"a\",\"value\":2.0,\"res\":1.5},{\"groups\":\"b\",\"value\":3.0,\"res\":3.0},{\"groups\":\"b\",\"value\":NaN,\"res\":3.0},{\"groups\":\"a\",\"value\":2.0,\"res\":1.6666666666666667},{\"groups\":\"b\",\"value\":3.0,\"res\":3.0},{\"groups\":\"b\",\"value\":NaN,\"res\":3.0},{\"groups\":\"b\",\"value\":1.0,\"res\":2.0},{\"groups\":\"a\",\"value\":7.0,\"res\":3.6666666666666665},{\"groups\":\"b\",\"value\":3.0,\"res\":2.0},{\"groups\":\"a\",\"value\":NaN,\"res\":4.5},{\"groups\":\"b\",\"value\":8.0,\"res\":4.0}]}"
|
|
},
|
|
"execution_count": 43,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 43
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"## Date\n",
|
|
"Difficulty: easy/medium"
|
|
]
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": "**31.** Create a `LocalDate` column that contains each day of 2015 and a column of random numbers."
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:56.754450953Z",
|
|
"start_time": "2025-12-18T11:19:56.683121372Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_117_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": "import kotlinx.datetime.*",
|
|
"outputs": [],
|
|
"execution_count": 44
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:57.126047058Z",
|
|
"start_time": "2025-12-18T11:19:56.791536294Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_118_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"class DateRangeIterator(first: LocalDate, last: LocalDate, val step: Int) : Iterator<LocalDate> {\n",
|
|
" private val finalElement: LocalDate = last\n",
|
|
" private var hasNext: Boolean = if (step > 0) first <= last else first >= last\n",
|
|
" private var next: LocalDate = if (hasNext) first else finalElement\n",
|
|
"\n",
|
|
" override fun hasNext(): Boolean = hasNext\n",
|
|
"\n",
|
|
" override fun next(): LocalDate {\n",
|
|
" val value = next\n",
|
|
" if (value == finalElement) {\n",
|
|
" if (!hasNext) throw kotlin.NoSuchElementException()\n",
|
|
" hasNext = false\n",
|
|
" } else {\n",
|
|
" next = next.plus(step, DateTimeUnit.DayBased(1))\n",
|
|
" }\n",
|
|
" return value\n",
|
|
" }\n",
|
|
"}\n",
|
|
"\n",
|
|
"operator fun ClosedRange<LocalDate>.iterator() = DateRangeIterator(this.start, this.endInclusive, 1)\n",
|
|
"\n",
|
|
"fun ClosedRange<LocalDate>.toList(): List<LocalDate> {\n",
|
|
" return when (val size = this.start.daysUntil(this.endInclusive)) {\n",
|
|
" 0 -> emptyList()\n",
|
|
" 1 -> listOf(iterator().next())\n",
|
|
" else -> {\n",
|
|
" val dest = ArrayList<LocalDate>(size)\n",
|
|
" for (item in this) {\n",
|
|
" dest.add(item)\n",
|
|
" }\n",
|
|
" dest\n",
|
|
" }\n",
|
|
" }\n",
|
|
"}"
|
|
],
|
|
"outputs": [],
|
|
"execution_count": 45
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:57.565043672Z",
|
|
"start_time": "2025-12-18T11:19:57.140265113Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_119_jupyter",
|
|
"Line_120_jupyter",
|
|
"Line_121_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"val start = LocalDate(2015, 1, 1)\n",
|
|
"val end = LocalDate(2016, 1, 1)\n",
|
|
"\n",
|
|
"val days = (start..end).toList()\n",
|
|
"\n",
|
|
"val df = dataFrameOf(\n",
|
|
" \"dti\" to days.toColumn(),\n",
|
|
" \"s\" to List(days.size) { Random.nextDouble() }.toColumn()\n",
|
|
")\n",
|
|
"df.head()"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_77()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_77\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539416"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataFrame: rowsCount = 5, columnsCount = 2</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"dti: kotlinx.datetime.LocalDate\">dti</span>", children: [], rightAlign: false, values: ["2015-01-01","2015-01-02","2015-01-03","2015-01-04","2015-01-05"] }, \n",
|
|
"{ name: "<span title=\"s: Double\">s</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.799701</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.542949</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.813556</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.898062</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.539191</span></span>"] }, \n",
|
|
"], id: 486539416, rootId: 486539416, totalRows: 5 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539416) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_77() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_77\");\n",
|
|
" resize_iframe_out_77(elem);\n",
|
|
" setInterval(resize_iframe_out_77, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_77(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539417\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">dti</th><th class=\"bottomBorder\" style=\"text-align:left\">s</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">2015-01-01</td><td style=\"vertical-align:top\">0.799701</td></tr><tr><td style=\"vertical-align:top\">2015-01-02</td><td style=\"vertical-align:top\">0.542949</td></tr><tr><td style=\"vertical-align:top\">2015-01-03</td><td style=\"vertical-align:top\">0.813556</td></tr><tr><td style=\"vertical-align:top\">2015-01-04</td><td style=\"vertical-align:top\">0.898062</td></tr><tr><td style=\"vertical-align:top\">2015-01-05</td><td style=\"vertical-align:top\">0.539191</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539417\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"dti\",\"s\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlinx.datetime.LocalDate\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"}],\"nrow\":5,\"ncol\":2,\"is_formatted\":false},\"kotlin_dataframe\":[{\"dti\":\"2015-01-01\",\"s\":0.7997012481451563},{\"dti\":\"2015-01-02\",\"s\":0.542948925540349},{\"dti\":\"2015-01-03\",\"s\":0.8135564640710455},{\"dti\":\"2015-01-04\",\"s\":0.8980617499274379},{\"dti\":\"2015-01-05\",\"s\":0.5391906092303334}]}"
|
|
},
|
|
"execution_count": 46,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 46
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": "**32.** Find the sum of the values in `s` for every Wednesday."
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:57.887949175Z",
|
|
"start_time": "2025-12-18T11:19:57.627409636Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_123_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": "df.filter { dti.dayOfWeek == DayOfWeek.WEDNESDAY }.sum { s }",
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"25.543176247723252"
|
|
]
|
|
},
|
|
"execution_count": 47,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 47
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": "**33.** For each calendar month in `s`, find the mean of values."
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:58.114859437Z",
|
|
"start_time": "2025-12-18T11:19:57.914142752Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_124_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": "df.groupBy { dti.map { it.month } named \"month\" }.mean()",
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_79()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_79\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539420"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataFrame: rowsCount = 12, columnsCount = 2</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"month: kotlinx.datetime.Month\">month</span>", children: [], rightAlign: false, values: ["JANUARY","FEBRUARY","MARCH","APRIL","MAY","JUNE","JULY","AUGUST","SEPTEMBER","OCTOBER","NOVEMBER","DECEMBER"] }, \n",
|
|
"{ name: "<span title=\"s: Double\">s</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.537513</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.524215</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.459084</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.539626</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.425648</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.489793</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.460490</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.433911</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.475016</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.556229</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.396961</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.521459</span></span>"] }, \n",
|
|
"], id: 486539420, rootId: 486539420, totalRows: 12 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539420) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_79() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_79\");\n",
|
|
" resize_iframe_out_79(elem);\n",
|
|
" setInterval(resize_iframe_out_79, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_79(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539421\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">month</th><th class=\"bottomBorder\" style=\"text-align:left\">s</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">JANUARY</td><td style=\"vertical-align:top\">0.537513</td></tr><tr><td style=\"vertical-align:top\">FEBRUARY</td><td style=\"vertical-align:top\">0.524215</td></tr><tr><td style=\"vertical-align:top\">MARCH</td><td style=\"vertical-align:top\">0.459084</td></tr><tr><td style=\"vertical-align:top\">APRIL</td><td style=\"vertical-align:top\">0.539626</td></tr><tr><td style=\"vertical-align:top\">MAY</td><td style=\"vertical-align:top\">0.425648</td></tr><tr><td style=\"vertical-align:top\">JUNE</td><td style=\"vertical-align:top\">0.489793</td></tr><tr><td style=\"vertical-align:top\">JULY</td><td style=\"vertical-align:top\">0.460490</td></tr><tr><td style=\"vertical-align:top\">AUGUST</td><td style=\"vertical-align:top\">0.433911</td></tr><tr><td style=\"vertical-align:top\">SEPTEMBER</td><td style=\"vertical-align:top\">0.475016</td></tr><tr><td style=\"vertical-align:top\">OCTOBER</td><td style=\"vertical-align:top\">0.556229</td></tr><tr><td style=\"vertical-align:top\">NOVEMBER</td><td style=\"vertical-align:top\">0.396961</td></tr><tr><td style=\"vertical-align:top\">DECEMBER</td><td style=\"vertical-align:top\">0.521459</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539421\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"month\",\"s\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlinx.datetime.Month\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"}],\"nrow\":12,\"ncol\":2,\"is_formatted\":false},\"kotlin_dataframe\":[{\"month\":\"JANUARY\",\"s\":0.5375128507100408},{\"month\":\"FEBRUARY\",\"s\":0.5242150349941221},{\"month\":\"MARCH\",\"s\":0.4590837094316621},{\"month\":\"APRIL\",\"s\":0.5396262610274204},{\"month\":\"MAY\",\"s\":0.42564847901454406},{\"month\":\"JUNE\",\"s\":0.48979324892116555},{\"month\":\"JULY\",\"s\":0.4604903807995807},{\"month\":\"AUGUST\",\"s\":0.4339111213149513},{\"month\":\"SEPTEMBER\",\"s\":0.4750157287398121},{\"month\":\"OCTOBER\",\"s\":0.5562291918749319},{\"month\":\"NOVEMBER\",\"s\":0.3969606206218127},{\"month\":\"DECEMBER\",\"s\":0.5214586359388804}]}"
|
|
},
|
|
"execution_count": 48,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 48
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": "**34.** For each group of four consecutive calendar months in `s`, find the date on which the highest value occurred."
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:58.536299106Z",
|
|
"start_time": "2025-12-18T11:19:58.230471525Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_126_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"df.add(\"month4\") {\n",
|
|
" when (dti.monthNumber) {\n",
|
|
" in 1..4 -> 1\n",
|
|
" in 5..8 -> 2\n",
|
|
" else -> 3\n",
|
|
" }\n",
|
|
"}.groupBy(\"month4\").aggregate { maxBy { s } into \"max\" }"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_81()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_81\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539424"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataFrame: rowsCount = 3, columnsCount = 2</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"month4: Int\">month4</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">1</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3</span></span>"] }, \n",
|
|
"{ name: "<span title=\"dti: kotlinx.datetime.LocalDate\">dti</span>", children: [], rightAlign: false, values: ["2015-03-22","2015-05-14","2015-12-16"] }, \n",
|
|
"{ name: "<span title=\"s: Double\">s</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.998280</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.991455</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.999891</span></span>"] }, \n",
|
|
"{ name: "<span title=\"month4: Int\">month4</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">1</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3</span></span>"] }, \n",
|
|
"{ name: "<span title=\"max: DataRow<*>\">max</span>", children: [1, 2, 3], rightAlign: false, values: ["<span class=\"formatted\" title=\"dti: 2015-03-22\ns: 0.9982800125376523\nmonth4: 1\"><span class=\"structural\">{ </span><span class=\"structural\">dti: </span>2015-03-22<span class=\"structural\">, </span><span class=\"structural\">s: </span><span class=\"numbers\">1.0</span><span class=\"structural\">, </span><span class=\"structural\">month4: </span><span class=\"numbers\">1</span><span class=\"structural\"> }</span></span>","<span class=\"formatted\" title=\"dti: 2015-05-14\ns: 0.9914549696180743\nmonth4: 2\"><span class=\"structural\">{ </span><span class=\"structural\">dti: </span>2015-05-14<span class=\"structural\">, </span><span class=\"structural\">s: </span><span class=\"numbers\">1.0</span><span class=\"structural\">, </span><span class=\"structural\">month4: </span><span class=\"numbers\">2</span><span class=\"structural\"> }</span></span>","<span class=\"formatted\" title=\"dti: 2015-12-16\ns: 0.9998914835120076\nmonth4: 3\"><span class=\"structural\">{ </span><span class=\"structural\">dti: </span>2015-12-16<span class=\"structural\">, </span><span class=\"structural\">s: </span><span class=\"numbers\">1.0</span><span class=\"structural\">, </span><span class=\"structural\">month4: </span><span class=\"numbers\">3</span><span class=\"structural\"> }</span></span>"] }, \n",
|
|
"], id: 486539424, rootId: 486539424, totalRows: 3 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539424) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_81() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_81\");\n",
|
|
" resize_iframe_out_81(elem);\n",
|
|
" setInterval(resize_iframe_out_81, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_81(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539425\"><thead><tr><th class=\"rightBorder\" style=\"text-align:left\">month4</th><th class=\"rightBorder leftBorder\" style=\"text-align:left\">max</th><th style=\"text-align:left\"></th><th style=\"text-align:left\"></th></tr><tr><th class=\"bottomBorder rightBorder\" style=\"text-align:left\"></th><th class=\"bottomBorder rightBorder leftBorder\" style=\"text-align:left\">dti</th><th class=\"bottomBorder\" style=\"text-align:left\">s</th><th class=\"bottomBorder\" style=\"text-align:left\">month4</th></tr></thead><tbody><tr><td class=\"rightBorder\" style=\"vertical-align:top\">1</td><td class=\"rightBorder leftBorder\" style=\"vertical-align:top\">2015-03-22</td><td style=\"vertical-align:top\">0.998280</td><td style=\"vertical-align:top\">1</td></tr><tr><td class=\"rightBorder\" style=\"vertical-align:top\">2</td><td class=\"rightBorder leftBorder\" style=\"vertical-align:top\">2015-05-14</td><td style=\"vertical-align:top\">0.991455</td><td style=\"vertical-align:top\">2</td></tr><tr><td class=\"rightBorder\" style=\"vertical-align:top\">3</td><td class=\"rightBorder leftBorder\" style=\"vertical-align:top\">2015-12-16</td><td style=\"vertical-align:top\">0.999891</td><td style=\"vertical-align:top\">3</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539425\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"month4\",\"max\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ColumnGroup\"}],\"nrow\":3,\"ncol\":2,\"is_formatted\":false},\"kotlin_dataframe\":[{\"month4\":1,\"max\":{\"data\":{\"dti\":\"2015-03-22\",\"s\":0.9982800125376523,\"month4\":1},\"metadata\":{\"kind\":\"ColumnGroup\",\"columns\":[\"dti\",\"s\",\"month4\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlinx.datetime.LocalDate\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"}]}}},{\"month4\":2,\"max\":{\"data\":{\"dti\":\"2015-05-14\",\"s\":0.9914549696180743,\"month4\":2},\"metadata\":{\"kind\":\"ColumnGroup\",\"columns\":[\"dti\",\"s\",\"month4\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlinx.datetime.LocalDate\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"}]}}},{\"month4\":3,\"max\":{\"data\":{\"dti\":\"2015-12-16\",\"s\":0.9998914835120076,\"month4\":3},\"metadata\":{\"kind\":\"ColumnGroup\",\"columns\":[\"dti\",\"s\",\"month4\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlinx.datetime.LocalDate\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"}]}}}]}"
|
|
},
|
|
"execution_count": 49,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 49
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": "**35.** Create a column consisting of the third Thursday in each month for the years 2015 and 2016."
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:58.720573737Z",
|
|
"start_time": "2025-12-18T11:19:58.641394272Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_128_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"import java.time.temporal.WeekFields\n",
|
|
"import java.util.*"
|
|
],
|
|
"outputs": [],
|
|
"execution_count": 50
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:59.016056372Z",
|
|
"start_time": "2025-12-18T11:19:58.722834006Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_129_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"val start = LocalDate(2015, 1, 1)\n",
|
|
"val end = LocalDate(2016, 12, 31)\n",
|
|
"\n",
|
|
"(start..end).toList().toColumn(\"thirdThursday\").filter {\n",
|
|
" it.toJavaLocalDate()[WeekFields.of(Locale.ENGLISH).weekOfMonth()] == 3\n",
|
|
" && it.dayOfWeek == DayOfWeek.THURSDAY\n",
|
|
"}"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_83()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_83\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539428"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">... showing only top 20 of 24 rows</p><p class="dataframe_description">DataColumn: name = "thirdThursday", type = kotlinx.datetime.LocalDate, size = 24</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"thirdThursday: kotlinx.datetime.LocalDate\">thirdThursday</span>", children: [], rightAlign: false, values: ["2015-01-15","2015-02-19","2015-03-19","2015-04-16","2015-05-14","2015-06-18","2015-07-16","2015-08-13","2015-09-17","2015-10-15","2015-11-19","2015-12-17","2016-01-14","2016-02-18","2016-03-17","2016-04-14","2016-05-19","2016-06-16","2016-07-14","2016-08-18"] }, \n",
|
|
"], id: 486539428, rootId: 486539428, totalRows: 24 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539428) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_83() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_83\");\n",
|
|
" resize_iframe_out_83(elem);\n",
|
|
" setInterval(resize_iframe_out_83, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_83(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539429\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">thirdThursday</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">2015-01-15</td></tr><tr><td style=\"vertical-align:top\">2015-02-19</td></tr><tr><td style=\"vertical-align:top\">2015-03-19</td></tr><tr><td style=\"vertical-align:top\">2015-04-16</td></tr><tr><td style=\"vertical-align:top\">2015-05-14</td></tr><tr><td style=\"vertical-align:top\">2015-06-18</td></tr><tr><td style=\"vertical-align:top\">2015-07-16</td></tr><tr><td style=\"vertical-align:top\">2015-08-13</td></tr><tr><td style=\"vertical-align:top\">2015-09-17</td></tr><tr><td style=\"vertical-align:top\">2015-10-15</td></tr><tr><td style=\"vertical-align:top\">2015-11-19</td></tr><tr><td style=\"vertical-align:top\">2015-12-17</td></tr><tr><td style=\"vertical-align:top\">2016-01-14</td></tr><tr><td style=\"vertical-align:top\">2016-02-18</td></tr><tr><td style=\"vertical-align:top\">2016-03-17</td></tr><tr><td style=\"vertical-align:top\">2016-04-14</td></tr><tr><td style=\"vertical-align:top\">2016-05-19</td></tr><tr><td style=\"vertical-align:top\">2016-06-16</td></tr><tr><td style=\"vertical-align:top\">2016-07-14</td></tr><tr><td style=\"vertical-align:top\">2016-08-18</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539429\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"thirdThursday\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlinx.datetime.LocalDate\"}],\"nrow\":24,\"ncol\":1,\"is_formatted\":false},\"kotlin_dataframe\":[{\"thirdThursday\":\"2015-01-15\"},{\"thirdThursday\":\"2015-02-19\"},{\"thirdThursday\":\"2015-03-19\"},{\"thirdThursday\":\"2015-04-16\"},{\"thirdThursday\":\"2015-05-14\"},{\"thirdThursday\":\"2015-06-18\"},{\"thirdThursday\":\"2015-07-16\"},{\"thirdThursday\":\"2015-08-13\"},{\"thirdThursday\":\"2015-09-17\"},{\"thirdThursday\":\"2015-10-15\"},{\"thirdThursday\":\"2015-11-19\"},{\"thirdThursday\":\"2015-12-17\"},{\"thirdThursday\":\"2016-01-14\"},{\"thirdThursday\":\"2016-02-18\"},{\"thirdThursday\":\"2016-03-17\"},{\"thirdThursday\":\"2016-04-14\"},{\"thirdThursday\":\"2016-05-19\"},{\"thirdThursday\":\"2016-06-16\"},{\"thirdThursday\":\"2016-07-14\"},{\"thirdThursday\":\"2016-08-18\"}]}"
|
|
},
|
|
"execution_count": 51,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 51
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"## Cleaning Data\n",
|
|
"### Making a dataframe easier to work with\n",
|
|
"Difficulty: *easy/medium*\n",
|
|
"\n",
|
|
"It happens all the time: someone gives you data containing malformed strings, lists and missing data. How do you tidy it up so you can get on with the analysis?\n",
|
|
"\n",
|
|
"Take this monstrosity of a dataframe to use in the following puzzles:\n",
|
|
"```kotlin\n",
|
|
"var df = dataFrameOf(\n",
|
|
" \"From_To\" to columnOf(\"LoNDon_paris\", \"MAdrid_miLAN\", \"londON_StockhOlm\", \"Budapest_PaRis\", \"Brussels_londOn\"),\n",
|
|
" \"FlightNumber\" to columnOf(10045.0, Double.NaN, 10065.0, Double.NaN, 10085.0),\n",
|
|
" \"RecentDelays\" to columnOf(listOf(23, 47), listOf(), listOf(24, 43, 87), listOf(13), listOf(67, 32)),\n",
|
|
" \"Airline\" to columnOf(\"KLM(!)\", \"{Air France} (12)\", \"(British Airways. )\", \"12. Air France\", \"'Swiss Air'\"),\n",
|
|
")\n",
|
|
"```\n",
|
|
"\n",
|
|
"It looks like this:\n",
|
|
"```\n",
|
|
"From_To FlightNumber RecentDelays Airline\n",
|
|
"LoNDon_paris 10045.000000 [23, 47] KLM(!)\n",
|
|
"MAdrid_miLAN NaN [] {Air France} (12)\n",
|
|
"londON_StockhOlm 10065.000000 [24, 43, 87] (British Airways. )\n",
|
|
"Budapest_PaRis NaN [13] 12. Air France\n",
|
|
"Brussels_londOn 10085.000000 [67, 32] 'Swiss Air'\n",
|
|
"```"
|
|
]
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:19:59.743092247Z",
|
|
"start_time": "2025-12-18T11:19:59.127837817Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_131_jupyter",
|
|
"Line_132_jupyter",
|
|
"Line_133_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"var df = dataFrameOf(\n",
|
|
" \"From_To\" to columnOf(\"LoNDon_paris\", \"MAdrid_miLAN\", \"londON_StockhOlm\", \"Budapest_PaRis\", \"Brussels_londOn\"),\n",
|
|
" \"FlightNumber\" to columnOf(10045.0, Double.NaN, 10065.0, Double.NaN, 10085.0),\n",
|
|
" \"RecentDelays\" to columnOf(listOf(23, 47), listOf(), listOf(24, 43, 87), listOf(13), listOf(67, 32)),\n",
|
|
" \"Airline\" to columnOf(\"KLM(!)\", \"{Air France} (12)\", \"(British Airways. )\", \"12. Air France\", \"'Swiss Air'\"),\n",
|
|
")\n",
|
|
"df"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_85()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_85\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539432"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataFrame: rowsCount = 5, columnsCount = 4</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"From_To: String\">From_To</span>", children: [], rightAlign: false, values: ["LoNDon_paris","MAdrid_miLAN","londON_StockhOlm","Budapest_PaRis","Brussels_londOn"] }, \n",
|
|
"{ name: "<span title=\"FlightNumber: Double\">FlightNumber</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">10045.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">10065.0</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">NaN</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">10085.0</span></span>"] }, \n",
|
|
"{ name: "<span title=\"RecentDelays: List<Int>\">RecentDelays</span>", children: [], rightAlign: false, values: ["<span class=\"formatted\" title=\"23\n47\"><span class=\"structural\">[</span><span class=\"numbers\">23</span><span class=\"structural\">, </span><span class=\"numbers\">47</span><span class=\"structural\">]</span></span>","<span class=\"formatted\" title=\"\"><span class=\"null\">[ ]</span></span>","<span class=\"formatted\" title=\"24\n43\n87\"><span class=\"structural\">[</span><span class=\"numbers\">24</span><span class=\"structural\">, </span><span class=\"numbers\">43</span><span class=\"structural\">, </span><span class=\"numbers\">87</span><span class=\"structural\">]</span></span>","<span class=\"formatted\" title=\"13\"><span class=\"structural\">[</span><span class=\"numbers\">13</span><span class=\"structural\">]</span></span>","<span class=\"formatted\" title=\"67\n32\"><span class=\"structural\">[</span><span class=\"numbers\">67</span><span class=\"structural\">, </span><span class=\"numbers\">32</span><span class=\"structural\">]</span></span>"] }, \n",
|
|
"{ name: "<span title=\"Airline: String\">Airline</span>", children: [], rightAlign: false, values: ["KLM(!)","{Air France} (12)","(British Airways. )","12. Air France","&#39;Swiss Air&#39;"] }, \n",
|
|
"], id: 486539432, rootId: 486539432, totalRows: 5 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539432) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_85() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_85\");\n",
|
|
" resize_iframe_out_85(elem);\n",
|
|
" setInterval(resize_iframe_out_85, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_85(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539433\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">From_To</th><th class=\"bottomBorder\" style=\"text-align:left\">FlightNumber</th><th class=\"bottomBorder\" style=\"text-align:left\">RecentDelays</th><th class=\"bottomBorder\" style=\"text-align:left\">Airline</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">LoNDon_paris</td><td style=\"vertical-align:top\">10045.000000</td><td style=\"vertical-align:top\">[23, 47]</td><td style=\"vertical-align:top\">KLM(!)</td></tr><tr><td style=\"vertical-align:top\">MAdrid_miLAN</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">[ ]</td><td style=\"vertical-align:top\">{Air France} (12)</td></tr><tr><td style=\"vertical-align:top\">londON_StockhOlm</td><td style=\"vertical-align:top\">10065.000000</td><td style=\"vertical-align:top\">[24, 43, 87]</td><td style=\"vertical-align:top\">(British Airways. )</td></tr><tr><td style=\"vertical-align:top\">Budapest_PaRis</td><td style=\"vertical-align:top\">NaN</td><td style=\"vertical-align:top\">[13]</td><td style=\"vertical-align:top\">12. Air France</td></tr><tr><td style=\"vertical-align:top\">Brussels_londOn</td><td style=\"vertical-align:top\">10085.000000</td><td style=\"vertical-align:top\">[67, 32]</td><td style=\"vertical-align:top\">'Swiss Air'</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539433\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"From_To\",\"FlightNumber\",\"RecentDelays\",\"Airline\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.collections.List<kotlin.Int>\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"}],\"nrow\":5,\"ncol\":4,\"is_formatted\":false},\"kotlin_dataframe\":[{\"From_To\":\"LoNDon_paris\",\"FlightNumber\":10045.0,\"RecentDelays\":[23,47],\"Airline\":\"KLM(!)\"},{\"From_To\":\"MAdrid_miLAN\",\"FlightNumber\":NaN,\"RecentDelays\":[],\"Airline\":\"{Air France} (12)\"},{\"From_To\":\"londON_StockhOlm\",\"FlightNumber\":10065.0,\"RecentDelays\":[24,43,87],\"Airline\":\"(British Airways. )\"},{\"From_To\":\"Budapest_PaRis\",\"FlightNumber\":NaN,\"RecentDelays\":[13],\"Airline\":\"12. Air France\"},{\"From_To\":\"Brussels_londOn\",\"FlightNumber\":10085.0,\"RecentDelays\":[67,32],\"Airline\":\"'Swiss Air'\"}]}"
|
|
},
|
|
"execution_count": 52,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 52
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"**36.** Some values in the `FlightNumber` column are missing (they are NaN).\n",
|
|
"These numbers are meant to increase by 10 with each row, so 10,055 and 10,075 need to be put in the right place.\n",
|
|
"Modify `df` to fill in these missing numbers and make the column an integer column (instead of a float column)."
|
|
]
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:20:00.173798942Z",
|
|
"start_time": "2025-12-18T11:19:59.836065273Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_135_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"df = df.fillNaNs { FlightNumber }\n",
|
|
" .with { prev()!!.FlightNumber + (next()!!.FlightNumber - prev()!!.FlightNumber) / 2 }\n",
|
|
" .convert { FlightNumber }.toInt()\n",
|
|
"df"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_87()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_87\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539436"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataFrame: rowsCount = 5, columnsCount = 4</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"From_To: String\">From_To</span>", children: [], rightAlign: false, values: ["LoNDon_paris","MAdrid_miLAN","londON_StockhOlm","Budapest_PaRis","Brussels_londOn"] }, \n",
|
|
"{ name: "<span title=\"FlightNumber: Int\">FlightNumber</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">10045</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">10055</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">10065</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">10075</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">10085</span></span>"] }, \n",
|
|
"{ name: "<span title=\"RecentDelays: List<Int>\">RecentDelays</span>", children: [], rightAlign: false, values: ["<span class=\"formatted\" title=\"23\n47\"><span class=\"structural\">[</span><span class=\"numbers\">23</span><span class=\"structural\">, </span><span class=\"numbers\">47</span><span class=\"structural\">]</span></span>","<span class=\"formatted\" title=\"\"><span class=\"null\">[ ]</span></span>","<span class=\"formatted\" title=\"24\n43\n87\"><span class=\"structural\">[</span><span class=\"numbers\">24</span><span class=\"structural\">, </span><span class=\"numbers\">43</span><span class=\"structural\">, </span><span class=\"numbers\">87</span><span class=\"structural\">]</span></span>","<span class=\"formatted\" title=\"13\"><span class=\"structural\">[</span><span class=\"numbers\">13</span><span class=\"structural\">]</span></span>","<span class=\"formatted\" title=\"67\n32\"><span class=\"structural\">[</span><span class=\"numbers\">67</span><span class=\"structural\">, </span><span class=\"numbers\">32</span><span class=\"structural\">]</span></span>"] }, \n",
|
|
"{ name: "<span title=\"Airline: String\">Airline</span>", children: [], rightAlign: false, values: ["KLM(!)","{Air France} (12)","(British Airways. )","12. Air France","&#39;Swiss Air&#39;"] }, \n",
|
|
"], id: 486539436, rootId: 486539436, totalRows: 5 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539436) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_87() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_87\");\n",
|
|
" resize_iframe_out_87(elem);\n",
|
|
" setInterval(resize_iframe_out_87, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_87(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539437\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">From_To</th><th class=\"bottomBorder\" style=\"text-align:left\">FlightNumber</th><th class=\"bottomBorder\" style=\"text-align:left\">RecentDelays</th><th class=\"bottomBorder\" style=\"text-align:left\">Airline</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">LoNDon_paris</td><td style=\"vertical-align:top\">10045</td><td style=\"vertical-align:top\">[23, 47]</td><td style=\"vertical-align:top\">KLM(!)</td></tr><tr><td style=\"vertical-align:top\">MAdrid_miLAN</td><td style=\"vertical-align:top\">10055</td><td style=\"vertical-align:top\">[ ]</td><td style=\"vertical-align:top\">{Air France} (12)</td></tr><tr><td style=\"vertical-align:top\">londON_StockhOlm</td><td style=\"vertical-align:top\">10065</td><td style=\"vertical-align:top\">[24, 43, 87]</td><td style=\"vertical-align:top\">(British Airways. )</td></tr><tr><td style=\"vertical-align:top\">Budapest_PaRis</td><td style=\"vertical-align:top\">10075</td><td style=\"vertical-align:top\">[13]</td><td style=\"vertical-align:top\">12. Air France</td></tr><tr><td style=\"vertical-align:top\">Brussels_londOn</td><td style=\"vertical-align:top\">10085</td><td style=\"vertical-align:top\">[67, 32]</td><td style=\"vertical-align:top\">'Swiss Air'</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539437\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"From_To\",\"FlightNumber\",\"RecentDelays\",\"Airline\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.collections.List<kotlin.Int>\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"}],\"nrow\":5,\"ncol\":4,\"is_formatted\":false},\"kotlin_dataframe\":[{\"From_To\":\"LoNDon_paris\",\"FlightNumber\":10045,\"RecentDelays\":[23,47],\"Airline\":\"KLM(!)\"},{\"From_To\":\"MAdrid_miLAN\",\"FlightNumber\":10055,\"RecentDelays\":[],\"Airline\":\"{Air France} (12)\"},{\"From_To\":\"londON_StockhOlm\",\"FlightNumber\":10065,\"RecentDelays\":[24,43,87],\"Airline\":\"(British Airways. )\"},{\"From_To\":\"Budapest_PaRis\",\"FlightNumber\":10075,\"RecentDelays\":[13],\"Airline\":\"12. Air France\"},{\"From_To\":\"Brussels_londOn\",\"FlightNumber\":10085,\"RecentDelays\":[67,32],\"Airline\":\"'Swiss Air'\"}]}"
|
|
},
|
|
"execution_count": 53,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 53
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"**37.** The **From_To** column can better be two separate columns!\n",
|
|
"\n",
|
|
"Split each string by the underscore delimiter **_**.\n",
|
|
"Assign the correct names 'From' and 'To' to these columns."
|
|
]
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:20:00.606941273Z",
|
|
"start_time": "2025-12-18T11:20:00.245568490Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_137_jupyter",
|
|
"Line_138_jupyter",
|
|
"Line_139_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"var df2 = df.split { From_To }.by(\"_\").into(\"From\", \"To\")\n",
|
|
"df2"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_89()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_89\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539440"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataFrame: rowsCount = 5, columnsCount = 5</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"From: String\">From</span>", children: [], rightAlign: false, values: ["LoNDon","MAdrid","londON","Budapest","Brussels"] }, \n",
|
|
"{ name: "<span title=\"To: String\">To</span>", children: [], rightAlign: false, values: ["paris","miLAN","StockhOlm","PaRis","londOn"] }, \n",
|
|
"{ name: "<span title=\"FlightNumber: Int\">FlightNumber</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">10045</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">10055</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">10065</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">10075</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">10085</span></span>"] }, \n",
|
|
"{ name: "<span title=\"RecentDelays: List<Int>\">RecentDelays</span>", children: [], rightAlign: false, values: ["<span class=\"formatted\" title=\"23\n47\"><span class=\"structural\">[</span><span class=\"numbers\">23</span><span class=\"structural\">, </span><span class=\"numbers\">47</span><span class=\"structural\">]</span></span>","<span class=\"formatted\" title=\"\"><span class=\"null\">[ ]</span></span>","<span class=\"formatted\" title=\"24\n43\n87\"><span class=\"structural\">[</span><span class=\"numbers\">24</span><span class=\"structural\">, </span><span class=\"numbers\">43</span><span class=\"structural\">, </span><span class=\"numbers\">87</span><span class=\"structural\">]</span></span>","<span class=\"formatted\" title=\"13\"><span class=\"structural\">[</span><span class=\"numbers\">13</span><span class=\"structural\">]</span></span>","<span class=\"formatted\" title=\"67\n32\"><span class=\"structural\">[</span><span class=\"numbers\">67</span><span class=\"structural\">, </span><span class=\"numbers\">32</span><span class=\"structural\">]</span></span>"] }, \n",
|
|
"{ name: "<span title=\"Airline: String\">Airline</span>", children: [], rightAlign: false, values: ["KLM(!)","{Air France} (12)","(British Airways. )","12. Air France","&#39;Swiss Air&#39;"] }, \n",
|
|
"], id: 486539440, rootId: 486539440, totalRows: 5 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539440) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_89() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_89\");\n",
|
|
" resize_iframe_out_89(elem);\n",
|
|
" setInterval(resize_iframe_out_89, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_89(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539441\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">From</th><th class=\"bottomBorder\" style=\"text-align:left\">To</th><th class=\"bottomBorder\" style=\"text-align:left\">FlightNumber</th><th class=\"bottomBorder\" style=\"text-align:left\">RecentDelays</th><th class=\"bottomBorder\" style=\"text-align:left\">Airline</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">LoNDon</td><td style=\"vertical-align:top\">paris</td><td style=\"vertical-align:top\">10045</td><td style=\"vertical-align:top\">[23, 47]</td><td style=\"vertical-align:top\">KLM(!)</td></tr><tr><td style=\"vertical-align:top\">MAdrid</td><td style=\"vertical-align:top\">miLAN</td><td style=\"vertical-align:top\">10055</td><td style=\"vertical-align:top\">[ ]</td><td style=\"vertical-align:top\">{Air France} (12)</td></tr><tr><td style=\"vertical-align:top\">londON</td><td style=\"vertical-align:top\">StockhOlm</td><td style=\"vertical-align:top\">10065</td><td style=\"vertical-align:top\">[24, 43, 87]</td><td style=\"vertical-align:top\">(British Airways. )</td></tr><tr><td style=\"vertical-align:top\">Budapest</td><td style=\"vertical-align:top\">PaRis</td><td style=\"vertical-align:top\">10075</td><td style=\"vertical-align:top\">[13]</td><td style=\"vertical-align:top\">12. Air France</td></tr><tr><td style=\"vertical-align:top\">Brussels</td><td style=\"vertical-align:top\">londOn</td><td style=\"vertical-align:top\">10085</td><td style=\"vertical-align:top\">[67, 32]</td><td style=\"vertical-align:top\">'Swiss Air'</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539441\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"From\",\"To\",\"FlightNumber\",\"RecentDelays\",\"Airline\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.collections.List<kotlin.Int>\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"}],\"nrow\":5,\"ncol\":5,\"is_formatted\":false},\"kotlin_dataframe\":[{\"From\":\"LoNDon\",\"To\":\"paris\",\"FlightNumber\":10045,\"RecentDelays\":[23,47],\"Airline\":\"KLM(!)\"},{\"From\":\"MAdrid\",\"To\":\"miLAN\",\"FlightNumber\":10055,\"RecentDelays\":[],\"Airline\":\"{Air France} (12)\"},{\"From\":\"londON\",\"To\":\"StockhOlm\",\"FlightNumber\":10065,\"RecentDelays\":[24,43,87],\"Airline\":\"(British Airways. )\"},{\"From\":\"Budapest\",\"To\":\"PaRis\",\"FlightNumber\":10075,\"RecentDelays\":[13],\"Airline\":\"12. Air France\"},{\"From\":\"Brussels\",\"To\":\"londOn\",\"FlightNumber\":10085,\"RecentDelays\":[67,32],\"Airline\":\"'Swiss Air'\"}]}"
|
|
},
|
|
"execution_count": 54,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 54
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"**38.** Notice how the capitalization of the city names is all mixed up in this temporary DataFrame 'temp'.\n",
|
|
"Standardize the strings so that only the first letter is uppercase (e.g. \"londON\" should become \"London\".)"
|
|
]
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:20:00.993293322Z",
|
|
"start_time": "2025-12-18T11:20:00.698864044Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_141_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"df2 = df2.update { From and To }.with { it.lowercase().replaceFirstChar { it.uppercase() } }\n",
|
|
"df2"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_91()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_91\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539444"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataFrame: rowsCount = 5, columnsCount = 5</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"From: String\">From</span>", children: [], rightAlign: false, values: ["London","Madrid","London","Budapest","Brussels"] }, \n",
|
|
"{ name: "<span title=\"To: String\">To</span>", children: [], rightAlign: false, values: ["Paris","Milan","Stockholm","Paris","London"] }, \n",
|
|
"{ name: "<span title=\"FlightNumber: Int\">FlightNumber</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">10045</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">10055</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">10065</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">10075</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">10085</span></span>"] }, \n",
|
|
"{ name: "<span title=\"RecentDelays: List<Int>\">RecentDelays</span>", children: [], rightAlign: false, values: ["<span class=\"formatted\" title=\"23\n47\"><span class=\"structural\">[</span><span class=\"numbers\">23</span><span class=\"structural\">, </span><span class=\"numbers\">47</span><span class=\"structural\">]</span></span>","<span class=\"formatted\" title=\"\"><span class=\"null\">[ ]</span></span>","<span class=\"formatted\" title=\"24\n43\n87\"><span class=\"structural\">[</span><span class=\"numbers\">24</span><span class=\"structural\">, </span><span class=\"numbers\">43</span><span class=\"structural\">, </span><span class=\"numbers\">87</span><span class=\"structural\">]</span></span>","<span class=\"formatted\" title=\"13\"><span class=\"structural\">[</span><span class=\"numbers\">13</span><span class=\"structural\">]</span></span>","<span class=\"formatted\" title=\"67\n32\"><span class=\"structural\">[</span><span class=\"numbers\">67</span><span class=\"structural\">, </span><span class=\"numbers\">32</span><span class=\"structural\">]</span></span>"] }, \n",
|
|
"{ name: "<span title=\"Airline: String\">Airline</span>", children: [], rightAlign: false, values: ["KLM(!)","{Air France} (12)","(British Airways. )","12. Air France","&#39;Swiss Air&#39;"] }, \n",
|
|
"], id: 486539444, rootId: 486539444, totalRows: 5 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539444) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_91() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_91\");\n",
|
|
" resize_iframe_out_91(elem);\n",
|
|
" setInterval(resize_iframe_out_91, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_91(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539445\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">From</th><th class=\"bottomBorder\" style=\"text-align:left\">To</th><th class=\"bottomBorder\" style=\"text-align:left\">FlightNumber</th><th class=\"bottomBorder\" style=\"text-align:left\">RecentDelays</th><th class=\"bottomBorder\" style=\"text-align:left\">Airline</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">London</td><td style=\"vertical-align:top\">Paris</td><td style=\"vertical-align:top\">10045</td><td style=\"vertical-align:top\">[23, 47]</td><td style=\"vertical-align:top\">KLM(!)</td></tr><tr><td style=\"vertical-align:top\">Madrid</td><td style=\"vertical-align:top\">Milan</td><td style=\"vertical-align:top\">10055</td><td style=\"vertical-align:top\">[ ]</td><td style=\"vertical-align:top\">{Air France} (12)</td></tr><tr><td style=\"vertical-align:top\">London</td><td style=\"vertical-align:top\">Stockholm</td><td style=\"vertical-align:top\">10065</td><td style=\"vertical-align:top\">[24, 43, 87]</td><td style=\"vertical-align:top\">(British Airways. )</td></tr><tr><td style=\"vertical-align:top\">Budapest</td><td style=\"vertical-align:top\">Paris</td><td style=\"vertical-align:top\">10075</td><td style=\"vertical-align:top\">[13]</td><td style=\"vertical-align:top\">12. Air France</td></tr><tr><td style=\"vertical-align:top\">Brussels</td><td style=\"vertical-align:top\">London</td><td style=\"vertical-align:top\">10085</td><td style=\"vertical-align:top\">[67, 32]</td><td style=\"vertical-align:top\">'Swiss Air'</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539445\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"From\",\"To\",\"FlightNumber\",\"RecentDelays\",\"Airline\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.collections.List<kotlin.Int>\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"}],\"nrow\":5,\"ncol\":5,\"is_formatted\":false},\"kotlin_dataframe\":[{\"From\":\"London\",\"To\":\"Paris\",\"FlightNumber\":10045,\"RecentDelays\":[23,47],\"Airline\":\"KLM(!)\"},{\"From\":\"Madrid\",\"To\":\"Milan\",\"FlightNumber\":10055,\"RecentDelays\":[],\"Airline\":\"{Air France} (12)\"},{\"From\":\"London\",\"To\":\"Stockholm\",\"FlightNumber\":10065,\"RecentDelays\":[24,43,87],\"Airline\":\"(British Airways. )\"},{\"From\":\"Budapest\",\"To\":\"Paris\",\"FlightNumber\":10075,\"RecentDelays\":[13],\"Airline\":\"12. Air France\"},{\"From\":\"Brussels\",\"To\":\"London\",\"FlightNumber\":10085,\"RecentDelays\":[67,32],\"Airline\":\"'Swiss Air'\"}]}"
|
|
},
|
|
"execution_count": 55,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 55
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"**39.** In the **Airline** column, you can see some extra punctuation and symbols have appeared around the airline names.\n",
|
|
"Pull out just the airline name. E.g. `'(British Airways. )'` should become `'British Airways'`."
|
|
]
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:20:01.328403705Z",
|
|
"start_time": "2025-12-18T11:20:01.074557822Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_143_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"df2 = df2.update { Airline }.with {\n",
|
|
" \"([a-zA-Z\\\\s]+)\".toRegex().find(it)?.value ?: \"\"\n",
|
|
"}\n",
|
|
"df2"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_93()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_93\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539448"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataFrame: rowsCount = 5, columnsCount = 5</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"From: String\">From</span>", children: [], rightAlign: false, values: ["London","Madrid","London","Budapest","Brussels"] }, \n",
|
|
"{ name: "<span title=\"To: String\">To</span>", children: [], rightAlign: false, values: ["Paris","Milan","Stockholm","Paris","London"] }, \n",
|
|
"{ name: "<span title=\"FlightNumber: Int\">FlightNumber</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">10045</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">10055</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">10065</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">10075</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">10085</span></span>"] }, \n",
|
|
"{ name: "<span title=\"RecentDelays: List<Int>\">RecentDelays</span>", children: [], rightAlign: false, values: ["<span class=\"formatted\" title=\"23\n47\"><span class=\"structural\">[</span><span class=\"numbers\">23</span><span class=\"structural\">, </span><span class=\"numbers\">47</span><span class=\"structural\">]</span></span>","<span class=\"formatted\" title=\"\"><span class=\"null\">[ ]</span></span>","<span class=\"formatted\" title=\"24\n43\n87\"><span class=\"structural\">[</span><span class=\"numbers\">24</span><span class=\"structural\">, </span><span class=\"numbers\">43</span><span class=\"structural\">, </span><span class=\"numbers\">87</span><span class=\"structural\">]</span></span>","<span class=\"formatted\" title=\"13\"><span class=\"structural\">[</span><span class=\"numbers\">13</span><span class=\"structural\">]</span></span>","<span class=\"formatted\" title=\"67\n32\"><span class=\"structural\">[</span><span class=\"numbers\">67</span><span class=\"structural\">, </span><span class=\"numbers\">32</span><span class=\"structural\">]</span></span>"] }, \n",
|
|
"{ name: "<span title=\"Airline: String\">Airline</span>", children: [], rightAlign: false, values: ["KLM","Air France","British Airways"," Air France","Swiss Air"] }, \n",
|
|
"], id: 486539448, rootId: 486539448, totalRows: 5 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539448) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_93() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_93\");\n",
|
|
" resize_iframe_out_93(elem);\n",
|
|
" setInterval(resize_iframe_out_93, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_93(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539449\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">From</th><th class=\"bottomBorder\" style=\"text-align:left\">To</th><th class=\"bottomBorder\" style=\"text-align:left\">FlightNumber</th><th class=\"bottomBorder\" style=\"text-align:left\">RecentDelays</th><th class=\"bottomBorder\" style=\"text-align:left\">Airline</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">London</td><td style=\"vertical-align:top\">Paris</td><td style=\"vertical-align:top\">10045</td><td style=\"vertical-align:top\">[23, 47]</td><td style=\"vertical-align:top\">KLM</td></tr><tr><td style=\"vertical-align:top\">Madrid</td><td style=\"vertical-align:top\">Milan</td><td style=\"vertical-align:top\">10055</td><td style=\"vertical-align:top\">[ ]</td><td style=\"vertical-align:top\">Air France</td></tr><tr><td style=\"vertical-align:top\">London</td><td style=\"vertical-align:top\">Stockholm</td><td style=\"vertical-align:top\">10065</td><td style=\"vertical-align:top\">[24, 43, 87]</td><td style=\"vertical-align:top\">British Airways</td></tr><tr><td style=\"vertical-align:top\">Budapest</td><td style=\"vertical-align:top\">Paris</td><td style=\"vertical-align:top\">10075</td><td style=\"vertical-align:top\">[13]</td><td style=\"vertical-align:top\"> Air France</td></tr><tr><td style=\"vertical-align:top\">Brussels</td><td style=\"vertical-align:top\">London</td><td style=\"vertical-align:top\">10085</td><td style=\"vertical-align:top\">[67, 32]</td><td style=\"vertical-align:top\">Swiss Air</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539449\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"From\",\"To\",\"FlightNumber\",\"RecentDelays\",\"Airline\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.collections.List<kotlin.Int>\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"}],\"nrow\":5,\"ncol\":5,\"is_formatted\":false},\"kotlin_dataframe\":[{\"From\":\"London\",\"To\":\"Paris\",\"FlightNumber\":10045,\"RecentDelays\":[23,47],\"Airline\":\"KLM\"},{\"From\":\"Madrid\",\"To\":\"Milan\",\"FlightNumber\":10055,\"RecentDelays\":[],\"Airline\":\"Air France\"},{\"From\":\"London\",\"To\":\"Stockholm\",\"FlightNumber\":10065,\"RecentDelays\":[24,43,87],\"Airline\":\"British Airways\"},{\"From\":\"Budapest\",\"To\":\"Paris\",\"FlightNumber\":10075,\"RecentDelays\":[13],\"Airline\":\" Air France\"},{\"From\":\"Brussels\",\"To\":\"London\",\"FlightNumber\":10085,\"RecentDelays\":[67,32],\"Airline\":\"Swiss Air\"}]}"
|
|
},
|
|
"execution_count": 56,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 56
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"**40.** In the **RecentDelays** column, the values have been entered into the DataFrame as a list.\n",
|
|
"We would like each first value to be in its own column, each second value in its own column, and so on.\n",
|
|
"If a certain value is missing, the value should be `null`.\n",
|
|
"\n",
|
|
"Expand the column of lists into columns named 'delays_' and replace the unwanted `RecentDelays` column in `df` with 'delays'."
|
|
]
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:20:01.740439057Z",
|
|
"start_time": "2025-12-18T11:20:01.448232137Z"
|
|
},
|
|
"executionRelatedData": {
|
|
"compiledClasses": [
|
|
"Line_145_jupyter",
|
|
"Line_146_jupyter",
|
|
"Line_147_jupyter"
|
|
]
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"val cleanDf = df2.split { RecentDelays }.into { \"delay_$it\" }\n",
|
|
"cleanDf"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_95()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_95\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539452"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataFrame: rowsCount = 5, columnsCount = 7</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"From: String\">From</span>", children: [], rightAlign: false, values: ["London","Madrid","London","Budapest","Brussels"] }, \n",
|
|
"{ name: "<span title=\"To: String\">To</span>", children: [], rightAlign: false, values: ["Paris","Milan","Stockholm","Paris","London"] }, \n",
|
|
"{ name: "<span title=\"FlightNumber: Int\">FlightNumber</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">10045</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">10055</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">10065</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">10075</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">10085</span></span>"] }, \n",
|
|
"{ name: "<span title=\"delay_1: Int?\">delay_1</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">23</span></span>","<span class=\"formatted\" title=\"\"><span class=\"null\">null</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">24</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">13</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">67</span></span>"] }, \n",
|
|
"{ name: "<span title=\"delay_2: Int?\">delay_2</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">47</span></span>","<span class=\"formatted\" title=\"\"><span class=\"null\">null</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">43</span></span>","<span class=\"formatted\" title=\"\"><span class=\"null\">null</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">32</span></span>"] }, \n",
|
|
"{ name: "<span title=\"delay_3: Int?\">delay_3</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"null\">null</span></span>","<span class=\"formatted\" title=\"\"><span class=\"null\">null</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">87</span></span>","<span class=\"formatted\" title=\"\"><span class=\"null\">null</span></span>","<span class=\"formatted\" title=\"\"><span class=\"null\">null</span></span>"] }, \n",
|
|
"{ name: "<span title=\"Airline: String\">Airline</span>", children: [], rightAlign: false, values: ["KLM","Air France","British Airways"," Air France","Swiss Air"] }, \n",
|
|
"], id: 486539452, rootId: 486539452, totalRows: 5 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539452) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_95() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_95\");\n",
|
|
" resize_iframe_out_95(elem);\n",
|
|
" setInterval(resize_iframe_out_95, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_95(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539453\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">From</th><th class=\"bottomBorder\" style=\"text-align:left\">To</th><th class=\"bottomBorder\" style=\"text-align:left\">FlightNumber</th><th class=\"bottomBorder\" style=\"text-align:left\">delay_1</th><th class=\"bottomBorder\" style=\"text-align:left\">delay_2</th><th class=\"bottomBorder\" style=\"text-align:left\">delay_3</th><th class=\"bottomBorder\" style=\"text-align:left\">Airline</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">London</td><td style=\"vertical-align:top\">Paris</td><td style=\"vertical-align:top\">10045</td><td style=\"vertical-align:top\">23</td><td style=\"vertical-align:top\">47</td><td style=\"vertical-align:top\">null</td><td style=\"vertical-align:top\">KLM</td></tr><tr><td style=\"vertical-align:top\">Madrid</td><td style=\"vertical-align:top\">Milan</td><td style=\"vertical-align:top\">10055</td><td style=\"vertical-align:top\">null</td><td style=\"vertical-align:top\">null</td><td style=\"vertical-align:top\">null</td><td style=\"vertical-align:top\">Air France</td></tr><tr><td style=\"vertical-align:top\">London</td><td style=\"vertical-align:top\">Stockholm</td><td style=\"vertical-align:top\">10065</td><td style=\"vertical-align:top\">24</td><td style=\"vertical-align:top\">43</td><td style=\"vertical-align:top\">87</td><td style=\"vertical-align:top\">British Airways</td></tr><tr><td style=\"vertical-align:top\">Budapest</td><td style=\"vertical-align:top\">Paris</td><td style=\"vertical-align:top\">10075</td><td style=\"vertical-align:top\">13</td><td style=\"vertical-align:top\">null</td><td style=\"vertical-align:top\">null</td><td style=\"vertical-align:top\"> Air France</td></tr><tr><td style=\"vertical-align:top\">Brussels</td><td style=\"vertical-align:top\">London</td><td style=\"vertical-align:top\">10085</td><td style=\"vertical-align:top\">67</td><td style=\"vertical-align:top\">32</td><td style=\"vertical-align:top\">null</td><td style=\"vertical-align:top\">Swiss Air</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539453\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"From\",\"To\",\"FlightNumber\",\"delay_1\",\"delay_2\",\"delay_3\",\"Airline\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int?\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int?\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int?\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"}],\"nrow\":5,\"ncol\":7,\"is_formatted\":false},\"kotlin_dataframe\":[{\"From\":\"London\",\"To\":\"Paris\",\"FlightNumber\":10045,\"delay_1\":23,\"delay_2\":47,\"delay_3\":null,\"Airline\":\"KLM\"},{\"From\":\"Madrid\",\"To\":\"Milan\",\"FlightNumber\":10055,\"delay_1\":null,\"delay_2\":null,\"delay_3\":null,\"Airline\":\"Air France\"},{\"From\":\"London\",\"To\":\"Stockholm\",\"FlightNumber\":10065,\"delay_1\":24,\"delay_2\":43,\"delay_3\":87,\"Airline\":\"British Airways\"},{\"From\":\"Budapest\",\"To\":\"Paris\",\"FlightNumber\":10075,\"delay_1\":13,\"delay_2\":null,\"delay_3\":null,\"Airline\":\" Air France\"},{\"From\":\"Brussels\",\"To\":\"London\",\"FlightNumber\":10085,\"delay_1\":67,\"delay_2\":32,\"delay_3\":null,\"Airline\":\"Swiss Air\"}]}"
|
|
},
|
|
"execution_count": 57,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 57
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": "Data looks much better now! Now, add a finishing `.renameToCamelCase` to get Kotlin-style identifiers.\n"
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-12-18T11:20:02.082661779Z",
|
|
"start_time": "2025-12-18T11:20:01.832916739Z"
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": "cleanDf.renameToCamelCase()",
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
" <iframe onload=\"o_resize_iframe_out_97()\" style=\"width:100%;\" class=\"result_container\" id=\"iframe_out_97\" frameBorder=\"0\" srcdoc=\" <html>\n",
|
|
" <head>\n",
|
|
" <style type="text/css">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --scroll-bg: #f5f5f5;\n",
|
|
" --scroll-fg: #b3b3b3;\n",
|
|
"}\n",
|
|
":root[theme="dark"], :root [data-jp-theme-light="false"]{\n",
|
|
" --scroll-bg: #3c3c3c;\n",
|
|
" --scroll-fg: #97e1fb;\n",
|
|
"}\n",
|
|
"body {\n",
|
|
" scrollbar-color: var(--scroll-fg) var(--scroll-bg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar {\n",
|
|
" width: 10px; /* Mostly for vertical scrollbars */\n",
|
|
" height: 10px; /* Mostly for horizontal scrollbars */\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-thumb {\n",
|
|
" background-color: var(--scroll-fg);\n",
|
|
"}\n",
|
|
"body::-webkit-scrollbar-track {\n",
|
|
" background-color: var(--scroll-bg);\n",
|
|
"}\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class="dataframe" id="df_486539456"></table>\n",
|
|
"\n",
|
|
"<p class="dataframe_description">DataFrame: rowsCount = 5, columnsCount = 7</p>\n",
|
|
"\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" (function () {\n",
|
|
" window.DataFrame = window.DataFrame || new (function () {\n",
|
|
" this.addTable = function (df) {\n",
|
|
" let cols = df.cols;\n",
|
|
" for (let i = 0; i < cols.length; i++) {\n",
|
|
" for (let c of cols[i].children) {\n",
|
|
" cols[c].parent = i;\n",
|
|
" }\n",
|
|
" }\n",
|
|
" df.nrow = 0\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" if (df.cols[i].values.length > df.nrow) df.nrow = df.cols[i].values.length\n",
|
|
" }\n",
|
|
" if (df.id === df.rootId) {\n",
|
|
" df.expandedFrames = new Set()\n",
|
|
" df.childFrames = {}\n",
|
|
" const table = this.getTableElement(df.id)\n",
|
|
" table.df = df\n",
|
|
" for (let i = 0; i < df.cols.length; i++) {\n",
|
|
" let col = df.cols[i]\n",
|
|
" if (col.parent === undefined && col.children.length > 0) col.expanded = true\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" const rootDf = this.getTableData(df.rootId)\n",
|
|
" rootDf.childFrames[df.id] = df\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderData = function (df) {\n",
|
|
" let result = []\n",
|
|
" let pos = 0\n",
|
|
" for (let col = 0; col < df.cols.length; col++) {\n",
|
|
" if (df.cols[col].parent === undefined)\n",
|
|
" pos += this.computeRenderDataRec(df.cols, col, pos, 0, result, false, false)\n",
|
|
" }\n",
|
|
" for (let i = 0; i < result.length; i++) {\n",
|
|
" let row = result[i]\n",
|
|
" for (let j = 0; j < row.length; j++) {\n",
|
|
" let cell = row[j]\n",
|
|
" if (j === 0)\n",
|
|
" cell.leftBd = false\n",
|
|
" if (j < row.length - 1) {\n",
|
|
" let nextData = row[j + 1]\n",
|
|
" if (nextData.leftBd) cell.rightBd = true\n",
|
|
" else if (cell.rightBd) nextData.leftBd = true\n",
|
|
" } else cell.rightBd = false\n",
|
|
" }\n",
|
|
" }\n",
|
|
" return result\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.computeRenderDataRec = function (cols, colId, pos, depth, result, leftBorder, rightBorder) {\n",
|
|
" if (result.length === depth) {\n",
|
|
" const array = [];\n",
|
|
" if (pos > 0) {\n",
|
|
" let j = 0\n",
|
|
" for (let i = 0; j < pos; i++) {\n",
|
|
" let c = result[depth - 1][i]\n",
|
|
" j += c.span\n",
|
|
" let copy = Object.assign({empty: true}, c)\n",
|
|
" array.push(copy)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" result.push(array)\n",
|
|
" }\n",
|
|
" const col = cols[colId];\n",
|
|
" let size = 0;\n",
|
|
" if (col.expanded) {\n",
|
|
" let childPos = pos\n",
|
|
" for (let i = 0; i < col.children.length; i++) {\n",
|
|
" let child = col.children[i]\n",
|
|
" let childLeft = i === 0 && (col.children.length > 1 || leftBorder)\n",
|
|
" let childRight = i === col.children.length - 1 && (col.children.length > 1 || rightBorder)\n",
|
|
" let childSize = this.computeRenderDataRec(cols, child, childPos, depth + 1, result, childLeft, childRight)\n",
|
|
" childPos += childSize\n",
|
|
" size += childSize\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" for (let i = depth + 1; i < result.length; i++)\n",
|
|
" result[i].push({id: colId, span: 1, leftBd: leftBorder, rightBd: rightBorder, empty: true})\n",
|
|
" size = 1\n",
|
|
" }\n",
|
|
" let left = leftBorder\n",
|
|
" let right = rightBorder\n",
|
|
" if (size > 1) {\n",
|
|
" left = true\n",
|
|
" right = true\n",
|
|
" }\n",
|
|
" result[depth].push({id: colId, span: size, leftBd: left, rightBd: right})\n",
|
|
" return size\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableElement = function (id) {\n",
|
|
" return document.getElementById("df_" + id)\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.getTableData = function (id) {\n",
|
|
" return this.getTableElement(id).df\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.createExpander = function (isExpanded) {\n",
|
|
" const svgNs = "http://www.w3.org/2000/svg"\n",
|
|
" let svg = document.createElementNS(svgNs, "svg")\n",
|
|
" svg.classList.add("expanderSvg")\n",
|
|
" let path = document.createElementNS(svgNs, "path")\n",
|
|
" if (isExpanded) {\n",
|
|
" svg.setAttribute("viewBox", "0 -2 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 4 4 4 -4 -1 -1 -3 3Z")\n",
|
|
" } else {\n",
|
|
" svg.setAttribute("viewBox", "-2 0 8 8")\n",
|
|
" path.setAttribute("d", "M1 0 l-1 1 3 3 -3 3 1 1 4 -4Z")\n",
|
|
" }\n",
|
|
" path.setAttribute("fill", "currentColor")\n",
|
|
" svg.appendChild(path)\n",
|
|
" return svg\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.renderTable = function (id) {\n",
|
|
"\n",
|
|
" let table = this.getTableElement(id)\n",
|
|
"\n",
|
|
" if (table === null) return\n",
|
|
"\n",
|
|
" table.innerHTML = ""\n",
|
|
"\n",
|
|
" let df = table.df\n",
|
|
" let rootDf = df.rootId === df.id ? df : this.getTableData(df.rootId)\n",
|
|
"\n",
|
|
" // header\n",
|
|
" let header = document.createElement("thead")\n",
|
|
" table.appendChild(header)\n",
|
|
"\n",
|
|
" let renderData = this.computeRenderData(df)\n",
|
|
" for (let j = 0; j < renderData.length; j++) {\n",
|
|
" let rowData = renderData[j]\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" let isLastRow = j === renderData.length - 1\n",
|
|
" header.appendChild(tr);\n",
|
|
" for (let i = 0; i < rowData.length; i++) {\n",
|
|
" let cell = rowData[i]\n",
|
|
" let th = document.createElement("th");\n",
|
|
" th.setAttribute("colspan", cell.span)\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId];\n",
|
|
" if (!cell.empty) {\n",
|
|
" if (col.children.length === 0) {\n",
|
|
" th.innerHTML = col.name\n",
|
|
" } else {\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" col.expanded = !col.expanded\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(col.expanded))\n",
|
|
" link.innerHTML += col.name\n",
|
|
" th.appendChild(link)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (isLastRow)\n",
|
|
" classes += " bottomBorder"\n",
|
|
" if (classes.length > 0)\n",
|
|
" th.setAttribute("class", classes)\n",
|
|
" tr.appendChild(th)\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // body\n",
|
|
" let body = document.createElement("tbody")\n",
|
|
" table.appendChild(body)\n",
|
|
"\n",
|
|
" let columns = renderData.pop()\n",
|
|
" for (let row = 0; row < df.nrow; row++) {\n",
|
|
" let tr = document.createElement("tr");\n",
|
|
" body.appendChild(tr)\n",
|
|
" for (let i = 0; i < columns.length; i++) {\n",
|
|
" let cell = columns[i]\n",
|
|
" let td = document.createElement("td");\n",
|
|
" let colId = cell.id\n",
|
|
" let col = df.cols[colId]\n",
|
|
" let classes = (cell.leftBd ? " leftBorder" : "") + (cell.rightBd ? " rightBorder" : "")\n",
|
|
" if (col.rightAlign)\n",
|
|
" classes += " rightAlign"\n",
|
|
" if (classes.length > 0)\n",
|
|
" td.setAttribute("class", classes)\n",
|
|
" tr.appendChild(td)\n",
|
|
" let value = col.values[row]\n",
|
|
" if (value.frameId !== undefined) {\n",
|
|
" let frameId = value.frameId\n",
|
|
" let expanded = rootDf.expandedFrames.has(frameId)\n",
|
|
" let link = document.createElement("a")\n",
|
|
" link.className = "expander"\n",
|
|
" let that = this\n",
|
|
" link.onclick = function () {\n",
|
|
" if (rootDf.expandedFrames.has(frameId))\n",
|
|
" rootDf.expandedFrames.delete(frameId)\n",
|
|
" else rootDf.expandedFrames.add(frameId)\n",
|
|
" that.renderTable(id)\n",
|
|
" }\n",
|
|
" link.appendChild(this.createExpander(expanded))\n",
|
|
" link.innerHTML += value.value\n",
|
|
" if (expanded) {\n",
|
|
" td.appendChild(link)\n",
|
|
" td.appendChild(document.createElement("p"))\n",
|
|
" const childTable = document.createElement("table")\n",
|
|
" childTable.className = "dataframe"\n",
|
|
" childTable.id = "df_" + frameId\n",
|
|
" let childDf = rootDf.childFrames[frameId]\n",
|
|
" childTable.df = childDf\n",
|
|
" td.appendChild(childTable)\n",
|
|
" this.renderTable(frameId)\n",
|
|
" if (childDf.nrow !== childDf.totalRows) {\n",
|
|
" const footer = document.createElement("p")\n",
|
|
" footer.innerText = `... showing only top ${childDf.nrow} of ${childDf.totalRows} rows`\n",
|
|
" td.appendChild(footer)\n",
|
|
" }\n",
|
|
" } else {\n",
|
|
" td.appendChild(link)\n",
|
|
" }\n",
|
|
" } else if (value.style !== undefined) {\n",
|
|
" td.innerHTML = value.value\n",
|
|
" td.setAttribute("style", value.style)\n",
|
|
" } else td.innerHTML = value\n",
|
|
" this.nodeScriptReplace(td)\n",
|
|
" }\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptReplace = function (node) {\n",
|
|
" if (this.nodeScriptIs(node) === true) {\n",
|
|
" node.parentNode.replaceChild(this.nodeScriptClone(node), node);\n",
|
|
" } else {\n",
|
|
" let i = -1, children = node.childNodes;\n",
|
|
" while (++i < children.length) {\n",
|
|
" this.nodeScriptReplace(children[i]);\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" return node;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptClone = function (node) {\n",
|
|
" let script = document.createElement("script");\n",
|
|
" script.text = node.innerHTML;\n",
|
|
"\n",
|
|
" let i = -1, attrs = node.attributes, attr;\n",
|
|
" while (++i < attrs.length) {\n",
|
|
" script.setAttribute((attr = attrs[i]).name, attr.value);\n",
|
|
" }\n",
|
|
" return script;\n",
|
|
" }\n",
|
|
"\n",
|
|
" this.nodeScriptIs = function (node) {\n",
|
|
" return node.tagName === 'SCRIPT';\n",
|
|
" }\n",
|
|
" })()\n",
|
|
"\n",
|
|
" window.call_DataFrame = function (f) {\n",
|
|
" return f();\n",
|
|
" };\n",
|
|
"\n",
|
|
" let funQueue = window["kotlinQueues"] && window["kotlinQueues"]["DataFrame"];\n",
|
|
" if (funQueue) {\n",
|
|
" funQueue.forEach(function (f) {\n",
|
|
" f();\n",
|
|
" });\n",
|
|
" funQueue = [];\n",
|
|
" }\n",
|
|
"})()\n",
|
|
"\n",
|
|
"/*<!--*/\n",
|
|
"call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"from: String\">from</span>", children: [], rightAlign: false, values: ["London","Madrid","London","Budapest","Brussels"] }, \n",
|
|
"{ name: "<span title=\"to: String\">to</span>", children: [], rightAlign: false, values: ["Paris","Milan","Stockholm","Paris","London"] }, \n",
|
|
"{ name: "<span title=\"flightNumber: Int\">flightNumber</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">10045</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">10055</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">10065</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">10075</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">10085</span></span>"] }, \n",
|
|
"{ name: "<span title=\"delay1: Int?\">delay1</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">23</span></span>","<span class=\"formatted\" title=\"\"><span class=\"null\">null</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">24</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">13</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">67</span></span>"] }, \n",
|
|
"{ name: "<span title=\"delay2: Int?\">delay2</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">47</span></span>","<span class=\"formatted\" title=\"\"><span class=\"null\">null</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">43</span></span>","<span class=\"formatted\" title=\"\"><span class=\"null\">null</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">32</span></span>"] }, \n",
|
|
"{ name: "<span title=\"delay3: Int?\">delay3</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"null\">null</span></span>","<span class=\"formatted\" title=\"\"><span class=\"null\">null</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">87</span></span>","<span class=\"formatted\" title=\"\"><span class=\"null\">null</span></span>","<span class=\"formatted\" title=\"\"><span class=\"null\">null</span></span>"] }, \n",
|
|
"{ name: "<span title=\"airline: String\">airline</span>", children: [], rightAlign: false, values: ["KLM","Air France","British Airways"," Air France","Swiss Air"] }, \n",
|
|
"], id: 486539456, rootId: 486539456, totalRows: 5 } ) });\n",
|
|
"/*-->*/\n",
|
|
"\n",
|
|
"call_DataFrame(function() { DataFrame.renderTable(486539456) });\n",
|
|
"\n",
|
|
"\n",
|
|
" </script>\n",
|
|
" </html>\"></iframe>\n",
|
|
" <script>\n",
|
|
" function o_resize_iframe_out_97() {\n",
|
|
" let elem = document.getElementById(\"iframe_out_97\");\n",
|
|
" resize_iframe_out_97(elem);\n",
|
|
" setInterval(resize_iframe_out_97, 5000, elem);\n",
|
|
" }\n",
|
|
" function resize_iframe_out_97(el) {\n",
|
|
" let h = el.contentWindow.document.body.scrollHeight;\n",
|
|
" el.height = h === 0 ? 0 : h + 41;\n",
|
|
" }\n",
|
|
" </script> <html>\n",
|
|
" <head>\n",
|
|
" <style type=\"text/css\">\n",
|
|
" :root {\n",
|
|
" --background: #fff;\n",
|
|
" --background-odd: #f5f5f5;\n",
|
|
" --background-hover: #d9edfd;\n",
|
|
" --header-text-color: #474747;\n",
|
|
" --text-color: #848484;\n",
|
|
" --text-color-dark: #000;\n",
|
|
" --text-color-medium: #737373;\n",
|
|
" --text-color-pale: #b3b3b3;\n",
|
|
" --inner-border-color: #aaa;\n",
|
|
" --bold-border-color: #000;\n",
|
|
" --link-color: #296eaa;\n",
|
|
" --link-color-pale: #296eaa;\n",
|
|
" --link-hover: #1a466c;\n",
|
|
"}\n",
|
|
"\n",
|
|
":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n",
|
|
" --background: #303030;\n",
|
|
" --background-odd: #3c3c3c;\n",
|
|
" --background-hover: #464646;\n",
|
|
" --header-text-color: #dddddd;\n",
|
|
" --text-color: #b3b3b3;\n",
|
|
" --text-color-dark: #dddddd;\n",
|
|
" --text-color-medium: #b2b2b2;\n",
|
|
" --text-color-pale: #737373;\n",
|
|
" --inner-border-color: #707070;\n",
|
|
" --bold-border-color: #777777;\n",
|
|
" --link-color: #008dc0;\n",
|
|
" --link-color-pale: #97e1fb;\n",
|
|
" --link-hover: #00688e;\n",
|
|
"}\n",
|
|
"\n",
|
|
"p.dataframe_description {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe {\n",
|
|
" font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n",
|
|
" font-size: 12px;\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--text-color-dark);\n",
|
|
" border: none;\n",
|
|
" border-collapse: collapse;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th, td {\n",
|
|
" padding: 6px;\n",
|
|
" border: 1px solid transparent;\n",
|
|
" text-align: left;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th {\n",
|
|
" background-color: var(--background);\n",
|
|
" color: var(--header-text-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td {\n",
|
|
" vertical-align: top;\n",
|
|
" white-space: nowrap;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.bottomBorder {\n",
|
|
" border-bottom-color: var(--bold-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(odd) {\n",
|
|
" background: var(--background-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:nth-child(even) {\n",
|
|
" background: var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tbody > tr:hover {\n",
|
|
" background: var(--background-hover);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--link-color);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover > td a {\n",
|
|
" color: var(--link-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe a:hover {\n",
|
|
" color: var(--link-hover);\n",
|
|
" text-decoration: underline;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe img {\n",
|
|
" max-width: fit-content;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe th.complex {\n",
|
|
" background-color: var(--background);\n",
|
|
" border: 1px solid var(--background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .leftBorder {\n",
|
|
" border-left-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightBorder {\n",
|
|
" border-right-color: var(--inner-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .rightAlign {\n",
|
|
" text-align: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expanderSvg {\n",
|
|
" width: 8px;\n",
|
|
" height: 8px;\n",
|
|
" margin-right: 3px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .expander {\n",
|
|
" display: flex;\n",
|
|
" align-items: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* formatting */\n",
|
|
"\n",
|
|
"table.dataframe .null {\n",
|
|
" color: var(--text-color-pale);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .structural {\n",
|
|
" color: var(--text-color-medium);\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .dataFrameCaption {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe .numbers {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe td:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"table.dataframe tr:hover .formatted .structural, .null {\n",
|
|
" color: var(--text-color-dark);\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
" </style>\n",
|
|
" </head>\n",
|
|
" <body>\n",
|
|
" <table class=\"dataframe\" id=\"static_df_486539457\"><thead><tr><th class=\"bottomBorder\" style=\"text-align:left\">from</th><th class=\"bottomBorder\" style=\"text-align:left\">to</th><th class=\"bottomBorder\" style=\"text-align:left\">flightNumber</th><th class=\"bottomBorder\" style=\"text-align:left\">delay1</th><th class=\"bottomBorder\" style=\"text-align:left\">delay2</th><th class=\"bottomBorder\" style=\"text-align:left\">delay3</th><th class=\"bottomBorder\" style=\"text-align:left\">airline</th></tr></thead><tbody><tr><td style=\"vertical-align:top\">London</td><td style=\"vertical-align:top\">Paris</td><td style=\"vertical-align:top\">10045</td><td style=\"vertical-align:top\">23</td><td style=\"vertical-align:top\">47</td><td style=\"vertical-align:top\">null</td><td style=\"vertical-align:top\">KLM</td></tr><tr><td style=\"vertical-align:top\">Madrid</td><td style=\"vertical-align:top\">Milan</td><td style=\"vertical-align:top\">10055</td><td style=\"vertical-align:top\">null</td><td style=\"vertical-align:top\">null</td><td style=\"vertical-align:top\">null</td><td style=\"vertical-align:top\">Air France</td></tr><tr><td style=\"vertical-align:top\">London</td><td style=\"vertical-align:top\">Stockholm</td><td style=\"vertical-align:top\">10065</td><td style=\"vertical-align:top\">24</td><td style=\"vertical-align:top\">43</td><td style=\"vertical-align:top\">87</td><td style=\"vertical-align:top\">British Airways</td></tr><tr><td style=\"vertical-align:top\">Budapest</td><td style=\"vertical-align:top\">Paris</td><td style=\"vertical-align:top\">10075</td><td style=\"vertical-align:top\">13</td><td style=\"vertical-align:top\">null</td><td style=\"vertical-align:top\">null</td><td style=\"vertical-align:top\"> Air France</td></tr><tr><td style=\"vertical-align:top\">Brussels</td><td style=\"vertical-align:top\">London</td><td style=\"vertical-align:top\">10085</td><td style=\"vertical-align:top\">67</td><td style=\"vertical-align:top\">32</td><td style=\"vertical-align:top\">null</td><td style=\"vertical-align:top\">Swiss Air</td></tr></tbody></table>\n",
|
|
" </body>\n",
|
|
" <script>\n",
|
|
" document.getElementById(\"static_df_486539457\").style.display = \"none\";\n",
|
|
" </script>\n",
|
|
" </html>"
|
|
],
|
|
"application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"from\",\"to\",\"flightNumber\",\"delay1\",\"delay2\",\"delay3\",\"airline\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int?\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int?\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Int?\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"}],\"nrow\":5,\"ncol\":7,\"is_formatted\":false},\"kotlin_dataframe\":[{\"from\":\"London\",\"to\":\"Paris\",\"flightNumber\":10045,\"delay1\":23,\"delay2\":47,\"delay3\":null,\"airline\":\"KLM\"},{\"from\":\"Madrid\",\"to\":\"Milan\",\"flightNumber\":10055,\"delay1\":null,\"delay2\":null,\"delay3\":null,\"airline\":\"Air France\"},{\"from\":\"London\",\"to\":\"Stockholm\",\"flightNumber\":10065,\"delay1\":24,\"delay2\":43,\"delay3\":87,\"airline\":\"British Airways\"},{\"from\":\"Budapest\",\"to\":\"Paris\",\"flightNumber\":10075,\"delay1\":13,\"delay2\":null,\"delay3\":null,\"airline\":\" Air France\"},{\"from\":\"Brussels\",\"to\":\"London\",\"flightNumber\":10085,\"delay1\":67,\"delay2\":32,\"delay3\":null,\"airline\":\"Swiss Air\"}]}"
|
|
},
|
|
"execution_count": 58,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 58
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "Kotlin",
|
|
"language": "kotlin",
|
|
"name": "kotlin"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": "text/x-kotlin",
|
|
"file_extension": ".kt",
|
|
"mimetype": "text/x-kotlin",
|
|
"name": "kotlin",
|
|
"nbconvert_exporter": "",
|
|
"pygments_lexer": "kotlin",
|
|
"version": "1.8.0-dev-707"
|
|
},
|
|
"ktnbPluginMetadata": {
|
|
"projectLibraries": false
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 1
|
|
}
|