df.drop_duplicates() 在极坐标中?

问题描述 投票:0回答:1
import polars as pl

df = pl.DataFrame(
    {
        "X": [4, 2, 3, 4],
        "Y": ["p", "p", "p", "p"],
        "Z": ["b", "b", "b", "b"],
    }
)

我们知道

df.drop_duplicates()
相当于 python-polars
 中的 

但是,每次执行查询时都会得到不同的结果?

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"

这是故意的吗?背后的原因是什么?

python python-3.x dataframe unique python-polars
1个回答
4
投票

是的,这是故意的行为。

如果您需要一致的行为,请执行以下操作:

df.unique(maintain_order=True)

polars.DataFrame.unique

维持订单

保持与原始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/

© www.soinside.com 2019 - 2024. All rights reserved.