Skip to main content

polars-list-math

polars-list-math helps you work with Polars DataFrames in which every field of a nested list of structs is represented by its own column. Each field column preserves the original list nesting, so corresponding values remain aligned by row and by position at every list level.

For example, a nested list of records with price and qty fields can be represented as two nested list columns in the same DataFrame:

flowchart LR
    records["orders: List[List[Struct]]<br/>[[{price: 10, qty: 2}, {price: 20, qty: 1}],<br/>[{price: 30, qty: 4}]]"]
    subgraph columns["Separate field columns — same DataFrame row"]
        price["orders.price: List[List[Int64]]<br/>[[10, 20], [30]]"]
        qty["orders.qty: List[List[Int64]]<br/>[[2, 1], [4]]"]
    end
    records -->|price| price
    records -->|qty| qty

Each level of lists keeps its grouping, and each field becomes independently accessible as a column. The same representation extends to deeper nesting. The dotted column names above are illustrative.

The library provides Python/Rust helpers for calculations on these list columns, comparing lists, and combining corresponding fields with list_zip and ZipBuilder. It also includes JSON and URL expressions, null-field discovery, and schema cleaning for preparing and transforming DataFrames and LazyFrames.

Release notes and upgrade guidance are recorded in CHANGELOG.md.

Import the package once to register extra methods on Expr.list and Expr.str:

import polars as pl
import polars_list_math  # noqa: F401

For type-checked code, import the top-level expression helpers described below.

Install

pip install polars-list-math
# or
uv add polars-list-math

Requires Python 3.12+ and polars>=2.0.0,<3.

Version 1.0 targets Polars 2 and includes a compatible Rust plugin. Upgrade polars-list-math and polars together; rebuild the plugin when using a source checkout. Projects using Polars 1 should keep polars-list-math==0.9.0 and polars<2. See the Polars 2 migration guide for changes in Polars itself.

Functions

Top-level functions provide the statically typed API for Pyright, Pylance, and other type checkers. Where available, the optional Method column lists an equivalent runtime method registered when the package is imported.

Function Method (optional) Result Docs
list_zip(...) Expr.list.zip(...) Zip lists into list[struct] List zip
nested_join(...) — Attach flat values using nested and ancestor keys Nested join
nested_lookup(...) — Look up a shared or row-local dictionary, preserving List structure Nested join
list_combinations(...) Expr.list.combinations(...) Pair items in one list Combinations
list_combinations_to(...) Expr.list.combinations_to(...) Pair items from two lists Combinations
expected_value_of_game(...) — Expected value of a sequential game Expected value of a game
list_similarity(...) Expr.list.similarity(...) Weighted similarity between two lists Similarity
list_mean_similarity(...) Expr.list.mean_similarity(...) Mean similarity inside nested lists Similarity
list_mean_similarity_to(...) Expr.list.mean_similarity_to(...) Mean similarity to reference nested lists Similarity
list_kendall_tau(...) Expr.list.kendall_tau(...) Kendall tau of the common IDs' order Kendall tau
list_mean_kendall_tau(...) Expr.list.mean_kendall_tau(...) Mean tau against peer lists Kendall tau
list_mean_kendall_tau_to(...) Expr.list.mean_kendall_tau_to(...) Mean tau against reference lists Kendall tau
list_containment(...) Expr.list.containment(...) Fraction of unique IDs found in another list Containment
list_mean_containment(...) Expr.list.mean_containment(...) Mean directed containment against peer lists Containment
list_mean_containment_to(...) Expr.list.mean_containment_to(...) Mean directed containment against reference lists Containment
json_object_items(expr, strict=False) Expr.str.json_object_items(...) Convert a JSON object to list[struct[key, value]] JSON object items
json_array_values(expr, strict=False) Expr.str.json_array_values(...) Convert a JSON array to list[str] JSON array values
url_query_encode(expr, doseq=False) — Encode a Struct or key/value list as a URL query string URL query encoding
url_build(...) — Assemble a URL from optional component expressions URL building
dfs_to_lazy_df(...) — Expose DataFrame batches as a pushdown-aware LazyFrame source Examples
find_null_schema(lf) — Discover absent columns and nested fields Null schemas
clean_schema(schema, subschema) — Remove columns and fields described by a subschema Null schemas
apply_schema(lf, schema) — Select and cast a LazyFrame to the cleaned schema Null schemas

