Код: Выделить всё
import polars as pl
df = pl.DataFrame({
"name": ["Alice", "Bob", "Alice", "David", "Eve", "Bob", "Frank"],
"city": ["NY", "LA", "NY", "SF", "LA", "LA", "NY"],
"age": [25, 30, 25, 35, 28, 30, 40]
})
# Trying this:
df.filter((df.is_duplicated()) & (pl.col("city") == "NY")) # error
SchemaError: невозможно распаковать серию объектов типа в bool
Это намекает на то, что df.is_duulated() возвращает серию объектов типа, но на самом деле это логическое значение Серия.
Удивительно, но переупорядочение предикатов путем размещения выражения первым заставляет его работать (но почему?):
Код: Выделить всё
df.filter((pl.col("city") == "NY") & (df.is_duplicated())) # works!Код: Выделить всё
shape: (2, 3)
┌───────┬──────┬─────┐
│ name ┆ city ┆ age │
│ --- ┆ --- ┆ --- │
│ str ┆ str ┆ i64 │
╞═══════╪══════╪═════╡
│ Alice ┆ NY ┆ 25 │
│ Alice ┆ NY ┆ 25 │
└───────┴──────┴─────┘
Код: Выделить всё
df.filter((pl.struct(df.columns).is_duplicated()) & (pl.col("city") == "NY")) # worksОднако я намеренно не использую pl.struct, поскольку мой реальный фрейм данных имеет 40 столбцов, и я хочу проверить наличие повторяющихся строк на основе всех столбцов, кроме трех, поэтому я сделал следующее:
Код: Выделить всё
df.filter(df.drop("col1", "col2", "col3").is_duplicated())Код: Выделить всё
df.filter(
(df.drop("col1", "col2", "col3").is_duplicated()) & (pl.col("col5") == "something")
) # breaks!
df.filter(
(pl.col("col5") == "something") & (df.drop("col1", "col2", "col3").is_duplicated())
) # works!
Это задуманное поведение в Polars или ошибка?
Подробнее здесь: https://stackoverflow.com/questions/795 ... -an-additi
Мобильная версия