使用 Polars 列表类型列 - 如何在条件下使用它们?

问题描述 投票:0回答:1

我发现列表作为一种类型非常有用。不幸的是,它们有详细记录 - 如何生成它们,但没有记录如何访问内容本身:(

例如,我有一个名为 CARS 的列:

df = pl.DataFrame({'CARS': [[1, 2, 3], [2, 3], [4], []]})
┌───────────┐
│ CARS      │
│ ---       │
│ list[i64] │
╞═══════════╡
│ [1, 2, 3] │
│ [2, 3]    │
│ [4]       │
│ []        │
└───────────┘

我想准备两个新变量。

  • CARF - 列表中的第一个值
  • CAR2 - 1 - 如果 value=2 位于第一位,2 - 如果 2 出现在任何地方,3 - 2 根本不存在

结果应如下所示:

┌──────┬──────┐
│ CARF ┆ CAR2 │
│ ---  ┆ ---  │
│ i64  ┆ i32  │
╞══════╪══════╡
│ 1    ┆ 2    │
│ 2    ┆ 1    │
│ 4    ┆ 3    │
│ null ┆ 3    │
└──────┴──────┘
list python-polars
1个回答
6
投票

您可以使用

when -> then -> otherwise
表达式和
list
命名空间,其中包含列表实用程序。

它们记录在此处。

这是您的用例的示例:

df = pl.DataFrame({
    "cars": [[1,2,3], [2,3],[4],[]]
})

df.select(
    pl.col("cars").list.first().alias("cars_first"),
    pl.when(pl.col("cars").list.first() == 2)
    .then(1)
    .when(pl.col("cars").list.contains(2))
    .then(2)
    .otherwise(3).alias("cars_literal")
)

输出:

shape: (4, 2)
┌────────────┬──────────────┐
│ cars_first ┆ cars_literal │
│ ---        ┆ ---          │
│ i64        ┆ i32          │
╞════════════╪══════════════╡
│ 1          ┆ 2            │
│ 2          ┆ 1            │
│ 4          ┆ 3            │
│ null       ┆ 3            │
└────────────┴──────────────┘
© www.soinside.com 2019 - 2024. All rights reserved.