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

Polars分组内唯一众数查找:无需Join的实现方案

无需Join实现Polars分组内唯一众数查找

问题描述

我已实现基于Polars的分组内唯一众数查找功能,当前方案通过Join操作将众数结果关联回原DataFrame。请问是否存在无需使用Join的实现方式?

无需Join的实现方案

使用Polars的**窗口函数(over())**可以直接在原数据集上计算分组内的统计值,无需额外的Join操作。核心思路是通过pl.col("value").mode()配合over("group")获取每个分组的众数,再判断众数是否唯一,最后生成结果列。

完整代码

import polars as pl

# 示例数据
data = pl.DataFrame({
    "group": ["A", "A", "B", "B", "C", "C", "C", "C"],
    "value": [1, 1, 2, 2, 3, 3, 4, 4]
})

# 窗口函数实现:直接在原DataFrame添加分组众数列
result = data.with_columns(
    pl.when(pl.col("value").mode().over("group").len() == 1)
      .then(pl.col("value").mode().over("group").first())
      .otherwise(-999)
      .alias("group_mode")
)

print(result)

运行结果

shape: (8, 3)
┌───────┬───────┬────────────┐
│ group ┆ value ┆ group_mode │
│ ---   ┆ ---   ┆ ---        │
│ str   ┆ i64   ┆ i64        │
╞═══════╪═══════╪════════════╡
│ A     ┆ 1     ┆ 1          │
│ A     ┆ 1     ┆ 1          │
│ B     ┆ 2     ┆ 2          │
│ B     ┆ 2     ┆ 2          │
│ C     ┆ 3     ┆ -999       │
│ C     ┆ 3     ┆ -999       │
│ C     ┆ 4     ┆ -999       │
│ C     ┆ 4     ┆ -999       │
└───────┴───────┴────────────┘

方案说明

这种方式通过over("group")将聚合逻辑转为窗口计算,直接在原DataFrame上新增结果列,避免了Join操作:

  • 代码更简洁,无需拆分再合并数据集
  • 性能更优,减少了数据 shuffle 步骤

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 11:45:18