You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Polars:按用户组统计至下次登录的剩余行数

实现Polars用户下次登录剩余行数统计

核心思路是通过分组窗口函数结合反向计算,先标记登录行位置,再统计每行到下一个登录行的行数差,最后处理最后一次登录后的行。

具体代码实现

import polars as pl

data = pl.DataFrame({"user_id": [1, 1, 1, 2, 2, 2], "login": [False, True, False, False, False, True]})

result = data.with_columns(
    pl.when(pl.col("login"))
    .then(0)
    .otherwise(
        pl.col("login")
        .cum_sum(reverse=True)
        .over("user_id")
        .pipe(lambda s: s - s.shift(-1))
    )
    .when(pl.col("login").cum_sum(reverse=True).over("user_id") == 0)
    .then(None)
    .alias("days_to_next_login")
)

print(result)

代码逻辑说明

  • 用cum_sum(reverse=True).over("user_id")反向统计每个用户的登录累计数,累计数为0的行就是最后一次登录后的行。
  • 通过s - s.shift(-1)计算当前行到下一个登录行的行数差,登录行直接设为0。
  • 最后用when条件把累计数为0的行设为None。

输出结果

shape: (6, 3)
┌─────────┬───────┬──────────────────┐
│ user_id ┆ login ┆ days_to_next_login │
│ ---     ┆ ---   ┆ ---              │
│ i64     ┆ bool  ┆ i64              │
╞═════════╪═══════╪══════════════════╡
│ 1       ┆ false ┆ 1                │
│ 1       ┆ true  ┆ 0                │
│ 1       ┆ false ┆ null             │
│ 2       ┆ false ┆ 2                │
│ 2       ┆ false ┆ 1                │
│ 2       ┆ true  ┆ 0                │
└─────────┴───────┴──────────────────┘

内容的提问来源于stack exchange,提问作者cdkdrf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 13:26:02