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

Polars分组后按指定列排序取首行并保留所有列

在Polars中按分组内指定列排序并保留整行数据

要实现按foo分组、每组内按bar排序后保留对应整行(包含baz列)的需求,且避免全局排序的额外开销,你可以直接在聚合阶段让所有列跟随bar的排序逻辑,从而保证列之间的关联关系。

最优高效解法

使用group_by结合agg,通过sort_by让每组内的所有列按bar排序,再取第一行即可:

df_solution = df.group_by("foo").agg(
    pl.all().sort_by("bar").first()
).sort("foo")

# 验证结果符合预期
assert df_desired.equals(df_solution)

逻辑说明

  • pl.all()选中DataFrame的所有列;
  • sort_by("bar")让每组内的所有列按照bar列的升序(示例中取的是每组最小bar对应的行)重新排序;
  • first()取排序后的第一行,这样baz列会自动匹配对应bar值的行,不会出现关联错位;
  • 最后sort("foo")保证结果按foo列顺序排列,和目标输出一致。

对比其他方法的优势

  • 相比先全局排序再分组:这种分组内排序的方式避免了对整个数据集做排序,当分组规模较小时,性能开销会显著降低;
  • 相比单独聚合bar列:通过sort_by绑定了所有列的排序逻辑,确保baz和bar的对应关系,不会出现列值不匹配的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 12:45:38