blob: ac2682ab110ca4c47adc18929787ce17e24317d0 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en" data-content_root="../../">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Window Functions &#8212; Apache Arrow DataFusion documentation</title>
<link href="../../_static/styles/theme.css?digest=1999514e3f237ded88cf" rel="stylesheet">
<link href="../../_static/styles/pydata-sphinx-theme.css?digest=1999514e3f237ded88cf" rel="stylesheet">
<link rel="stylesheet"
href="../../_static/vendor/fontawesome/5.13.0/css/all.min.css">
<link rel="preload" as="font" type="font/woff2" crossorigin
href="../../_static/vendor/fontawesome/5.13.0/webfonts/fa-solid-900.woff2">
<link rel="preload" as="font" type="font/woff2" crossorigin
href="../../_static/vendor/fontawesome/5.13.0/webfonts/fa-brands-400.woff2">
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=8f2a1f02" />
<link rel="stylesheet" type="text/css" href="../../_static/styles/pydata-sphinx-theme.css?v=1140d252" />
<link rel="stylesheet" type="text/css" href="../../_static/graphviz.css?v=4ae1632d" />
<link rel="stylesheet" type="text/css" href="../../_static/theme_overrides.css?v=dca7052a" />
<link rel="preload" as="script" href="../../_static/scripts/pydata-sphinx-theme.js?digest=1999514e3f237ded88cf">
<script src="../../_static/documentation_options.js?v=8a448e45"></script>
<script src="../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
<link rel="next" title="User-Defined Functions" href="udf-and-udfa.html" />
<link rel="prev" title="Aggregation" href="aggregations.html" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="docsearch:language" content="en">
<!-- Google Analytics -->
</head>
<body data-spy="scroll" data-target="#bd-toc-nav" data-offset="80">
<div class="container-fluid" id="banner"></div>
<div class="container-xl">
<div class="row">
<!-- Only show if we have sidebars configured, else just a small margin -->
<div class="col-12 col-md-3 bd-sidebar">
<div class="sidebar-start-items">
<a class="navbar-brand" href="../../index.html">
<img src="../../_static/images/2x_bgwhite_original.png" class="logo" alt="logo">
</a>
<form class="bd-search d-flex align-items-center" action="../../search.html" method="get">
<i class="icon fas fa-search"></i>
<input type="search" class="form-control" name="q" id="search-input" placeholder="Search the docs ..." aria-label="Search the docs ..." autocomplete="off" >
</form>
<nav class="bd-links" id="bd-docs-nav" aria-label="Main navigation">
<div class="bd-toc-item active">
<p aria-level="2" class="caption" role="heading">
<span class="caption-text">
LINKS
</span>
</p>
<ul class="nav bd-sidenav">
<li class="toctree-l1">
<a class="reference external" href="https://github.com/apache/datafusion-python">
Github and Issue Tracker
</a>
</li>
<li class="toctree-l1">
<a class="reference external" href="https://docs.rs/datafusion/latest/datafusion/">
Rust's API Docs
</a>
</li>
<li class="toctree-l1">
<a class="reference external" href="https://github.com/apache/datafusion/blob/main/CODE_OF_CONDUCT.md">
Code of conduct
</a>
</li>
<li class="toctree-l1">
<a class="reference external" href="https://github.com/apache/datafusion-python/tree/main/examples">
Examples
</a>
</li>
</ul>
<p aria-level="2" class="caption" role="heading">
<span class="caption-text">
USER GUIDE
</span>
</p>
<ul class="current nav bd-sidenav">
<li class="toctree-l1">
<a class="reference internal" href="../introduction.html">
Introduction
</a>
</li>
<li class="toctree-l1">
<a class="reference internal" href="../basics.html">
Concepts
</a>
</li>
<li class="toctree-l1">
<a class="reference internal" href="../data-sources.html">
Data Sources
</a>
</li>
<li class="toctree-l1 has-children">
<a class="reference internal" href="../dataframe/index.html">
DataFrames
</a>
<input class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" type="checkbox"/>
<label for="toctree-checkbox-1">
<i class="fas fa-chevron-down">
</i>
</label>
<ul>
<li class="toctree-l2">
<a class="reference internal" href="../dataframe/rendering.html">
HTML Rendering in Jupyter
</a>
</li>
</ul>
</li>
<li class="toctree-l1 current active has-children">
<a class="reference internal" href="index.html">
Common Operations
</a>
<input checked="" class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" type="checkbox"/>
<label for="toctree-checkbox-2">
<i class="fas fa-chevron-down">
</i>
</label>
<ul class="current">
<li class="toctree-l2">
<a class="reference internal" href="views.html">
Registering Views
</a>
</li>
<li class="toctree-l2">
<a class="reference internal" href="basic-info.html">
Basic Operations
</a>
</li>
<li class="toctree-l2">
<a class="reference internal" href="select-and-filter.html">
Column Selections
</a>
</li>
<li class="toctree-l2">
<a class="reference internal" href="expressions.html">
Expressions
</a>
</li>
<li class="toctree-l2">
<a class="reference internal" href="joins.html">
Joins
</a>
</li>
<li class="toctree-l2">
<a class="reference internal" href="functions.html">
Functions
</a>
</li>
<li class="toctree-l2">
<a class="reference internal" href="aggregations.html">
Aggregation
</a>
</li>
<li class="toctree-l2 current active">
<a class="current reference internal" href="#">
Window Functions
</a>
</li>
<li class="toctree-l2">
<a class="reference internal" href="udf-and-udfa.html">
User-Defined Functions
</a>
</li>
</ul>
</li>
<li class="toctree-l1 has-children">
<a class="reference internal" href="../io/index.html">
IO
</a>
<input class="toctree-checkbox" id="toctree-checkbox-3" name="toctree-checkbox-3" type="checkbox"/>
<label for="toctree-checkbox-3">
<i class="fas fa-chevron-down">
</i>
</label>
<ul>
<li class="toctree-l2">
<a class="reference internal" href="../io/arrow.html">
Arrow
</a>
</li>
<li class="toctree-l2">
<a class="reference internal" href="../io/avro.html">
Avro
</a>
</li>
<li class="toctree-l2">
<a class="reference internal" href="../io/csv.html">
CSV
</a>
</li>
<li class="toctree-l2">
<a class="reference internal" href="../io/json.html">
JSON
</a>
</li>
<li class="toctree-l2">
<a class="reference internal" href="../io/parquet.html">
Parquet
</a>
</li>
<li class="toctree-l2">
<a class="reference internal" href="../io/table_provider.html">
Custom Table Provider
</a>
</li>
</ul>
</li>
<li class="toctree-l1">
<a class="reference internal" href="../configuration.html">
Configuration
</a>
</li>
<li class="toctree-l1">
<a class="reference internal" href="../sql.html">
SQL
</a>
</li>
</ul>
<p aria-level="2" class="caption" role="heading">
<span class="caption-text">
CONTRIBUTOR GUIDE
</span>
</p>
<ul class="nav bd-sidenav">
<li class="toctree-l1">
<a class="reference internal" href="../../contributor-guide/introduction.html">
Introduction
</a>
</li>
<li class="toctree-l1">
<a class="reference internal" href="../../contributor-guide/ffi.html">
Python Extensions
</a>
</li>
</ul>
<p aria-level="2" class="caption" role="heading">
<span class="caption-text">
API
</span>
</p>
<ul class="nav bd-sidenav">
<li class="toctree-l1 has-children">
<a class="reference internal" href="../../autoapi/index.html">
API Reference
</a>
<input class="toctree-checkbox" id="toctree-checkbox-4" name="toctree-checkbox-4" type="checkbox"/>
<label for="toctree-checkbox-4">
<i class="fas fa-chevron-down">
</i>
</label>
<ul>
<li class="toctree-l2 has-children">
<a class="reference internal" href="../../autoapi/datafusion/index.html">
datafusion
</a>
<input class="toctree-checkbox" id="toctree-checkbox-5" name="toctree-checkbox-5" type="checkbox"/>
<label for="toctree-checkbox-5">
<i class="fas fa-chevron-down">
</i>
</label>
<ul>
<li class="toctree-l3">
<a class="reference internal" href="../../autoapi/datafusion/catalog/index.html">
datafusion.catalog
</a>
</li>
<li class="toctree-l3">
<a class="reference internal" href="../../autoapi/datafusion/context/index.html">
datafusion.context
</a>
</li>
<li class="toctree-l3">
<a class="reference internal" href="../../autoapi/datafusion/dataframe/index.html">
datafusion.dataframe
</a>
</li>
<li class="toctree-l3">
<a class="reference internal" href="../../autoapi/datafusion/dataframe_formatter/index.html">
datafusion.dataframe_formatter
</a>
</li>
<li class="toctree-l3">
<a class="reference internal" href="../../autoapi/datafusion/expr/index.html">
datafusion.expr
</a>
</li>
<li class="toctree-l3">
<a class="reference internal" href="../../autoapi/datafusion/functions/index.html">
datafusion.functions
</a>
</li>
<li class="toctree-l3">
<a class="reference internal" href="../../autoapi/datafusion/html_formatter/index.html">
datafusion.html_formatter
</a>
</li>
<li class="toctree-l3 has-children">
<a class="reference internal" href="../../autoapi/datafusion/input/index.html">
datafusion.input
</a>
<input class="toctree-checkbox" id="toctree-checkbox-6" name="toctree-checkbox-6" type="checkbox"/>
<label for="toctree-checkbox-6">
<i class="fas fa-chevron-down">
</i>
</label>
<ul>
<li class="toctree-l4">
<a class="reference internal" href="../../autoapi/datafusion/input/base/index.html">
datafusion.input.base
</a>
</li>
<li class="toctree-l4">
<a class="reference internal" href="../../autoapi/datafusion/input/location/index.html">
datafusion.input.location
</a>
</li>
</ul>
</li>
<li class="toctree-l3">
<a class="reference internal" href="../../autoapi/datafusion/io/index.html">
datafusion.io
</a>
</li>
<li class="toctree-l3">
<a class="reference internal" href="../../autoapi/datafusion/object_store/index.html">
datafusion.object_store
</a>
</li>
<li class="toctree-l3">
<a class="reference internal" href="../../autoapi/datafusion/plan/index.html">
datafusion.plan
</a>
</li>
<li class="toctree-l3">
<a class="reference internal" href="../../autoapi/datafusion/record_batch/index.html">
datafusion.record_batch
</a>
</li>
<li class="toctree-l3">
<a class="reference internal" href="../../autoapi/datafusion/substrait/index.html">
datafusion.substrait
</a>
</li>
<li class="toctree-l3">
<a class="reference internal" href="../../autoapi/datafusion/unparser/index.html">
datafusion.unparser
</a>
</li>
<li class="toctree-l3">
<a class="reference internal" href="../../autoapi/datafusion/user_defined/index.html">
datafusion.user_defined
</a>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</nav>
</div>
<div class="sidebar-end-items">
</div>
</div>
<div class="d-none d-xl-block col-xl-2 bd-toc">
<div class="toc-item">
<div class="tocsection onthispage pt-5 pb-3">
<i class="fas fa-list"></i> On this page
</div>
<nav id="bd-toc-nav">
<ul class="visible nav section-nav flex-column">
<li class="toc-h2 nav-item toc-entry">
<a class="reference internal nav-link" href="#setting-parameters">
Setting Parameters
</a>
<ul class="visible nav section-nav flex-column">
<li class="toc-h3 nav-item toc-entry">
<a class="reference internal nav-link" href="#ordering">
Ordering
</a>
</li>
<li class="toc-h3 nav-item toc-entry">
<a class="reference internal nav-link" href="#partitions">
Partitions
</a>
</li>
<li class="toc-h3 nav-item toc-entry">
<a class="reference internal nav-link" href="#window-frame">
Window Frame
</a>
</li>
<li class="toc-h3 nav-item toc-entry">
<a class="reference internal nav-link" href="#null-treatment">
Null Treatment
</a>
</li>
</ul>
</li>
<li class="toc-h2 nav-item toc-entry">
<a class="reference internal nav-link" href="#aggregate-functions">
Aggregate Functions
</a>
</li>
<li class="toc-h2 nav-item toc-entry">
<a class="reference internal nav-link" href="#available-functions">
Available Functions
</a>
</li>
</ul>
</nav>
</div>
<div class="toc-item">
</div>
</div>
<main class="col-12 col-md-9 col-xl-7 py-md-5 pl-md-5 pr-md-4 bd-content" role="main">
<div>
<section id="window-functions">
<span id="id1"></span><h1>Window Functions<a class="headerlink" href="#window-functions" title="Link to this heading">ΒΆ</a></h1>
<p>In this section you will learn about window functions. A window function utilizes values from one or
multiple rows to produce a result for each individual row, unlike an aggregate function that
provides a single value for multiple rows.</p>
<p>The window functions are available in the <a class="reference internal" href="../../autoapi/datafusion/functions/index.html#module-datafusion.functions" title="datafusion.functions"><code class="xref py py-mod docutils literal notranslate"><span class="pre">functions</span></code></a> module.</p>
<p>We’ll use the pokemon dataset (from Ritchie Vink) in the following examples.</p>
<div class="highlight-ipython notranslate"><div class="highlight"><pre><span></span><span class="n">In</span> <span class="p">[</span><span class="mi">1</span><span class="p">]:</span> <span class="kn">from</span><span class="w"> </span><span class="nn">datafusion</span><span class="w"> </span><span class="kn">import</span> <span class="n">SessionContext</span>
<span class="n">In</span> <span class="p">[</span><span class="mi">2</span><span class="p">]:</span> <span class="kn">from</span><span class="w"> </span><span class="nn">datafusion</span><span class="w"> </span><span class="kn">import</span> <span class="n">col</span><span class="p">,</span> <span class="n">lit</span>
<span class="n">In</span> <span class="p">[</span><span class="mi">3</span><span class="p">]:</span> <span class="kn">from</span><span class="w"> </span><span class="nn">datafusion</span><span class="w"> </span><span class="kn">import</span> <span class="n">functions</span> <span class="k">as</span> <span class="n">f</span>
<span class="n">In</span> <span class="p">[</span><span class="mi">4</span><span class="p">]:</span> <span class="n">ctx</span> <span class="o">=</span> <span class="n">SessionContext</span><span class="p">()</span>
<span class="n">In</span> <span class="p">[</span><span class="mi">5</span><span class="p">]:</span> <span class="n">df</span> <span class="o">=</span> <span class="n">ctx</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="s2">&quot;pokemon.csv&quot;</span><span class="p">)</span>
</pre></div>
</div>
<p>Here is an example that shows how you can compare each pokemon’s speed to the speed of the
previous row in the DataFrame.</p>
<div class="highlight-ipython notranslate"><div class="highlight"><pre><span></span><span class="n">In</span> <span class="p">[</span><span class="mi">6</span><span class="p">]:</span> <span class="n">df</span><span class="o">.</span><span class="n">select</span><span class="p">(</span>
<span class="o">...</span><span class="p">:</span> <span class="n">col</span><span class="p">(</span><span class="s1">&#39;&quot;Name&quot;&#39;</span><span class="p">),</span>
<span class="o">...</span><span class="p">:</span> <span class="n">col</span><span class="p">(</span><span class="s1">&#39;&quot;Speed&quot;&#39;</span><span class="p">),</span>
<span class="o">...</span><span class="p">:</span> <span class="n">f</span><span class="o">.</span><span class="n">lag</span><span class="p">(</span><span class="n">col</span><span class="p">(</span><span class="s1">&#39;&quot;Speed&quot;&#39;</span><span class="p">))</span><span class="o">.</span><span class="n">alias</span><span class="p">(</span><span class="s2">&quot;Previous Speed&quot;</span><span class="p">)</span>
<span class="o">...</span><span class="p">:</span> <span class="p">)</span>
<span class="o">...</span><span class="p">:</span>
<span class="n">Out</span><span class="p">[</span><span class="mi">6</span><span class="p">]:</span>
<span class="n">DataFrame</span><span class="p">()</span>
<span class="o">+---------------------------+-------+----------------+</span>
<span class="o">|</span> <span class="n">Name</span> <span class="o">|</span> <span class="n">Speed</span> <span class="o">|</span> <span class="n">Previous</span> <span class="n">Speed</span> <span class="o">|</span>
<span class="o">+---------------------------+-------+----------------+</span>
<span class="o">|</span> <span class="n">Bulbasaur</span> <span class="o">|</span> <span class="mi">45</span> <span class="o">|</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Ivysaur</span> <span class="o">|</span> <span class="mi">60</span> <span class="o">|</span> <span class="mi">45</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Venusaur</span> <span class="o">|</span> <span class="mi">80</span> <span class="o">|</span> <span class="mi">60</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">VenusaurMega</span> <span class="n">Venusaur</span> <span class="o">|</span> <span class="mi">80</span> <span class="o">|</span> <span class="mi">80</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Charmander</span> <span class="o">|</span> <span class="mi">65</span> <span class="o">|</span> <span class="mi">80</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Charmeleon</span> <span class="o">|</span> <span class="mi">80</span> <span class="o">|</span> <span class="mi">65</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Charizard</span> <span class="o">|</span> <span class="mi">100</span> <span class="o">|</span> <span class="mi">80</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">CharizardMega</span> <span class="n">Charizard</span> <span class="n">X</span> <span class="o">|</span> <span class="mi">100</span> <span class="o">|</span> <span class="mi">100</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">CharizardMega</span> <span class="n">Charizard</span> <span class="n">Y</span> <span class="o">|</span> <span class="mi">100</span> <span class="o">|</span> <span class="mi">100</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Squirtle</span> <span class="o">|</span> <span class="mi">43</span> <span class="o">|</span> <span class="mi">100</span> <span class="o">|</span>
<span class="o">+---------------------------+-------+----------------+</span>
<span class="n">Data</span> <span class="n">truncated</span><span class="o">.</span>
</pre></div>
</div>
<section id="setting-parameters">
<h2>Setting Parameters<a class="headerlink" href="#setting-parameters" title="Link to this heading">ΒΆ</a></h2>
<section id="ordering">
<h3>Ordering<a class="headerlink" href="#ordering" title="Link to this heading">ΒΆ</a></h3>
<p>You can control the order in which rows are processed by window functions by providing
a list of <code class="docutils literal notranslate"><span class="pre">order_by</span></code> functions for the <code class="docutils literal notranslate"><span class="pre">order_by</span></code> parameter.</p>
<div class="highlight-ipython notranslate"><div class="highlight"><pre><span></span><span class="n">In</span> <span class="p">[</span><span class="mi">7</span><span class="p">]:</span> <span class="n">df</span><span class="o">.</span><span class="n">select</span><span class="p">(</span>
<span class="o">...</span><span class="p">:</span> <span class="n">col</span><span class="p">(</span><span class="s1">&#39;&quot;Name&quot;&#39;</span><span class="p">),</span>
<span class="o">...</span><span class="p">:</span> <span class="n">col</span><span class="p">(</span><span class="s1">&#39;&quot;Attack&quot;&#39;</span><span class="p">),</span>
<span class="o">...</span><span class="p">:</span> <span class="n">col</span><span class="p">(</span><span class="s1">&#39;&quot;Type 1&quot;&#39;</span><span class="p">),</span>
<span class="o">...</span><span class="p">:</span> <span class="n">f</span><span class="o">.</span><span class="n">rank</span><span class="p">(</span>
<span class="o">...</span><span class="p">:</span> <span class="n">partition_by</span><span class="o">=</span><span class="p">[</span><span class="n">col</span><span class="p">(</span><span class="s1">&#39;&quot;Type 1&quot;&#39;</span><span class="p">)],</span>
<span class="o">...</span><span class="p">:</span> <span class="n">order_by</span><span class="o">=</span><span class="p">[</span><span class="n">col</span><span class="p">(</span><span class="s1">&#39;&quot;Attack&quot;&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">sort</span><span class="p">(</span><span class="n">ascending</span><span class="o">=</span><span class="kc">True</span><span class="p">)],</span>
<span class="o">...</span><span class="p">:</span> <span class="p">)</span><span class="o">.</span><span class="n">alias</span><span class="p">(</span><span class="s2">&quot;rank&quot;</span><span class="p">),</span>
<span class="o">...</span><span class="p">:</span> <span class="p">)</span><span class="o">.</span><span class="n">sort</span><span class="p">(</span><span class="n">col</span><span class="p">(</span><span class="s1">&#39;&quot;Type 1&quot;&#39;</span><span class="p">),</span> <span class="n">col</span><span class="p">(</span><span class="s1">&#39;&quot;Attack&quot;&#39;</span><span class="p">))</span>
<span class="o">...</span><span class="p">:</span>
<span class="n">Out</span><span class="p">[</span><span class="mi">7</span><span class="p">]:</span>
<span class="n">DataFrame</span><span class="p">()</span>
<span class="o">+------------+--------+--------+------+</span>
<span class="o">|</span> <span class="n">Name</span> <span class="o">|</span> <span class="n">Attack</span> <span class="o">|</span> <span class="n">Type</span> <span class="mi">1</span> <span class="o">|</span> <span class="n">rank</span> <span class="o">|</span>
<span class="o">+------------+--------+--------+------+</span>
<span class="o">|</span> <span class="n">Metapod</span> <span class="o">|</span> <span class="mi">20</span> <span class="o">|</span> <span class="n">Bug</span> <span class="o">|</span> <span class="mi">1</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Kakuna</span> <span class="o">|</span> <span class="mi">25</span> <span class="o">|</span> <span class="n">Bug</span> <span class="o">|</span> <span class="mi">2</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Caterpie</span> <span class="o">|</span> <span class="mi">30</span> <span class="o">|</span> <span class="n">Bug</span> <span class="o">|</span> <span class="mi">3</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Weedle</span> <span class="o">|</span> <span class="mi">35</span> <span class="o">|</span> <span class="n">Bug</span> <span class="o">|</span> <span class="mi">4</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Butterfree</span> <span class="o">|</span> <span class="mi">45</span> <span class="o">|</span> <span class="n">Bug</span> <span class="o">|</span> <span class="mi">5</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Venonat</span> <span class="o">|</span> <span class="mi">55</span> <span class="o">|</span> <span class="n">Bug</span> <span class="o">|</span> <span class="mi">6</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Venomoth</span> <span class="o">|</span> <span class="mi">65</span> <span class="o">|</span> <span class="n">Bug</span> <span class="o">|</span> <span class="mi">7</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Paras</span> <span class="o">|</span> <span class="mi">70</span> <span class="o">|</span> <span class="n">Bug</span> <span class="o">|</span> <span class="mi">8</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Beedrill</span> <span class="o">|</span> <span class="mi">90</span> <span class="o">|</span> <span class="n">Bug</span> <span class="o">|</span> <span class="mi">9</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Parasect</span> <span class="o">|</span> <span class="mi">95</span> <span class="o">|</span> <span class="n">Bug</span> <span class="o">|</span> <span class="mi">10</span> <span class="o">|</span>
<span class="o">+------------+--------+--------+------+</span>
<span class="n">Data</span> <span class="n">truncated</span><span class="o">.</span>
</pre></div>
</div>
</section>
<section id="partitions">
<h3>Partitions<a class="headerlink" href="#partitions" title="Link to this heading">ΒΆ</a></h3>
<p>A window function can take a list of <code class="docutils literal notranslate"><span class="pre">partition_by</span></code> columns similar to an
<a class="reference internal" href="aggregations.html#aggregation"><span class="std std-ref">Aggregation Function</span></a>. This will cause the window values to be evaluated
independently for each of the partitions. In the example above, we found the rank of each
Pokemon per <code class="docutils literal notranslate"><span class="pre">Type</span> <span class="pre">1</span></code> partitions. We can see the first couple of each partition if we do
the following:</p>
<div class="highlight-ipython notranslate"><div class="highlight"><pre><span></span><span class="n">In</span> <span class="p">[</span><span class="mi">8</span><span class="p">]:</span> <span class="n">df</span><span class="o">.</span><span class="n">select</span><span class="p">(</span>
<span class="o">...</span><span class="p">:</span> <span class="n">col</span><span class="p">(</span><span class="s1">&#39;&quot;Name&quot;&#39;</span><span class="p">),</span>
<span class="o">...</span><span class="p">:</span> <span class="n">col</span><span class="p">(</span><span class="s1">&#39;&quot;Attack&quot;&#39;</span><span class="p">),</span>
<span class="o">...</span><span class="p">:</span> <span class="n">col</span><span class="p">(</span><span class="s1">&#39;&quot;Type 1&quot;&#39;</span><span class="p">),</span>
<span class="o">...</span><span class="p">:</span> <span class="n">f</span><span class="o">.</span><span class="n">rank</span><span class="p">(</span>
<span class="o">...</span><span class="p">:</span> <span class="n">partition_by</span><span class="o">=</span><span class="p">[</span><span class="n">col</span><span class="p">(</span><span class="s1">&#39;&quot;Type 1&quot;&#39;</span><span class="p">)],</span>
<span class="o">...</span><span class="p">:</span> <span class="n">order_by</span><span class="o">=</span><span class="p">[</span><span class="n">col</span><span class="p">(</span><span class="s1">&#39;&quot;Attack&quot;&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">sort</span><span class="p">(</span><span class="n">ascending</span><span class="o">=</span><span class="kc">True</span><span class="p">)],</span>
<span class="o">...</span><span class="p">:</span> <span class="p">)</span><span class="o">.</span><span class="n">alias</span><span class="p">(</span><span class="s2">&quot;rank&quot;</span><span class="p">),</span>
<span class="o">...</span><span class="p">:</span> <span class="p">)</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">col</span><span class="p">(</span><span class="s2">&quot;rank&quot;</span><span class="p">)</span> <span class="o">&lt;</span> <span class="n">lit</span><span class="p">(</span><span class="mi">3</span><span class="p">))</span><span class="o">.</span><span class="n">sort</span><span class="p">(</span><span class="n">col</span><span class="p">(</span><span class="s1">&#39;&quot;Type 1&quot;&#39;</span><span class="p">),</span> <span class="n">col</span><span class="p">(</span><span class="s2">&quot;rank&quot;</span><span class="p">))</span>
<span class="o">...</span><span class="p">:</span>
<span class="n">Out</span><span class="p">[</span><span class="mi">8</span><span class="p">]:</span>
<span class="n">DataFrame</span><span class="p">()</span>
<span class="o">+-----------+--------+----------+------+</span>
<span class="o">|</span> <span class="n">Name</span> <span class="o">|</span> <span class="n">Attack</span> <span class="o">|</span> <span class="n">Type</span> <span class="mi">1</span> <span class="o">|</span> <span class="n">rank</span> <span class="o">|</span>
<span class="o">+-----------+--------+----------+------+</span>
<span class="o">|</span> <span class="n">Metapod</span> <span class="o">|</span> <span class="mi">20</span> <span class="o">|</span> <span class="n">Bug</span> <span class="o">|</span> <span class="mi">1</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Kakuna</span> <span class="o">|</span> <span class="mi">25</span> <span class="o">|</span> <span class="n">Bug</span> <span class="o">|</span> <span class="mi">2</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Dratini</span> <span class="o">|</span> <span class="mi">64</span> <span class="o">|</span> <span class="n">Dragon</span> <span class="o">|</span> <span class="mi">1</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Dragonair</span> <span class="o">|</span> <span class="mi">84</span> <span class="o">|</span> <span class="n">Dragon</span> <span class="o">|</span> <span class="mi">2</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Voltorb</span> <span class="o">|</span> <span class="mi">30</span> <span class="o">|</span> <span class="n">Electric</span> <span class="o">|</span> <span class="mi">1</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Magnemite</span> <span class="o">|</span> <span class="mi">35</span> <span class="o">|</span> <span class="n">Electric</span> <span class="o">|</span> <span class="mi">2</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Clefairy</span> <span class="o">|</span> <span class="mi">45</span> <span class="o">|</span> <span class="n">Fairy</span> <span class="o">|</span> <span class="mi">1</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Clefable</span> <span class="o">|</span> <span class="mi">70</span> <span class="o">|</span> <span class="n">Fairy</span> <span class="o">|</span> <span class="mi">2</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Machop</span> <span class="o">|</span> <span class="mi">80</span> <span class="o">|</span> <span class="n">Fighting</span> <span class="o">|</span> <span class="mi">1</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Mankey</span> <span class="o">|</span> <span class="mi">80</span> <span class="o">|</span> <span class="n">Fighting</span> <span class="o">|</span> <span class="mi">1</span> <span class="o">|</span>
<span class="o">+-----------+--------+----------+------+</span>
<span class="n">Data</span> <span class="n">truncated</span><span class="o">.</span>
</pre></div>
</div>
</section>
<section id="window-frame">
<h3>Window Frame<a class="headerlink" href="#window-frame" title="Link to this heading">ΒΆ</a></h3>
<p>When using aggregate functions, the Window Frame of defines the rows over which it operates.
If you do not specify a Window Frame, the frame will be set depending on the following
criteria.</p>
<ul class="simple">
<li><p>If an <code class="docutils literal notranslate"><span class="pre">order_by</span></code> clause is set, the default window frame is defined as the rows between
unbounded preceding and the current row.</p></li>
<li><p>If an <code class="docutils literal notranslate"><span class="pre">order_by</span></code> is not set, the default frame is defined as the rows between unbounded
and unbounded following (the entire partition).</p></li>
</ul>
<p>Window Frames are defined by three parameters: unit type, starting bound, and ending bound.</p>
<p>The unit types available are:</p>
<ul class="simple">
<li><p>Rows: The starting and ending boundaries are defined by the number of rows relative to the
current row.</p></li>
<li><p>Range: When using Range, the <code class="docutils literal notranslate"><span class="pre">order_by</span></code> clause must have exactly one term. The boundaries
are defined bow how close the rows are to the value of the expression in the <code class="docutils literal notranslate"><span class="pre">order_by</span></code>
parameter.</p></li>
<li><p>Groups: A β€œgroup” is the set of all rows that have equivalent values for all terms in the
<code class="docutils literal notranslate"><span class="pre">order_by</span></code> clause.</p></li>
</ul>
<p>In this example we perform a β€œrolling average” of the speed of the current Pokemon and the
two preceding rows.</p>
<div class="highlight-ipython notranslate"><div class="highlight"><pre><span></span><span class="n">In</span> <span class="p">[</span><span class="mi">9</span><span class="p">]:</span> <span class="kn">from</span><span class="w"> </span><span class="nn">datafusion.expr</span><span class="w"> </span><span class="kn">import</span> <span class="n">Window</span><span class="p">,</span> <span class="n">WindowFrame</span>
<span class="n">In</span> <span class="p">[</span><span class="mi">10</span><span class="p">]:</span> <span class="n">df</span><span class="o">.</span><span class="n">select</span><span class="p">(</span>
<span class="o">....</span><span class="p">:</span> <span class="n">col</span><span class="p">(</span><span class="s1">&#39;&quot;Name&quot;&#39;</span><span class="p">),</span>
<span class="o">....</span><span class="p">:</span> <span class="n">col</span><span class="p">(</span><span class="s1">&#39;&quot;Speed&quot;&#39;</span><span class="p">),</span>
<span class="o">....</span><span class="p">:</span> <span class="n">f</span><span class="o">.</span><span class="n">avg</span><span class="p">(</span><span class="n">col</span><span class="p">(</span><span class="s1">&#39;&quot;Speed&quot;&#39;</span><span class="p">))</span>
<span class="o">....</span><span class="p">:</span> <span class="o">.</span><span class="n">over</span><span class="p">(</span><span class="n">Window</span><span class="p">(</span><span class="n">window_frame</span><span class="o">=</span><span class="n">WindowFrame</span><span class="p">(</span><span class="s2">&quot;rows&quot;</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">order_by</span><span class="o">=</span><span class="p">[</span><span class="n">col</span><span class="p">(</span><span class="s1">&#39;&quot;Speed&quot;&#39;</span><span class="p">)]))</span>
<span class="o">....</span><span class="p">:</span> <span class="o">.</span><span class="n">alias</span><span class="p">(</span><span class="s2">&quot;Previous Speed&quot;</span><span class="p">),</span>
<span class="o">....</span><span class="p">:</span> <span class="p">)</span>
<span class="o">....</span><span class="p">:</span>
<span class="n">Out</span><span class="p">[</span><span class="mi">10</span><span class="p">]:</span>
<span class="n">DataFrame</span><span class="p">()</span>
<span class="o">+------------+-------+--------------------+</span>
<span class="o">|</span> <span class="n">Name</span> <span class="o">|</span> <span class="n">Speed</span> <span class="o">|</span> <span class="n">Previous</span> <span class="n">Speed</span> <span class="o">|</span>
<span class="o">+------------+-------+--------------------+</span>
<span class="o">|</span> <span class="n">Slowpoke</span> <span class="o">|</span> <span class="mi">15</span> <span class="o">|</span> <span class="mf">15.0</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Jigglypuff</span> <span class="o">|</span> <span class="mi">20</span> <span class="o">|</span> <span class="mf">17.5</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Geodude</span> <span class="o">|</span> <span class="mi">20</span> <span class="o">|</span> <span class="mf">18.333333333333332</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Paras</span> <span class="o">|</span> <span class="mi">25</span> <span class="o">|</span> <span class="mf">21.666666666666668</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Grimer</span> <span class="o">|</span> <span class="mi">25</span> <span class="o">|</span> <span class="mf">23.333333333333332</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Rhyhorn</span> <span class="o">|</span> <span class="mi">25</span> <span class="o">|</span> <span class="mf">25.0</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Snorlax</span> <span class="o">|</span> <span class="mi">30</span> <span class="o">|</span> <span class="mf">26.666666666666668</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Metapod</span> <span class="o">|</span> <span class="mi">30</span> <span class="o">|</span> <span class="mf">28.333333333333332</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Oddish</span> <span class="o">|</span> <span class="mi">30</span> <span class="o">|</span> <span class="mf">30.0</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Parasect</span> <span class="o">|</span> <span class="mi">30</span> <span class="o">|</span> <span class="mf">30.0</span> <span class="o">|</span>
<span class="o">+------------+-------+--------------------+</span>
<span class="n">Data</span> <span class="n">truncated</span><span class="o">.</span>
</pre></div>
</div>
</section>
<section id="null-treatment">
<h3>Null Treatment<a class="headerlink" href="#null-treatment" title="Link to this heading">ΒΆ</a></h3>
<p>When using aggregate functions as window functions, it is often useful to specify how null values
should be treated. In order to do this you need to use the builder function. In future releases
we expect this to be simplified in the interface.</p>
<p>One common usage for handling nulls is the case where you want to find the last value up to the
current row. In the following example we demonstrate how setting the null treatment to ignore
nulls will fill in with the value of the most recent non-null row. To do this, we also will set
the window frame so that we only process up to the current row.</p>
<p>In this example, we filter down to one specific type of Pokemon that does have some entries in
it’s <code class="docutils literal notranslate"><span class="pre">Type</span> <span class="pre">2</span></code> column that are null.</p>
<div class="highlight-ipython notranslate"><div class="highlight"><pre><span></span><span class="n">In</span> <span class="p">[</span><span class="mi">11</span><span class="p">]:</span> <span class="kn">from</span><span class="w"> </span><span class="nn">datafusion.common</span><span class="w"> </span><span class="kn">import</span> <span class="n">NullTreatment</span>
<span class="n">In</span> <span class="p">[</span><span class="mi">12</span><span class="p">]:</span> <span class="n">df</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">col</span><span class="p">(</span><span class="s1">&#39;&quot;Type 1&quot;&#39;</span><span class="p">)</span> <span class="o">==</span> <span class="n">lit</span><span class="p">(</span><span class="s2">&quot;Bug&quot;</span><span class="p">))</span><span class="o">.</span><span class="n">select</span><span class="p">(</span>
<span class="o">....</span><span class="p">:</span> <span class="s1">&#39;&quot;Name&quot;&#39;</span><span class="p">,</span>
<span class="o">....</span><span class="p">:</span> <span class="s1">&#39;&quot;Type 2&quot;&#39;</span><span class="p">,</span>
<span class="o">....</span><span class="p">:</span> <span class="n">f</span><span class="o">.</span><span class="n">last_value</span><span class="p">(</span><span class="n">col</span><span class="p">(</span><span class="s1">&#39;&quot;Type 2&quot;&#39;</span><span class="p">))</span>
<span class="o">....</span><span class="p">:</span> <span class="o">.</span><span class="n">over</span><span class="p">(</span>
<span class="o">....</span><span class="p">:</span> <span class="n">Window</span><span class="p">(</span>
<span class="o">....</span><span class="p">:</span> <span class="n">window_frame</span><span class="o">=</span><span class="n">WindowFrame</span><span class="p">(</span><span class="s2">&quot;rows&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
<span class="o">....</span><span class="p">:</span> <span class="n">order_by</span><span class="o">=</span><span class="p">[</span><span class="n">col</span><span class="p">(</span><span class="s1">&#39;&quot;Speed&quot;&#39;</span><span class="p">)],</span>
<span class="o">....</span><span class="p">:</span> <span class="n">null_treatment</span><span class="o">=</span><span class="n">NullTreatment</span><span class="o">.</span><span class="n">IGNORE_NULLS</span><span class="p">,</span>
<span class="o">....</span><span class="p">:</span> <span class="p">)</span>
<span class="o">....</span><span class="p">:</span> <span class="p">)</span>
<span class="o">....</span><span class="p">:</span> <span class="o">.</span><span class="n">alias</span><span class="p">(</span><span class="s2">&quot;last_wo_null&quot;</span><span class="p">),</span>
<span class="o">....</span><span class="p">:</span> <span class="n">f</span><span class="o">.</span><span class="n">last_value</span><span class="p">(</span><span class="n">col</span><span class="p">(</span><span class="s1">&#39;&quot;Type 2&quot;&#39;</span><span class="p">))</span>
<span class="o">....</span><span class="p">:</span> <span class="o">.</span><span class="n">over</span><span class="p">(</span>
<span class="o">....</span><span class="p">:</span> <span class="n">Window</span><span class="p">(</span>
<span class="o">....</span><span class="p">:</span> <span class="n">window_frame</span><span class="o">=</span><span class="n">WindowFrame</span><span class="p">(</span><span class="s2">&quot;rows&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
<span class="o">....</span><span class="p">:</span> <span class="n">order_by</span><span class="o">=</span><span class="p">[</span><span class="n">col</span><span class="p">(</span><span class="s1">&#39;&quot;Speed&quot;&#39;</span><span class="p">)],</span>
<span class="o">....</span><span class="p">:</span> <span class="n">null_treatment</span><span class="o">=</span><span class="n">NullTreatment</span><span class="o">.</span><span class="n">RESPECT_NULLS</span><span class="p">,</span>
<span class="o">....</span><span class="p">:</span> <span class="p">)</span>
<span class="o">....</span><span class="p">:</span> <span class="p">)</span>
<span class="o">....</span><span class="p">:</span> <span class="o">.</span><span class="n">alias</span><span class="p">(</span><span class="s2">&quot;last_with_null&quot;</span><span class="p">),</span>
<span class="o">....</span><span class="p">:</span> <span class="p">)</span>
<span class="o">....</span><span class="p">:</span>
<span class="n">Out</span><span class="p">[</span><span class="mi">12</span><span class="p">]:</span>
<span class="n">DataFrame</span><span class="p">()</span>
<span class="o">+------------+--------+--------------+----------------+</span>
<span class="o">|</span> <span class="n">Name</span> <span class="o">|</span> <span class="n">Type</span> <span class="mi">2</span> <span class="o">|</span> <span class="n">last_wo_null</span> <span class="o">|</span> <span class="n">last_with_null</span> <span class="o">|</span>
<span class="o">+------------+--------+--------------+----------------+</span>
<span class="o">|</span> <span class="n">Paras</span> <span class="o">|</span> <span class="n">Grass</span> <span class="o">|</span> <span class="n">Grass</span> <span class="o">|</span> <span class="n">Grass</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Metapod</span> <span class="o">|</span> <span class="o">|</span> <span class="n">Grass</span> <span class="o">|</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Parasect</span> <span class="o">|</span> <span class="n">Grass</span> <span class="o">|</span> <span class="n">Grass</span> <span class="o">|</span> <span class="n">Grass</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Kakuna</span> <span class="o">|</span> <span class="n">Poison</span> <span class="o">|</span> <span class="n">Poison</span> <span class="o">|</span> <span class="n">Poison</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Caterpie</span> <span class="o">|</span> <span class="o">|</span> <span class="n">Poison</span> <span class="o">|</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Venonat</span> <span class="o">|</span> <span class="n">Poison</span> <span class="o">|</span> <span class="n">Poison</span> <span class="o">|</span> <span class="n">Poison</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Weedle</span> <span class="o">|</span> <span class="n">Poison</span> <span class="o">|</span> <span class="n">Poison</span> <span class="o">|</span> <span class="n">Poison</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Butterfree</span> <span class="o">|</span> <span class="n">Flying</span> <span class="o">|</span> <span class="n">Flying</span> <span class="o">|</span> <span class="n">Flying</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Beedrill</span> <span class="o">|</span> <span class="n">Poison</span> <span class="o">|</span> <span class="n">Poison</span> <span class="o">|</span> <span class="n">Poison</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Pinsir</span> <span class="o">|</span> <span class="o">|</span> <span class="n">Poison</span> <span class="o">|</span> <span class="o">|</span>
<span class="o">+------------+--------+--------------+----------------+</span>
<span class="n">Data</span> <span class="n">truncated</span><span class="o">.</span>
</pre></div>
</div>
</section>
</section>
<section id="aggregate-functions">
<h2>Aggregate Functions<a class="headerlink" href="#aggregate-functions" title="Link to this heading">ΒΆ</a></h2>
<p>You can use any <a class="reference internal" href="aggregations.html#aggregation"><span class="std std-ref">Aggregation Function</span></a> as a window function. Currently
aggregate functions must use the deprecated
<a class="reference internal" href="../../autoapi/datafusion/functions/index.html#datafusion.functions.window" title="datafusion.functions.window"><code class="xref py py-func docutils literal notranslate"><span class="pre">datafusion.functions.window()</span></code></a> API but this should be resolved in
DataFusion 42.0 (<a class="reference external" href="https://github.com/apache/datafusion-python/issues/833">Issue Link</a>). Here
is an example that shows how to compare each pokemons’s attack power with the average attack
power in its <code class="docutils literal notranslate"><span class="pre">&quot;Type</span> <span class="pre">1&quot;</span></code> using the <a class="reference internal" href="../../autoapi/datafusion/functions/index.html#datafusion.functions.avg" title="datafusion.functions.avg"><code class="xref py py-func docutils literal notranslate"><span class="pre">datafusion.functions.avg()</span></code></a> function.</p>
<div class="highlight-ipython notranslate"><div class="highlight"><pre><span></span><span class="n">In</span> <span class="p">[</span><span class="mi">13</span><span class="p">]:</span> <span class="n">df</span><span class="o">.</span><span class="n">select</span><span class="p">(</span>
<span class="o">....</span><span class="p">:</span> <span class="n">col</span><span class="p">(</span><span class="s1">&#39;&quot;Name&quot;&#39;</span><span class="p">),</span>
<span class="o">....</span><span class="p">:</span> <span class="n">col</span><span class="p">(</span><span class="s1">&#39;&quot;Attack&quot;&#39;</span><span class="p">),</span>
<span class="o">....</span><span class="p">:</span> <span class="n">col</span><span class="p">(</span><span class="s1">&#39;&quot;Type 1&quot;&#39;</span><span class="p">),</span>
<span class="o">....</span><span class="p">:</span> <span class="n">f</span><span class="o">.</span><span class="n">window</span><span class="p">(</span><span class="s2">&quot;avg&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">col</span><span class="p">(</span><span class="s1">&#39;&quot;Attack&quot;&#39;</span><span class="p">)])</span>
<span class="o">....</span><span class="p">:</span> <span class="o">.</span><span class="n">partition_by</span><span class="p">(</span><span class="n">col</span><span class="p">(</span><span class="s1">&#39;&quot;Type 1&quot;&#39;</span><span class="p">))</span>
<span class="o">....</span><span class="p">:</span> <span class="o">.</span><span class="n">build</span><span class="p">()</span>
<span class="o">....</span><span class="p">:</span> <span class="o">.</span><span class="n">alias</span><span class="p">(</span><span class="s2">&quot;Average Attack&quot;</span><span class="p">),</span>
<span class="o">....</span><span class="p">:</span> <span class="p">)</span>
<span class="o">....</span><span class="p">:</span>
<span class="n">Out</span><span class="p">[</span><span class="mi">13</span><span class="p">]:</span>
<span class="n">DataFrame</span><span class="p">()</span>
<span class="o">+-----------------------+--------+--------+-------------------+</span>
<span class="o">|</span> <span class="n">Name</span> <span class="o">|</span> <span class="n">Attack</span> <span class="o">|</span> <span class="n">Type</span> <span class="mi">1</span> <span class="o">|</span> <span class="n">Average</span> <span class="n">Attack</span> <span class="o">|</span>
<span class="o">+-----------------------+--------+--------+-------------------+</span>
<span class="o">|</span> <span class="n">Metapod</span> <span class="o">|</span> <span class="mi">20</span> <span class="o">|</span> <span class="n">Bug</span> <span class="o">|</span> <span class="mf">76.42857142857143</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Butterfree</span> <span class="o">|</span> <span class="mi">45</span> <span class="o">|</span> <span class="n">Bug</span> <span class="o">|</span> <span class="mf">76.42857142857143</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Weedle</span> <span class="o">|</span> <span class="mi">35</span> <span class="o">|</span> <span class="n">Bug</span> <span class="o">|</span> <span class="mf">76.42857142857143</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Kakuna</span> <span class="o">|</span> <span class="mi">25</span> <span class="o">|</span> <span class="n">Bug</span> <span class="o">|</span> <span class="mf">76.42857142857143</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Beedrill</span> <span class="o">|</span> <span class="mi">90</span> <span class="o">|</span> <span class="n">Bug</span> <span class="o">|</span> <span class="mf">76.42857142857143</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">BeedrillMega</span> <span class="n">Beedrill</span> <span class="o">|</span> <span class="mi">150</span> <span class="o">|</span> <span class="n">Bug</span> <span class="o">|</span> <span class="mf">76.42857142857143</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Paras</span> <span class="o">|</span> <span class="mi">70</span> <span class="o">|</span> <span class="n">Bug</span> <span class="o">|</span> <span class="mf">76.42857142857143</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Parasect</span> <span class="o">|</span> <span class="mi">95</span> <span class="o">|</span> <span class="n">Bug</span> <span class="o">|</span> <span class="mf">76.42857142857143</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Venonat</span> <span class="o">|</span> <span class="mi">55</span> <span class="o">|</span> <span class="n">Bug</span> <span class="o">|</span> <span class="mf">76.42857142857143</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Venomoth</span> <span class="o">|</span> <span class="mi">65</span> <span class="o">|</span> <span class="n">Bug</span> <span class="o">|</span> <span class="mf">76.42857142857143</span> <span class="o">|</span>
<span class="o">+-----------------------+--------+--------+-------------------+</span>
<span class="n">Data</span> <span class="n">truncated</span><span class="o">.</span>
</pre></div>
</div>
</section>
<section id="available-functions">
<h2>Available Functions<a class="headerlink" href="#available-functions" title="Link to this heading">ΒΆ</a></h2>
<p>The possible window functions are:</p>
<ol class="arabic simple">
<li><dl class="simple">
<dt>Rank Functions</dt><dd><ul class="simple">
<li><p><a class="reference internal" href="../../autoapi/datafusion/functions/index.html#datafusion.functions.rank" title="datafusion.functions.rank"><code class="xref py py-func docutils literal notranslate"><span class="pre">datafusion.functions.rank()</span></code></a></p></li>
<li><p><a class="reference internal" href="../../autoapi/datafusion/functions/index.html#datafusion.functions.dense_rank" title="datafusion.functions.dense_rank"><code class="xref py py-func docutils literal notranslate"><span class="pre">datafusion.functions.dense_rank()</span></code></a></p></li>
<li><p><a class="reference internal" href="../../autoapi/datafusion/functions/index.html#datafusion.functions.ntile" title="datafusion.functions.ntile"><code class="xref py py-func docutils literal notranslate"><span class="pre">datafusion.functions.ntile()</span></code></a></p></li>
<li><p><a class="reference internal" href="../../autoapi/datafusion/functions/index.html#datafusion.functions.row_number" title="datafusion.functions.row_number"><code class="xref py py-func docutils literal notranslate"><span class="pre">datafusion.functions.row_number()</span></code></a></p></li>
</ul>
</dd>
</dl>
</li>
<li><dl class="simple">
<dt>Analytical Functions</dt><dd><ul class="simple">
<li><p><a class="reference internal" href="../../autoapi/datafusion/functions/index.html#datafusion.functions.cume_dist" title="datafusion.functions.cume_dist"><code class="xref py py-func docutils literal notranslate"><span class="pre">datafusion.functions.cume_dist()</span></code></a></p></li>
<li><p><a class="reference internal" href="../../autoapi/datafusion/functions/index.html#datafusion.functions.percent_rank" title="datafusion.functions.percent_rank"><code class="xref py py-func docutils literal notranslate"><span class="pre">datafusion.functions.percent_rank()</span></code></a></p></li>
<li><p><a class="reference internal" href="../../autoapi/datafusion/functions/index.html#datafusion.functions.lag" title="datafusion.functions.lag"><code class="xref py py-func docutils literal notranslate"><span class="pre">datafusion.functions.lag()</span></code></a></p></li>
<li><p><a class="reference internal" href="../../autoapi/datafusion/functions/index.html#datafusion.functions.lead" title="datafusion.functions.lead"><code class="xref py py-func docutils literal notranslate"><span class="pre">datafusion.functions.lead()</span></code></a></p></li>
</ul>
</dd>
</dl>
</li>
<li><dl class="simple">
<dt>Aggregate Functions</dt><dd><ul class="simple">
<li><p>All <a class="reference internal" href="aggregations.html#aggregation"><span class="std std-ref">Aggregation Functions</span></a> can be used as window functions.</p></li>
</ul>
</dd>
</dl>
</li>
</ol>
</section>
</section>
</div>
<!-- Previous / next buttons -->
<div class='prev-next-area'>
<a class='left-prev' id="prev-link" href="aggregations.html" title="previous page">
<i class="fas fa-angle-left"></i>
<div class="prev-next-info">
<p class="prev-next-subtitle">previous</p>
<p class="prev-next-title">Aggregation</p>
</div>
</a>
<a class='right-next' id="next-link" href="udf-and-udfa.html" title="next page">
<div class="prev-next-info">
<p class="prev-next-subtitle">next</p>
<p class="prev-next-title">User-Defined Functions</p>
</div>
<i class="fas fa-angle-right"></i>
</a>
</div>
</main>
</div>
</div>
<script src="../../_static/scripts/pydata-sphinx-theme.js?digest=1999514e3f237ded88cf"></script>
<!-- Based on pydata_sphinx_theme/footer.html -->
<footer class="footer mt-5 mt-md-0">
<div class="container">
<div class="footer-item">
<p class="copyright">
&copy; Copyright 2019-2024, Apache Software Foundation.<br>
</p>
</div>
<div class="footer-item">
<p class="sphinx-version">
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 8.1.3.<br>
</p>
</div>
<div class="footer-item">
<p>Apache Arrow DataFusion, Arrow DataFusion, Apache, the Apache feather logo, and the Apache Arrow DataFusion project logo</p>
<p>are either registered trademarks or trademarks of The Apache Software Foundation in the United States and other countries.</p>
</div>
</div>
</footer>
</body>
</html>