让我们来个两极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]
}
)
date | col1 | col2 | col3 |
---|---|---|---|
2022-01-01 | 1 | 1 | 2 |
2022-01-02 | 1 | 2 | 3 |
2022-01-07 | 2 | 3 | 4 |
2022-01-17 | 2 | 4 | 1 |
2022-03-02 | 3 | 1 | 3 |
2022-06-05 | 3 | 2 | 2 |
2022-06-07 | 4 | 3 | 4 |
2022-07-02 | 4 | 4 | 1 |
DF按日期排序.我想创建一个列,这将给我一个计数的所有较早的行(较低的日期)与所有3列的值大于或等于当前行的值.或者换句话说:
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]
)
结果应该如下所示:
date | col1 | col2 | col3 | ge |
---|---|---|---|---|
2022-01-01 | 4 | 1 | 2 | 0 |
2022-01-02 | 4 | 2 | 3 | 0 |
2022-01-07 | 2 | 3 | 4 | 0 |
2022-01-17 | 2 | 4 | 4 | 0 |
2022-03-02 | 2 | 1 | 3 | 3 |
2022-06-05 | 3 | 3 | 2 | 0 |
2022-06-07 | 2 | 3 | 2 | 3 |
2022-07-02 | 1 | 4 | 1 | 1 |
我试过shift
、qe
、over
、when
、cum_count
等各种组合,但都没能弄清楚.我也找不到一个足够相似的问题来成功地采用它的答案.有没有一种方法可以使用Polars来实现这一点?先谢谢你了.