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

Polars分组聚合时合并嵌套列表并去重为逗号分隔字符串

Polars嵌套列表分组聚合去重转字符串解决方案

问题场景

现有Polars DataFrame结构如下:

import polars as pl

df = pl.DataFrame({
    "id": [1, 2, 1], 
    "name": ['jenobi', 'blah', 'jenobi'], 
    "company": [
        [['some company 1', 'some company2'], ['some company2']], 
        [['company 1'], ['company 2', 'company 3']],
        [['some company 1'], ['some company2', 'some company 1', 'some company 2']]
    ]
})

需求

按id和name分组聚合,将company列的多层嵌套列表合并,去重后转换为逗号分隔的字符串(例如jenobi对应的结果应为"some company 1, some company2, some company 2")。

可行解决方案

针对嵌套列表的层级问题,分步处理扁平化、去重和字符串转换,可避免直接操作引发的格式错误或panic:

result = df.group_by(["id", "name"]).agg(
    pl.col("company")
    # 先扁平化每个二级嵌套子列表
    .list.eval(pl.element().flatten())
    # 将所有元素拉平为一维列表
    .flatten()
    # 对列表元素去重
    .unique()
    # 转换为逗号分隔的字符串
    .list.join(", ")
)

print(result)

执行结果

输出如下:

shape: (2, 3)
┌─────┬────────┬───────────────────────────────────────────┐
│ id  ┆ name   ┆ company                                 │
│ --- ┆ ---    ┆ ---                                     │
│ i64 ┆ str    ┆ str                                     │
╞═════╪════════╪═══════════════════════════════════════════╡
│ 1   ┆ jenobi ┆ some company 1, some company2, some company 2 │
│ 2   ┆ blah   ┆ company 1, company 2, company 3        │
└─────┴────────┴───────────────────────────────────────────┘

关键步骤说明

  • list.eval(pl.element().flatten()):处理内层二级嵌套,先将每个子列表扁平化,避免直接flatten导致的层级混乱;
  • .flatten():把处理后的多层列表拉平为一维,便于后续去重操作;
  • .unique():对一维列表的元素去重;
  • .list.join(", "):将去重后的列表转换为逗号分隔的目标字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 03:32:51