是否有一种方法来利用极性映射,使这段代码更有效?



我有一些极地代码,在功能上可以做我想做的事情,但我觉得它充其量是一个效率低下的实现。我觉得一定有一些方法可以达到与.map()相同的结果,但我不知道如何。有什么想法或建议吗?

具体来说,我的数据组织如下:每一列是一个位置,每一行是一个日期时间。我要做的是计算连续非零值的最大计数(我将其转换为布尔值,因为我不需要值的大小,我只需要知道值是否为零)。示例数据和示例预期输出如下:

示例虚拟数据

tbody> <<tr>06:00时
日期 位置1 位置2
01-01-23 00:0001
01-01-23 01:0011
01-01-23 02:0011
01-01-23 03:0001
01-01-23内11
01-01-23凌晨10
01-01-2310
  • 更新:极地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     │
└────────────┴───────┘

最新更新