Tenho um dataframe com vários IDs e estados correspondentes. Quero analisar como os estados mudaram ao longo do tempo e apresentar essas informações de forma eficaz.
Aqui está um exemplo:
import polars as pl
df = pl.DataFrame({
"ID": [1, 2, 3],
"T0": ["A", "B", "C"],
"T1": ["B", "B", "A"],
})
Uma abordagem é "concatenar" as colunas e, em seguida, fazer uma value_counts()
alteração na coluna
df = df.with_columns(
(pl.col("T0") + " -> " + pl.col("T1")).alias("Change")
)
No entanto, pode haver uma abordagem melhor para isso, ou até mesmo uma função integrada que possa realizar o que preciso com mais eficiência.
Saída de corrente:
shape: (3, 4)
┌─────┬─────┬─────┬────────┐
│ ID ┆ T0 ┆ T1 ┆ Change │
│ --- ┆ --- ┆ --- ┆ --- │
│ i64 ┆ str ┆ str ┆ str │
╞═════╪═════╪═════╪════════╡
│ 1 ┆ A ┆ B ┆ A -> B │
│ 2 ┆ B ┆ B ┆ B -> B │
│ 3 ┆ C ┆ A ┆ C -> A │
└─────┴─────┴─────┴────────┘
shape: (3, 2)
┌────────┬───────┐
│ Change ┆ count │
│ --- ┆ --- │
│ str ┆ u32 │
╞════════╪═══════╡
│ C -> A ┆ 1 │
│ B -> B ┆ 1 │
│ A -> B ┆ 1 │
└────────┴───────┘
Dependendo da estrutura exata da saída que você precisa, você pode usar
pl.DataFrame.group_by()
e.len()
:Você também pode concatenar colunas depois, se desejar:
Se você quiser usar
pl.Expr.value_counts()
, você pode primeiro combinar colunas empl.struct()
: