import polars as pl
df = pl.DataFrame(
{
"X": [4, 2, 3, 4],
"Y": ["p", "p", "p", "p"],
"Z": ["b", "b", "b", "b"],
}
)
Мы знаем, что эквивалент pandas df.drop_duplicates() находится df.unique() в python-polar
Но каждый раз, когда я выполняю свой запрос, я получаю другой результат?
print(df.unique())
X Y Z
i64 str str
3 "p" "b"
2 "p" "b"
4 "p" "b"
X Y Z
i64 str str
4 "p" "b"
2 "p" "b"
3 "p" "b"
X Y Z
i64 str str
2 "p" "b"
3 "p" "b"
4 "p" "b"
Это намеренно и какова причина этого?






Если вам нужно последовательное поведение, выполните следующие действия:
df.unique(maintain_order=True)
support_order
Сохраняйте тот же порядок, что и исходный DataFrame. Это более затратное вычисление. Установка значения True блокирует возможность запуска на потоковом движке.
Поддержание порядка не подходит для потоковой передачи, поскольку требует объединения всех фрагментов в памяти для сравнения порядка строк.
Благодаря этому изменению настроек по умолчанию разработчики хотят гарантировать, что Polars готова работать с наборами данных всех размеров, позволяя пользователям при желании выбирать другое поведение.
Связанным с этим моментом является выбор того, какая строка в каждой дублируемой группе сохраняется с помощью unique. В Pandas по умолчанию это первая строка каждой дублируемой группы. В Polars значение по умолчанию — any, так как это снова позволяет оптимизировать оптимизацию.
Другие функции, которые имеют такое поведение, включают:
1.group_by (maintain_order: bool = False)
2.partition_by (maintain_order: bool = True)
3.pivot (maintain_order: bool = True)
4.upsample (maintain_order: bool = False)
Подробная статья @LiamBrannigan здесь: https://www.rhosignal.com/posts/polars-ordering/