polars.LazyFrame.unique
-
Удаляет дублирующиеся строки из этого 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 │ └───────┴───────┘
LazyFrame.unique(
subset: IntoExpr | Collection[IntoExpr] | None = None,
*,
keep: UniqueKeepStrategy = 'any',
maintain_order: bool = False,
) → LazyFrame
© 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