如何在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
相关产品推荐
相关产品推荐

