You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Polars去重后是否保证行顺序?排序去重结果不符问询

Sort by date, then pick the first row for each UID (earliest date)

sample_frame=sample_frame.sort(by=DATE_COL).unique(subset=UID_COL, keep='first')

### 问题
我原本预期执行上述操作后的结果DataFrame会按日期排序,但实际情况并非如此。

那么去重操作是否会打乱剩余行的顺序?Polars文档或其维护者是否对调用`unique`方法后的行顺序提供了明确保证?

---

### 回答
Polars的`unique`方法**不会保留此前的排序顺序**,它的默认行为是基于数据的存储或哈希分组逻辑返回结果,这就是你看到排序后结果又混乱的原因。

根据Polars官方文档的明确说明:当使用`keep='first'`时,`unique`仅保证返回每个唯一分组在原始DataFrame中**首次出现的行**,但该方法本身不会维护之前的排序状态。也就是说,你先执行的`sort`只是用来确定每个UID保留哪一行,但`unique`操作会重新组织行的顺序,不会沿用排序后的序列。

如果想要最终结果按日期排序,有两种可行方案:
1. 在`unique`后再次执行排序:
```python
sample_frame = sample_frame.sort(by=DATE_COL).unique(subset=UID_COL, keep='first').sort(by=DATE_COL)
  1. 使用group_by配合maintain_order=True参数,更高效地实现需求:
sample_frame = sample_frame.sort(by=DATE_COL).group_by(UID_COL, maintain_order=True).first()

这里的maintain_order=True会确保分组后的行顺序与排序后的原始顺序一致,最终结果自然按日期排序。


内容的提问来源于stack exchange,提问作者Della

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 03:02:33