Vamos ter um polars df:
df = pl.DataFrame(
{
'date': ['2022-01-01', '2022-01-02', '2022-01-07', '2022-01-17', '2022-03-02', '2022-06-05', '2022-06-07', '2022-07-02'],
'col1': [4, 4, 2, 2, 2, 3, 2, 1],
'col2': [1, 2, 3, 4, 1, 3, 3, 4],
'col3': [2, 3, 4, 4, 3, 2, 2, 1]
}
)
data | col1 | col2 | col3 |
---|---|---|---|
01/01/2022 | 1 | 1 | 2 |
2022-01-02 | 1 | 2 | 3 |
07/01/2022 | 2 | 3 | 4 |
17/01/2022 | 2 | 4 | 1 |
02/03/2022 | 3 | 1 | 3 |
05/06/2022 | 3 | 2 | 2 |
07/06/2022 | 4 | 3 | 4 |
02/07/2022 | 4 | 4 | 1 |
O df é classificado por data. Gostaria de criar uma coluna que me desse uma contagem de todas as linhas anteriores (data inferior) com todas as 3 colunas tendo um valor maior ou igual ao valor da linha atual. Ou em outras palavras:
Count rows
where row_index < current_row_index &
col1[row_index] >= col1[current_row_index] &
col2[row_index] >= col2[current_row_index] &
col3[row_index] >= col3[current_row_index]
)
O resultado deve ficar assim:
data | col1 | col2 | col3 | ge |
---|---|---|---|---|
01/01/2022 | 4 | 1 | 2 | 0 |
2022-01-02 | 4 | 2 | 3 | 0 |
07/01/2022 | 2 | 3 | 4 | 0 |
17/01/2022 | 2 | 4 | 4 | 0 |
02/03/2022 | 2 | 1 | 3 | 3 |
05/06/2022 | 3 | 3 | 2 | 0 |
07/06/2022 | 2 | 3 | 2 | 3 |
02/07/2022 | 1 | 4 | 1 | 1 |
Eu tentei várias combinações de ,,,, etc. shift
, mas não consegui descobrir. Também não consegui encontrar uma pergunta semelhante o suficiente para adotar sua resposta com êxito. Existe uma maneira de conseguir isso usando Polars? Agradeço antecipadamente.qe
over
when
cum_count