Eu tenho o seguinte código e saída.
Código.
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))
Saída.
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"] │
└──────┴──────────┴─────────────────┘
Agora, como eu extrairia o n-ésimo elemento (ou, neste caso, o último elemento) de cada lista?
Especialmente, o resultado esperado é o seguinte.
shape: (4, 3)
┌──────┬──────────┬────────────┐
│ type ┆ id ┆ sub_id │
│ --- ┆ --- ┆ --- │
│ str ┆ str ┆ str │
╞══════╪══════════╪════════════╡
│ A ┆ CASH ┆ null │
│ O ┆ ORB.A123 ┆ "A123" │
│ B ┆ CHECK ┆ null │
│ O ┆ OTC.BV32 ┆ "BV32" │
└──────┴──────────┴────────────┘
Você pode simplesmente acrescentar
.list.last()
para selecionar o último elemento de cada lista.Alternativamente, existe uma maneira
.list.get()
de obter os elementos da lista por índice.Observe que abandonei
.otherwise(None)
porque esse é o comportamento padrão de uma expressão se-então-caso contrário .