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

Dask DataFrame按A列去重并保留B列最大值行的高效实现方法

Dask原生实现分组去重取最大值行的方案

你要的Dask原生高效实现可以通过groupby+apply+nlargest组合完成,全程为懒执行逻辑,无需提前拉取数据到内存,也不会触发性能较差的全表排序操作,实现代码如下:

# 逻辑等价于Pandas中按B降序后按A去重的效果
result = df.groupby('A', group_keys=False).apply(
    lambda x: x.nlargest(1, 'B'),
    meta=df._meta
)

该方案的核心特性如下:

  • 仅在每个分组内部做Top1筛选,不需要对全表执行sort_values操作,规避了Dask全表排序的高额开销
  • 全程保持Dask的外存计算特性,不需要提前调用compute获取索引,完全适配先做外存处理、再转Pandas的工作流
  • 输出结果和原Pandas实现逻辑完全一致,都是每个A分组下B列取值最大的唯一行

如果你更偏好基于idxmax的实现逻辑,新版Dask已经支持直接用Dask生成的索引序列做定位,无需提前compute拉取索引到内存:

max_idx = df.groupby("A")["B"].idxmax()
result = df.loc[max_idx]

该方案的性能和上述nlargest方案基本持平,你可以根据自己的Dask版本选择兼容性更好的写法。

内容的提问来源于stack exchange,提问作者Michael E.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 08:27:03