我有一些polars代码,功能上可以做我想要的,但我觉得这是一个低效的实现在最好的。我觉得必须有一些方法来实现相同的结果与.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 04:00 | 1 | 1 |
01-01-23 05:00 | 1 | 0 |
01-01-23 06:00 | 1 | 0 |
预期产出:
地点 | 最大累积计数 |
---|---|
位置1 | 三 |
地点2 | 五 |
下面是我的代码,它是 * 功能 *,但感觉它可以改进我的人更聪明,更精通极化比我。
for col in pivoted_df.drop("Date").columns:
xy_cont_df_a = (
pivoted_df.select(pl.col(col))
.with_columns(
pl.when(
pl.col(col).cast(pl.Boolean)
& pl.col(col)
.cast(pl.Boolean)
.shift_and_fill(-1, False)
.is_not()
).then(
pl.count().over(
(
pl.col(col).cast(pl.Boolean)
!= pl.col(col).cast(pl.Boolean).shift()
).cumsum()
)
)
)
.max()
)
1条答案
按热度按时间hlswsv351#
您可以一次处理所有列:
您的示例提到了
pivoted_df
,这表明您可能使用了.pivot
来达到这一点。如果是这种情况,可能有一种更简单的方法可以从当前流程的早期步骤中获取这些计数。
编辑:
如果你有一个“平面”框架:
一种可能的方法是:
一个三个三个一个