Spec-Zone.ru › Polars

polars.LazyFrame.unique

LazyFrame.unique(
    subset: IntoExpr | Collection[IntoExpr] | None = None,
    *,
    keep: UniqueKeepStrategy = 'any',
    maintain_order: bool = False,
) → LazyFrame

Удаляет дублирующиеся строки из этого LazyFrame.

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

Имя (имена) столбца, селектор (селекторы) или выражение (выражения), учитываемые при определении дублирующихся строк. Если задано None (по умолчанию), учитываются все столбцы.

keep{‘first’, ‘last’, ‘any’, ‘none’}

Какую из дублирующихся строк оставить.

  • ‘any’: Не гарантирует, какая именно строка будет оставлена.

    Это позволяет применять больше оптимизаций.

  • ‘none’: Не оставлять дублирующиеся строки.
  • ‘first’: Оставить первую уникальную строку.
  • ‘last’: Оставить последнюю уникальную строку.
maintain_order

Сохранять исходный порядок строк DataFrame. Это требует больше ресурсов для вычисления. Если задать True, запуск на потоковом движке будет невозможен.

Возвращает:
LazyFrame

LazyFrame с уникальными строками.

Примечания

Если вы знакомы с Pandas, это похоже на pandas.DataFrame.drop_duplicates.

Примеры

>>> lf = pl.LazyFrame(
...     {
...         "foo": [1, 2, 3, 1, 1],
...         "bar": ["a", "a", "a", "x", "x"],
...         "ham": ["b", "b", "b", "y", "y"],
...     }
... )

По умолчанию при определении уникальных строк учитываются все столбцы:

>>> lf.unique(maintain_order=True).collect()
shape: (4, 3)
┌─────┬─────┬─────┐
│ foo ┆ bar ┆ ham │
│ --- ┆ --- ┆ --- │
│ i64 ┆ str ┆ str │
╞═════╪═════╪═════╡
│ 1   ┆ a   ┆ b   │
│ 2   ┆ a   ┆ b   │
│ 3   ┆ a   ┆ b   │
│ 1   ┆ x   ┆ y   │
└─────┴─────┴─────┘

Можно учитывать только часть столбцов, определяя, какую строку оставить при обнаружении дубликатов:

>>> lf.unique(subset="foo", keep="first", maintain_order=True).collect()
shape: (3, 3)
┌─────┬─────┬─────┐
│ foo ┆ bar ┆ ham │
│ --- ┆ --- ┆ --- │
│ i64 ┆ str ┆ str │
╞═════╪═════╪═════╡
│ 1   ┆ a   ┆ b   │
│ 2   ┆ a   ┆ b   │
│ 3   ┆ a   ┆ b   │
└─────┴─────┴─────┘
>>> lf.unique(subset="foo", keep="last", maintain_order=True).collect()
shape: (3, 3)
┌─────┬─────┬─────┐
│ foo ┆ bar ┆ ham │
│ --- ┆ --- ┆ --- │
│ i64 ┆ str ┆ str │
╞═════╪═════╪═════╡
│ 2   ┆ a   ┆ b   │
│ 3   ┆ a   ┆ b   │
│ 1   ┆ x   ┆ y   │
└─────┴─────┴─────┘
>>> lf.unique(subset="foo", keep="none", maintain_order=True).collect()
shape: (2, 3)
┌─────┬─────┬─────┐
│ foo ┆ bar ┆ ham │
│ --- ┆ --- ┆ --- │
│ i64 ┆ str ┆ str │
╞═════╪═════╪═════╡
│ 2   ┆ a   ┆ b   │
│ 3   ┆ a   ┆ b   │
└─────┴─────┴─────┘

Для задания параметра «subset» можно использовать селекторы:

>>> import polars.selectors as cs
>>> lf.unique(subset=cs.string(), maintain_order=True).collect()
shape: (2, 3)
┌─────┬─────┬─────┐
│ foo ┆ bar ┆ ham │
│ --- ┆ --- ┆ --- │
│ i64 ┆ str ┆ str │
╞═════╪═════╪═════╡
│ 1   ┆ a   ┆ b   │
│ 1   ┆ x   ┆ y   │
└─────┴─────┴─────┘

В параметре «subset» также можно использовать произвольное выражение; в этом примере для определения уникальности используется часть метки перед «:»:

>>> lf = pl.LazyFrame(
...     {
...         "label": ["xx:1", "xx:2", "yy:3", "yy:4"],
...         "value": [100, 200, 300, 400],
...     }
... )
>>> lf.unique(
...     subset=pl.col("label").str.extract(r"^(\w+):"),
...     maintain_order=True,
...     keep="first",
... ).collect()
shape: (2, 2)
┌───────┬───────┐
│ label ┆ value │
│ ---   ┆ ---   │
│ str   ┆ i64   │
╞═══════╪═══════╡
│ xx:1  ┆ 100   │
│ yy:3  ┆ 300   │
└───────┴───────┘

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

Spec-Zone.ru

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