Preciso calcular a porcentagem de valores positivos na value
coluna agrupados pela group
coluna.
import polars as pl
df = pl.DataFrame(
{
"group": ["A", "A", "A", "A", "A", "B", "B", "B", "B", "B"],
"value": [2, -1, 3, 1, -2, 1, 2, -1, 3, 2],
}
)
shape: (10, 2)
┌───────┬───────┐
│ group ┆ value │
│ --- ┆ --- │
│ str ┆ i64 │
╞═══════╪═══════╡
│ A ┆ 2 │
│ A ┆ -1 │
│ A ┆ 3 │
│ A ┆ 1 │
│ A ┆ -2 │
│ B ┆ 1 │
│ B ┆ 2 │
│ B ┆ -1 │
│ B ┆ 3 │
│ B ┆ 2 │
└───────┴───────┘
No grupo A
há 3 de 5 valores positivos (60%), enquanto na coluna B
há 4 de 5 valores positivos (80%).
Aqui está o dataframe esperado.
┌────────┬──────────────────┐
│ group ┆ positive_percent │
│ --- ┆ --- │
│ str ┆ f64 │
╞════════╪══════════════════╡
│ A ┆ 0.6 │
│ B ┆ 0.8 │
└────────┴──────────────────┘
Você pode usar um costume
group_by.agg
comExpr.ge
eExpr.mean
. Isso converterá os valores paraFalse
/True
dependendo do sinal, então calculará a proporção deTrue
tomando omean
:Saída:
Intermediários:
pl.DataFrame.group_by()
para agrupar pelos dados..GroupBy.agg()
para agregar dados.Basicamente, você quer converter sua
value
coluna emTrue
ou1
para positivo /False
ou0
para negativo e então calcular a porcentagem.Ou você pode simplesmente filtrar todas as linhas onde a condição não é verdadeira: