import polars as pl

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

We know the equivalent of 's df.drop_duplicates() is df.unique() in

但是,每次我执行我的查询,我得到一个不同的结果?

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"

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

推荐答案

Yes, this is an intentional behavior.

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

df.unique(maintain_order=True)

100

maintain_order

保持与原始DataFrame相同的顺序.这是更昂贵的计算.将此项设置为True会阻止在流引擎上运行的可能性.

维护顺序不是流友好的,因为它需要将内存中的所有块放在一起来比较行的顺序.

通过更改默认设置,开发人员希望确保Polars准备好处理所有大小的数据集,同时允许用户根据需要 Select 不同的行为.

一个相关点是 Select 将每个复制组中的哪一行保留为unique.在Pandas中,这默认 for each 重复组的第一行.在极点中,默认设置为any,因为这也允许进行更多优化.

具有此行为的其他函数包括:

1.group_by(维护顺序:bool=FALSE)

2.partition_by(维护顺序:布尔值=真)

3.pivot(维护顺序:布尔值=真)

4.upsample(维护顺序:bool=FALSE)

@LiamBrannigan在这里发表详细文章:https://www.rhosignal.com/posts/polars-ordering/

Python相关问答推荐

使用SciPy进行曲线匹配未能给出正确的匹配

时间序列分解

numba jitClass,记录类型为字符串

如何记录脚本输出

如何获得每个组的时间戳差异?

如果条件不满足,我如何获得掩码的第一个索引并获得None?

为什么NumPy的向量化计算在将向量存储为类属性时较慢?'

Python脚本使用蓝牙运行在Windows 11与raspberry pi4

CommandeError:模块numba没有属性generated_jit''''

Python—为什么我的代码返回一个TypeError

为什么Python内存中的列表大小与文档不匹配?

如何按row_id/row_number过滤数据帧

统计numpy. ndarray中的项目列表出现次数的最快方法

提取数组每行的非零元素

如何训练每一个pandaprame行的线性回归并生成斜率

Scipy差分进化:如何传递矩阵作为参数进行优化?

随机森林n_估计器的计算

Groupby并在组内比较单独行上的两个时间戳

有没有一种方法可以根据不同索引集的数组从2D数组的对称子矩阵高效地构造3D数组?

跨两个数据帧收集非索引列上的公共组