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

如何在Polars中按分组获取字符串列的最大与最小值?

Polars字符串列分组聚合min/max返回null的解决方法

在Polars 0.15.2版本中,对字符串列使用min()/max()聚合会返回null,这是因为该版本的聚合函数默认未支持字符串类型的比较操作。以下是两种可行的解决方式:

方法一:通过排序取首尾元素模拟最值

利用字符串字典序的特性,对分组内的字符串列排序后,取第一个元素作为最小值,取最后一个元素作为最大值:

import polars as pl

d_str = pl.DataFrame({
    "g": ["a", "a", "b"],
    "v": ["x", "y", "x"],
})

result = (
    d_str
    .group_by("g")
    .agg(
        pl.col("v").sort().first().alias("v_min"),
        pl.col("v").sort(reverse=True).first().alias("v_max")
    )
)

print(result)

执行后输出:

┌─────┬───────┬───────┐
│ g   ┆ v_min ┆ v_max │
│ --- ┆ ---   ┆ ---   │
│ str ┆ str   ┆ str   │
╞═════╪═══════╪═══════╡
│ a   ┆ x     ┆ y     │
│ b   ┆ x     ┆ x     │
└─────┴───────┴───────┘

方法二:升级Polars版本

Polars在0.16及以上版本中已经修复了这个问题,支持直接对字符串列使用min()和max()聚合。执行以下命令升级:

pip install --upgrade polars

升级后原代码即可正常返回正确结果:

(
    d_str
    .group_by("g")
    .agg(
        pl.col("v").min().alias("v_min"), 
        pl.col("v").max().alias("v_max")
    )
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 16:00:51