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

Python Polars分组聚合拼接列值报错,求非lambda/map_groups优化方案

解决Polars聚合拼接列值的报错问题

错误原因

你用Python原生的';'.join()方法处理Polars表达式对象是行不通的——str.join()只能接收可迭代的Python对象(比如列表),但pl.col(...)返回的是Polars的表达式节点(抽象语法树的一部分),并非实际可迭代数据,因此抛出can only join an iterable的类型错误。

正确解法

改用Polars内置的表达式方法实现聚合拼接,完全利用矢量化计算,性能远优于map_groups或lambda函数。修改你的聚合函数如下:

def agg_ll_field(col_name) -> pl.Expr:
    # 对组内列值去空、去重、排序后,用分号拼接成字符串
    return pl.col(col_name).drop_nulls().unique().sort().str.concat(delimiter=';')

dfa = df.lazy()\
    .group_by('SharedSourceSystem', 'FOPortfolioName')\
    .agg(
        agg_ll_field('BookingUnits').alias('BOOKG_UNIT')
    )\
    .collect()

如果你的Polars版本较旧(<0.18.0),可以用list.to_string()替代str.concat():

def agg_ll_field(col_name) -> pl.Expr:
    return pl.col(col_name).drop_nulls().unique().sort().list.to_string(delimiter=';')

为什么这样做

这种写法完全基于Polars的矢量化执行引擎,避免了Python层面的循环或串行处理,性能和map_groups不在一个量级,同时满足你不用lambda函数的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 03:05:09