| <!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 — 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">"pokemon.csv"</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">'"Name"'</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">'"Speed"'</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">'"Speed"'</span><span class="p">))</span><span class="o">.</span><span class="n">alias</span><span class="p">(</span><span class="s2">"Previous Speed"</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">'"Name"'</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">'"Attack"'</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">'"Type 1"'</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">'"Type 1"'</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">'"Attack"'</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">"rank"</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">'"Type 1"'</span><span class="p">),</span> <span class="n">col</span><span class="p">(</span><span class="s1">'"Attack"'</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">'"Name"'</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">'"Attack"'</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">'"Type 1"'</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">'"Type 1"'</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">'"Attack"'</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">"rank"</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">"rank"</span><span class="p">)</span> <span class="o"><</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">'"Type 1"'</span><span class="p">),</span> <span class="n">col</span><span class="p">(</span><span class="s2">"rank"</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">'"Name"'</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">'"Speed"'</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">'"Speed"'</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">"rows"</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">'"Speed"'</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">"Previous Speed"</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">'"Type 1"'</span><span class="p">)</span> <span class="o">==</span> <span class="n">lit</span><span class="p">(</span><span class="s2">"Bug"</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">'"Name"'</span><span class="p">,</span> |
| <span class="o">....</span><span class="p">:</span> <span class="s1">'"Type 2"'</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">'"Type 2"'</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">"rows"</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">'"Speed"'</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">"last_wo_null"</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">'"Type 2"'</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">"rows"</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">'"Speed"'</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">"last_with_null"</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">"Type</span> <span class="pre">1"</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">'"Name"'</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">'"Attack"'</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">'"Type 1"'</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">"avg"</span><span class="p">,</span> <span class="p">[</span><span class="n">col</span><span class="p">(</span><span class="s1">'"Attack"'</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">'"Type 1"'</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">"Average Attack"</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"> |
| © 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> |