我有一些极地代码,在功能上可以做我想做的事情,但我觉得它充其量是一个效率低下的实现。我觉得一定有一些方法可以达到与.map()
相同的结果,但我不知道如何。有什么想法或建议吗?
具体来说,我的数据组织如下:每一列是一个位置,每一行是一个日期时间。我要做的是计算连续非零值的最大计数(我将其转换为布尔值,因为我不需要值的大小,我只需要知道值是否为零)。示例数据和示例预期输出如下:
示例虚拟数据
日期 | 位置1 | 位置2 | 01-01-23 00:00 | 0 | 1 |
---|---|---|
01-01-23 01:00 | 1 | 1 |
01-01-23 02:00 | 1 | 1 |
01-01-23 03:00 | 0 | 1 |
01-01-23内 | 1 | 1 |
01-01-23凌晨 | 1 | 0 |
01-01-23 | 06:00时1 | 0 |
-
更新:极地
0.18.7
添加了.rle()
和.rle_id()
,简化了这些类型的任务。
df.select(
pl.col('Location 1', 'Location 2').rle()
.struct['lengths'].max().keep_name()
)
shape: (1, 2)
┌────────────┬────────────┐
│ Location 1 ┆ Location 2 │
│ --- ┆ --- │
│ i64 ┆ i64 │
╞════════════╪════════════╡
│ 3 ┆ 5 │
└────────────┴────────────┘
使用非枢轴数据:
df.groupby('Location').agg(
pl.col('Value').rle().struct['lengths'].max()
)
shape: (2, 2)
┌────────────┬───────┐
│ Location ┆ Value │
│ --- ┆ --- │
│ str ┆ i32 │
╞════════════╪═══════╡
│ Location 2 ┆ 5 │
│ Location 1 ┆ 3 │
└────────────┴───────┘