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

Polars分组后如何将多列合并为去重的单一列表?

Polars分组后合并多列去重值为单列表

现有如下Polars DataFrame:

import polars as pl

df = pl.DataFrame({
    "small": ["Apple Inc.", "Baidu Inc.", "Chevron Global", "Chevron Global", "Apple Inc."],
    "person": [10, 20, 30, 10, 10],
    "comp_big": ["Apple", "Baidu", "Chevron", "Chevron", "Apple"]
})

如果按person分组后直接对small和comp_big取唯一值,会得到两个独立列表。要将这两列的去重值合并成单个列表,最直接高效的方式是在聚合时先拼接两列数组,再去重:

result = (
    df
    .group_by("person")
    .agg(
        pl.concat([pl.col("small"), pl.col("comp_big")]).unique()
    )
)

print(result)

代码说明

  • pl.concat([pl.col("small"), pl.col("comp_big")]):将同一分组下small和comp_big的所有值拼接成一个一维数组
  • .unique():对拼接后的数组去重,得到合并后的唯一值列表

执行后输出结果:

shape: (3, 2)
┌────────┬───────────────────────────────────────────┐
│ person ┌───────────────────────────────────────────┐
│ ---    │ ---                                       │
│ i64    │ list[str]                                 │
╞════════╪═══════════════════════════════════════════╡
│ 10     │ ["Apple Inc.", "Chevron Global", "Apple", │
│        │ "Chevron"]                                │
├────────┼───────────────────────────────────────────┤
│ 20     │ ["Baidu Inc.", "Baidu"]                   │
├────────┼───────────────────────────────────────────┤
│ 30     │ ["Chevron Global", "Chevron"]             │
└────────┴───────────────────────────────────────────┘

补充:拼接后拆分的方式(不推荐)

如果一定要用管道符拼接再拆分的方式实现,也可以这么写,但这种方法涉及多次字符串操作,效率远低于直接数组拼接:

result_alt = (
    df
    .group_by("person")
    .agg(
        (pl.col("small") + "|" + pl.col("comp_big")).flatten().str.split("|").flatten().unique()
    )
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:02:25