Path: blob/main/py-polars/tests/unit/functions/test_cum_count.py
6939 views
from __future__ import annotations12import pytest34import polars as pl5from polars.testing import assert_frame_equal, assert_series_equal678@pytest.mark.parametrize(("reverse", "output"), [(False, [1, 2, 2]), (True, [2, 1, 0])])9def test_cum_count_single_arg(reverse: bool, output: list[int]) -> None:10df = pl.DataFrame({"a": [5, 5, None]})11result = df.select(pl.cum_count("a", reverse=reverse))12expected = pl.Series("a", output, dtype=pl.UInt32).to_frame()13assert_frame_equal(result, expected)14assert result.to_series().flags[("SORTED_ASC", "SORTED_DESC")[reverse]]151617def test_cum_count_multi_arg() -> None:18df = pl.DataFrame(19{20"a": [5, 5, 5],21"b": [None, 5, 5],22"c": [5, None, 5],23"d": [5, 5, None],24"e": [None, None, None],25}26)27result = df.select(pl.cum_count("a", "b", "c", "d", "e"))28expected = pl.DataFrame(29[30pl.Series("a", [1, 2, 3], dtype=pl.UInt32),31pl.Series("b", [0, 1, 2], dtype=pl.UInt32),32pl.Series("c", [1, 1, 2], dtype=pl.UInt32),33pl.Series("d", [1, 2, 2], dtype=pl.UInt32),34pl.Series("e", [0, 0, 0], dtype=pl.UInt32),35]36)37assert_frame_equal(result, expected)383940def test_cum_count_multi_arg_reverse() -> None:41df = pl.DataFrame(42{43"a": [5, 5, 5],44"b": [None, 5, 5],45"c": [5, None, 5],46"d": [5, 5, None],47"e": [None, None, None],48}49)50result = df.select(pl.cum_count("a", "b", "c", "d", "e", reverse=True))51expected = pl.DataFrame(52[53pl.Series("a", [3, 2, 1], dtype=pl.UInt32),54pl.Series("b", [2, 2, 1], dtype=pl.UInt32),55pl.Series("c", [2, 1, 1], dtype=pl.UInt32),56pl.Series("d", [2, 1, 0], dtype=pl.UInt32),57pl.Series("e", [0, 0, 0], dtype=pl.UInt32),58]59)60assert_frame_equal(result, expected)616263def test_cum_count() -> None:64df = pl.DataFrame(65[["a"], ["a"], ["a"], ["b"], ["b"], ["a"]], schema=["A"], orient="row"66)6768out = df.group_by("A", maintain_order=True).agg(69pl.col("A").cum_count().alias("foo")70)7172assert out["foo"][0].to_list() == [1, 2, 3, 4]73assert out["foo"][1].to_list() == [1, 2]747576def test_series_cum_count() -> None:77s = pl.Series(["x", "k", None, "d"])78result = s.cum_count()79expected = pl.Series([1, 2, 2, 3], dtype=pl.UInt32)80assert_series_equal(result, expected)818283