我有以下代码和输出。
代码。
import polars as pl
df = pl.DataFrame({
'type': ['A', 'O', 'B', 'O'],
'id': ['CASH', 'ORB.A123', 'CHECK', 'OTC.BV32']
})
df.with_columns(sub_id=pl.when(pl.col('type') == 'O').then(pl.col('id').str.split('.')).otherwise(None))
输出。
shape: (4, 3)
┌──────┬──────────┬─────────────────┐
│ type ┆ id ┆ sub_id │
│ --- ┆ --- ┆ --- │
│ str ┆ str ┆ list[str] │
╞══════╪══════════╪═════════════════╡
│ A ┆ CASH ┆ null │
│ O ┆ ORB.A123 ┆ ["ORB", "A123"] │
│ B ┆ CHECK ┆ null │
│ O ┆ OTC.BV32 ┆ ["OTC", "BV32"] │
└──────┴──────────┴─────────────────┘
现在,我该如何提取每个列表的第 n 个元素(或在本例中为最后一个元素)?
特别是,预期输出如下。
shape: (4, 3)
┌──────┬──────────┬────────────┐
│ type ┆ id ┆ sub_id │
│ --- ┆ --- ┆ --- │
│ str ┆ str ┆ str │
╞══════╪══════════╪════════════╡
│ A ┆ CASH ┆ null │
│ O ┆ ORB.A123 ┆ "A123" │
│ B ┆ CHECK ┆ null │
│ O ┆ OTC.BV32 ┆ "BV32" │
└──────┴──────────┴────────────┘
您可以简单地附加
.list.last()
来选择每个列表的最后一个元素。或者,可以
.list.get()
通过索引获取列表元素。请注意,我已删除,
.otherwise(None)
因为这是if-then-otherwise表达式的默认行为。