The Python helper py_list_similarity(...) computes weighted similarity for plain Python sequences. py_list_containment(...) computes directed set containment for Python sequences, ignoring ranks and duplicates. py_list_kendall_tau(...) compares the order of common IDs in Python sequences. All Kendall tau helpers accept normalize=True to map [-1, 1] to [0, 1].

The Expr.list and Expr.str methods are registered dynamically and remain available as convenient runtime syntax. Python type checkers cannot safely augment Polars' own namespace classes from another installed package, so use the equivalent top-level functions in code checked by Pylance or Pyright.

If a future Polars release ships native methods with the same names, this package leaves the native implementation untouched.

Quick Examples

from polars_list_math import (
    list_combinations,
    list_mean_similarity,
    list_similarity,
    list_zip,
)

df = pl.DataFrame(
    {
        "a": [[1, 2, 3]],
        "b": [[2, 1, 3]],
        "groups": [[[1, 2, 3], [1, 2, 3], [4, 5, 6]]],
    }
)

df.with_columns(
    list_similarity("a", "b").alias("similarity"),
    list_mean_similarity("groups").alias("mean_similarity"),
    list_combinations("a").alias("pairs"),
    list_zip("a", "b", fields=["a", "b"]).alias("zipped"),
)

Convert JSON strings to nested Polars values. String values stay strings, JSON null stays null, and other values become compact JSON strings. Invalid JSON returns null by default; pass strict=True to raise instead.

from polars_list_math import json_array_values, json_object_items

json_df = pl.DataFrame(
    {
        "object": ['{"name":"Ada","active":true,"note":null}'],
        "array": ['["python",42,true,null]'],
    }
)

json_df.select(
    json_object_items("object").alias("items"),
    json_array_values("array").alias("values"),
)

Encode query parameters and build URLs from expressions:

from polars_list_math import url_build, url_query_encode

pages = pl.DataFrame(
    {
        "host": ["example.com"],
        "path": ["/search"],
        "term": ["rust polars"],
        "page": [2],
    }
)

query = url_query_encode(pl.struct(q=pl.col("term"), page=pl.col("page")))

pages.select(
    url_build(
        scheme=pl.lit("https"),
        netloc="host",
        path="path",
        query=query,
    ).alias("url")
)

More complete, runnable examples are available in the examples directory.

Nested zip builder

ZipBuilder combines nested list columns with zip options and ordered eval/filter operations at each level. build() returns a normal Polars expression:

from polars_list_math import ZipBuilder

expr = (
    ZipBuilder("a", "b")
    .level(pad=True)
    .filter(pl.element().struct.field("a").is_not_null())
    .build("nested_zip")
)

The constructor configures the outer zip; each level() adds one inner zip. See the builder guide for transformations, broadcasting, and deeper nesting.

Performance experiments

Reproducible performance experiments live in the performance directory. Each experiment has its own README with the tested scenario, run instructions, environment, and recorded results.

The current dataframe_construction experiment compares construction of 30-column Polars DataFrames from a regular dataclass, a slotted dataclass, and a named tuple, including nested structs and lists.

uv run pytest performance/dataframe_construction -v -s

Development

make install
make develop
make test

Build and check the package locally:

make check-dist

Release steps are in docs/publishing.md.

Metadata

Release files for polars-list-math 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for polars-list-math 1.0.0
File Size Uploaded Provenance
polars_list_math-1.0.0.tar.gz 63.2 kB With provenance Details

Built distributions (wheels)

Table of built distributions (wheels) for polars-list-math 1.0.0
File
polars_list_math-1.0.0-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
polars_list_math-1.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ x86-64 Details
polars_list_math-1.0.0-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details
polars_list_math-1.0.0-cp313-cp313-macosx_10_12_x86_64.whl CPython 3.13 CPython 3.13 macOS 10.12+ x86-64 Details
polars_list_math-1.0.0-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
polars_list_math-1.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64 Details
polars_list_math-1.0.0-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
polars_list_math-1.0.0-cp312-cp312-macosx_10_12_x86_64.whl CPython 3.12 CPython 3.12 macOS 10.12+ x86-64 Details

Total release size: 48.4 MB

Release files / polars_list_math-1.0.0.tar.gz

