Spec-Zone.ru › Polars

polars.Expr.floordiv

Expr.floordiv(
    other: Any,
) → Expr

Метод, эквивалентный оператору целочисленного деления expr // other.

движок:В памятиПотоковая обработкаРаспределённая обработка
Параметры:
other

Числовой литерал или значение выражения.

См. также

truediv

Примеры

>>> df = pl.DataFrame({"x": [1, 2, 3, 4, 5]})
>>> df.with_columns(
...     pl.col("x").truediv(2).alias("x/2"),
...     pl.col("x").floordiv(2).alias("x//2"),
... )
shape: (5, 3)
┌─────┬─────┬──────┐
│ x   ┆ x/2 ┆ x//2 │
│ --- ┆ --- ┆ ---  │
│ i64 ┆ f64 ┆ i64  │
╞═════╪═════╪══════╡
│ 1   ┆ 0.5 ┆ 0    │
│ 2   ┆ 1.0 ┆ 1    │
│ 3   ┆ 1.5 ┆ 1    │
│ 4   ┆ 2.0 ┆ 2    │
│ 5   ┆ 2.5 ┆ 2    │
└─────┴─────┴──────┘

Обратите внимание, что floordiv в Polars немного отличается от целочисленного деления с округлением вниз в Python. Например, рассмотрим деление 6.0 на 0.1 с округлением вниз. В Python результат будет таким:

>>> 6.0 // 0.1
59.0

поскольку 0.1 внутри программы не представлено именно этим значением, а имеет немного большее значение. Поэтому результат деления немного меньше 60, и операция округления вниз возвращает 59.0.

В Polars сначала выполняется деление с плавающей точкой, в результате которого получается значение с плавающей точкой 60.0, а затем выполняется операция округления вниз с помощью floor:

>>> df = pl.DataFrame({"x": [6.0, 6.03]})
>>> df.with_columns(
...     pl.col("x").truediv(0.1).alias("x/0.1"),
... ).with_columns(
...     pl.col("x/0.1").floor().alias("x/0.1 floor"),
... )
shape: (2, 3)
┌──────┬───────┬─────────────┐
│ x    ┆ x/0.1 ┆ x/0.1 floor │
│ ---  ┆ ---   ┆ ---         │
│ f64  ┆ f64   ┆ f64         │
╞══════╪═══════╪═════════════╡
│ 6.0  ┆ 60.0  ┆ 60.0        │
│ 6.03 ┆ 60.3  ┆ 60.0        │
└──────┴───────┴─────────────┘

что даёт более интуитивный результат 60.0. Строка с x = 6.03 включена, чтобы продемонстрировать эффект операции округления вниз.

floordiv объединяет эти два шага, чтобы получить тот же результат с помощью одного выражения:

>>> df.with_columns(
...     pl.col("x").floordiv(0.1).alias("x//0.1"),
... )
shape: (2, 2)
┌──────┬────────┐
│ x    ┆ x//0.1 │
│ ---  ┆ ---    │
│ f64  ┆ f64    │
╞══════╪════════╡
│ 6.0  ┆ 60.0   │
│ 6.03 ┆ 60.0   │
└──────┴────────┘

© 2020 Ritchie Vink
© 2022 Polars contributors
Licensed under the MIT License.
https://docs.pola.rs/api/python/stable/reference/expressions/api/polars.Expr.floordiv.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API