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

Polars分组聚合拼接唯一值时报错,求正确实现方法

Polars分组聚合拼接唯一值报错解决方案

错误原因

Polars的group_by().agg()与Pandas的agg逻辑不同:Polars要求传入Polars表达式(而非直接处理列数据的Python函数/lambda),你之前的代码直接将自定义函数调用作为lambda传入,Polars无法识别这种函数类型的参数,因此抛出TypeError。

正确实现方式

方法一:用Polars内置函数实现(推荐,性能更优)

利用Polars的向量化内置函数,先取每组唯一值,再拼接成字符串:

import polars as pl

# 构造DataFrame
dd = pl.DataFrame({
    'col1': [1,1,2,3,4],
    'col2': ['a','a','a','b','b'],
    'col3': ['qwe','rty','asd','fgh','zxc']
})

# 分组聚合:取唯一值后拼接
result = dd.group_by('col1').agg(
    pl.col('*').unique().str.concat('|')
)
print(result)

输出结果:

shape: (5, 3)
┌──────┬──────┬─────────┐
│ col1 ┆ col2 ┆ col3    │
│ ---  ┆ ---  ┆ ---     │
│ i64  ┆ str  ┆ str     │
╞══════╪══════╪═════════╡
│ 1    ┆ a    ┆ qwe|rty │
│ 2    ┆ a    ┆ asd     │
│ 3    ┆ b    ┆ fgh     │
│ 4    ┆ b    ┆ zxc     │
└──────┴──────┴─────────┘

方法二:使用自定义函数(适合复杂逻辑场景)

如果必须用自定义函数处理,需通过map_groups接收分组后的DataFrame进行操作:

import polars as pl

def process_group(group_df):
    # 对分组内的每列,取唯一值后拼接
    return group_df.select(
        pl.col('col2', 'col3').apply(lambda x: '|'.join(set(x)), return_dtype=pl.Utf8)
    )

dd = pl.DataFrame({
    'col1': [1,1,2,3,4],
    'col2': ['a','a','a','b','b'],
    'col3': ['qwe','rty','asd','fgh','zxc']
})

result = dd.group_by('col1').map_groups(process_group)
print(result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 08:52:35