Como calcular a mediana horizontal para colunas numéricas?
df = pl.DataFrame({"ABC":["foo", "bar", "foo"], "A":[1,2,3], "B":[2,1,None], "C":[1,2,3]})
print(df)
shape: (3, 4)
┌─────┬─────┬──────┬─────┐
│ ABC ┆ A ┆ B ┆ C │
│ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ i64 ┆ i64 ┆ i64 │
╞═════╪═════╪══════╪═════╡
│ foo ┆ 1 ┆ 2 ┆ 1 │
│ bar ┆ 2 ┆ 1 ┆ 2 │
│ foo ┆ 3 ┆ null ┆ 3 │
└─────┴─────┴──────┴─────┘
Quero obter o mesmo que com o pl.mean_horizontal abaixo, mas obter mediana em vez da média. Não encontrei expressão existente para isso.
print(df.with_columns(pl.mean_horizontal(pl.col(pl.Int64)).alias("Horizontal Mean")))
shape: (3, 5)
┌─────┬─────┬──────┬─────┬─────────────────┐
│ ABC ┆ A ┆ B ┆ C ┆ Horizontal Mean │
│ --- ┆ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ i64 ┆ i64 ┆ i64 ┆ f64 │
╞═════╪═════╪══════╪═════╪═════════════════╡
│ foo ┆ 1 ┆ 2 ┆ 1 ┆ 1.333333 │
│ bar ┆ 2 ┆ 1 ┆ 2 ┆ 1.666667 │
│ foo ┆ 3 ┆ null ┆ 3 ┆ 3.0 │
└─────┴─────┴──────┴─────┴─────────────────┘
Não há
median_horizontal()
no momento, mas você pode usarpl.concat_list()
para criar uma coluna de lista a partir de todaspl.Int64
as colunas.pl.Expr.list.median()
para calcular a mediana.Ou você pode usar a integração numpy (mas isso provavelmente será mais lento):
Há uma questão aberta para solicitar
median_horizontal
(e outras funções).Enquanto isso, uma solução alternativa sugerida é
concat_list
+map_elements
:Alternativamente , com
concat_list
++ :explode
over
Saída: