如何在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
相关产品推荐
相关产品推荐

