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

如何在Polars DataFrame的列表类型列中获取唯一元素首次出现索引?

在Polars DataFrame中获取列表列内唯一元素的首次出现索引

要实现给列表类型列中每个子列表提取唯一元素的首次出现索引(类似arg_unique但作用于子列表层级),可以利用Polars的list.eval方法,直接对每个子列表调用Series的arg_unique功能,代码如下:

import polars as pl

# 构造输入DataFrame
df = pl.DataFrame({
    "fruits": [["apple", "banana", "apple", "orange"], ["grape", "apple", "grape"], ["kiwi", "mango", "kiwi"]]
})

# 提取每个子列表中唯一元素的首次出现索引
result = df.with_columns(
    pl.col("fruits").list.eval(pl.element().arg_unique())
)

print(result)

代码说明

  • list.eval会遍历fruits列的每个子列表,将其作为独立的Polars Series处理
  • pl.element()指代当前子列表对应的Series,调用arg_unique()会返回该Series中每个唯一元素的首次出现索引,完全匹配需求

执行后输出结果符合预期:

shape: (3, 1)
┌─────────────┐
│ fruits      │
│ ---         │
│ list[i64]   │
├─────────────┤
│ [0, 1, 3]   │
│ [0, 1]      │
│ [0, 1]      │
└─────────────┘

备选方案(Python层面循环)

如果需要更灵活的自定义逻辑,也可以用map_elements配合Python lambda实现,但效率略低(适合小数据量场景):

result = df.with_columns(
    pl.col("fruits").map_elements(
        lambda lst: [idx for idx, val in enumerate(lst) if val not in lst[:idx]],
        return_dtype=pl.List(pl.Int64)
    )
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 11:52:10