Download URL polars_list_math-1.0.0.tar.gz
Size 63.2 kB
Tags Source
SHA-256 checksum
How to use checksums
e3496f9cfc3600f51c8e312b84fd8b162498c54b558cf74c5e2d3d89bf364932
BLAKE2b-256 checksum
How to use checksums
0b54dc0b4ca29554e05c8d9d02487ad9d337c5daad31e9da9c2925615bcfb6ff
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

Release files / polars_list_math-1.0.0-cp313-cp313-win_amd64.whl

Download URL polars_list_math-1.0.0-cp313-cp313-win_amd64.whl
Size 6.0 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
e9d7f9cd65a283bbbfc8dd0efd7ccf0dc6e313ec2cf84b6ab5b3ef01ea50d028
BLAKE2b-256 checksum
How to use checksums
9ef16bf091c6a85343796a34dcae6a2dbb17e802bdda7ffb8ee798364a0374bc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

Release files / polars_list_math-1.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL polars_list_math-1.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 6.7 MB
Tags CPython 3.13 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
f996e67e5bd67e8c343c3ce335da52f62a002e1f9f056772d6c0e7f794d171ee
BLAKE2b-256 checksum
How to use checksums
7b9cb8eca336e371d51dd56da9b14ba3ee690e18aa3d249f76bb6c280df9eb0f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

Release files / polars_list_math-1.0.0-cp313-cp313-macosx_11_0_arm64.whl

Download URL polars_list_math-1.0.0-cp313-cp313-macosx_11_0_arm64.whl
Size 5.5 MB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
06ecd30378fe1d1b22ef428c1dc14c45e962f46ac84162689419a2c58c858ca9
BLAKE2b-256 checksum
How to use checksums
6e4099cfedccc4b9d3d15e62c82c5afb466b0f78e7ab9d59ca9399fb8fcda0b8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

Release files / polars_list_math-1.0.0-cp313-cp313-macosx_10_12_x86_64.whl

Download URL polars_list_math-1.0.0-cp313-cp313-macosx_10_12_x86_64.whl
Size 5.9 MB
Tags CPython 3.13 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
2a1e7409f55eec8d0d213123c4e7edebde9cfa654958e642ffb6ca0981cb0e4a
BLAKE2b-256 checksum
How to use checksums
577674c319c717ecfad6e08bf537f7c26f7ad7db9a758b08d927bf5946d616a7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

Release files / polars_list_math-1.0.0-cp312-cp312-win_amd64.whl

Download URL polars_list_math-1.0.0-cp312-cp312-win_amd64.whl
Size 6.0 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
b88975b93e2efbc94c10b5b848200b2316f9afc610b03eaa831069fe88d3fdb0
BLAKE2b-256 checksum
How to use checksums
788897ade7b0e7480a176b65966f2f8e890bef42b12d6ed7d5e3c89567a3486a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

Release files / polars_list_math-1.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL polars_list_math-1.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 6.7 MB
Tags CPython 3.12 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
5c1f469fc42793d1104b16b9b49df5af0dd3facda96c4fb3f6bf1e513c078bdf
BLAKE2b-256 checksum
How to use checksums
5f77e1d2e00b1572cf683fedffb10ad99791cb37b11e42907117217e9689480b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

Release files / polars_list_math-1.0.0-cp312-cp312-macosx_11_0_arm64.whl

Download URL polars_list_math-1.0.0-cp312-cp312-macosx_11_0_arm64.whl
Size 5.5 MB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
1b03769866d1a0bdb3cd5e1aa18ff95420ec7168ff25d34bfedc3feaa4f17e56
BLAKE2b-256 checksum
How to use checksums
9a38051a81d71f8580a107382ed3f31a14b0f25480c559e29045e8d9e6c477f7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

Release files / polars_list_math-1.0.0-cp312-cp312-macosx_10_12_x86_64.whl

Download URL polars_list_math-1.0.0-cp312-cp312-macosx_10_12_x86_64.whl
Size 5.9 MB
Tags CPython 3.12 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
305a1f3a9c58bf6aea5c41ab8a1211b624a1ea1d8d805218492621f4a6ffe7af
BLAKE2b-256 checksum
How to use checksums
932aaff4d6bb054e2dc2bc673ce7a42a9c6d6451340f2fc5e4a0d66dc025c8ac
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

Security for polars-list-math 1.0.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 9 files in this release have been uploaded with provenance metadata.

Select from 9 files

Attestation for polars_list_math-1.0.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page