Gostaria de realizar o seguinte:
Entrada:
df = pl.DataFrame({
"a": [1,15,None,20,None]
})
Saída:
df = pl.DataFrame({
"a": [1,15,None,20,None],
"b": [0,14,None,5,None]
})
Ou seja, de:
UM |
---|
1 |
15 |
Nenhum |
20 |
Nenhum |
para:
UM | B |
---|---|
1 | 0 |
15 | 14 |
Nenhum | Nenhum |
20 | 5 |
Nenhum | Nenhum |
Então, o que ele faz:
- Se o valor de "A" for nulo, então o valor de B (coluna de saída) também será nulo
- Se "A" tiver algum valor, recupere o último valor não nulo em "A" e, em seguida, subtraia o valor atual em "A" com o valor não nulo anterior.
Gostaria de fazer isso na biblioteca de dataframes polars do Python, mas não consigo encontrar uma solução.
Tentei a seguinte pergunta:
Mas infelizmente, isso não responde ao problema original, já que a pergunta realiza uma agregação de uma coluna inteira e, então, pega o último valor dessa coluna.
O que eu gostaria de fazer não é agregar uma coluna inteira, mas simplesmente subtrair um valor atual com um valor anterior não nulo.
Eu também tentei usar rolling:
df = df.with_row_index().rolling(
index_column = 'index',
period = '???i').agg(pl.col("A").last())
Mas, é claro, isso não funciona porque a ocorrência de Valores Nulos não pode ser determinada (ou seja, não é periódica, então não sei quantos índices antes da entrada atual contêm um valor não nulo em "A").
Alguém sabe como fazer isso?
Obrigado!