Gostaria de obter valor de uma coluna cujo nome está em outra coluna.
Na minha tabela há muitas colunas, então fazer isso pl.when().then()
não é uma opção.
Como entrada temos este dataframe:
foo | contagem_de_foo | bar | contagem_de_barras | base | contagem_base | maior |
---|---|---|---|---|---|---|
1 | 23 | 4 | 43 | 5 | 64 | base |
2 | 45 | 6 | 45 | 1 | 43 | bar |
3 | 234 | 9 | 453 | 15 | 231 | base |
4 | 55 | 2 | 67 | 3 | 94 | foo |
e gostaria de transformar isso com with_columns()
:
foo | contagem_de_foo | bar | contagem_de_barras | base | contagem_base | maior | maior_contagem |
---|---|---|---|---|---|---|---|
1 | 23 | 4 | 43 | 5 | 64 | base | 64 |
2 | 45 | 6 | 45 | 1 | 43 | bar | 45 |
3 | 234 | 9 | 453 | 15 | 231 | base | 231 |
4 | 55 | 2 | 67 | 3 | 94 | foo | 4 |
Este (pseudo)código ilustra o que tenho em mente (mas é claro que isso não funciona)
df = pl.DataFrame({"foo" : [1, 2, 3, 4],
"foo_count" : [23, 45 ,234, 55],
"bar" : [4 ,6 ,9, 2],
"bar_count" : [43, 45 ,453, 67],
"baz": [5,1,15, 3],
"baz_count" : [64, 43 ,231, 94],
"largest" : ["baz", "bar", "baz", "foo"]})
df.with_columns(
pl.col(f"{pl.col('largest')}_count").alias("largest_count")
)
Aqui está uma abordagem simples. Primeiro, criamos expressões para colunas mascaradas usando um gerador de expressões when-then . Então, confiamos em
pl.coalesce
para combinar as colunas mascaradas. Ainda há um loop python ingênuo sobre os elementos exclusivos em largest .Aqui está uma abordagem que escala mesmo com uma quantidade muito grande de colunas. Podemos extrair apenas as colunas de contagem:
Em seguida, crie uma tabela normalizada com um índice:
Então podemos juntar as contagens normalizadas ao dataframe original usando um índice temporário: