我正在try 为返回Polars表达式的功能管道编写一个方法.该方法应将列名作为字符串和整数天数.我想使用等于天数的窗口对该列执行滚动计数.

似乎没有rolling_count的表达式,所以我try 使用rolling_sum,但没有用.

def temporal_rolling_count(col: str, days: int) -> pl.Expr:
    return (
        pl.lit(1)
        .rolling_sum(window_size=f"{days}d", by="date_time")
        .over(col)
        .fill_null(0)
    )

我也try 了这种方法,它更接近,但仍然不是在所有情况下都有效

def temporal_rolling_count(col: str, days: int) -> pl.Expr:
    return (
        pl.col(col)
        .cumcount()
        .over(col, (pl.col("date_time") - pl.col("date_time").min()).dt.days() % days == 0)
        .fill_null(0)
    )

有什么办法可以通过返回一个表达式来实现这一点吗?或者我必须直接对DataFrame执行操作,比如使用groupby_rolling

推荐答案

根据@jqury的建议,通过使用.clip,我能够在不对DataFrame执行操作的情况下实现预期的结果.

def temporal_rolling_count(col: str, days: int) -> pl.Expr:
    return (
        pl.col(col).clip(1,1)
        .rolling_sum(window_size=f"{days}d", by="date_time")
        .over(col)
        .fill_null(0)
    )

EDIT

通过执行以下操作,我成功地执行了相同的操作,但只有在条件为真时才进行计数.

def temporal_rolling_count(col: str, days: int) -> pl.Expr:
    return (
        pl.when(condition).then(1).otherwise(0)
        .rolling_sum(window_size=f"{days}d", by="date_time")
        .over(col)
        .fill_null(0)
    )

Python相关问答推荐

在Google Colab中设置Llama-2出现问题-加载判断点碎片时Cell-run失败

如何从具有不同len的列表字典中创建摘要表?

Django RawSQL注释字段

为什么if2/if3会提供两种不同的输出?

Matplotlib中的字体权重

Flask Jinja2如果语句总是计算为false&

如何使用正则表达式修改toml文件中指定字段中的参数值

Pandas—MultiIndex Resample—我不想丢失其他索引的信息´

处理Gekko的非最优解

我对这个简单的异步者的例子有什么错误的理解吗?

如何将泛型类类型与函数返回类型结合使用?

Autocad使用pyautocad/comtypes将对象从一个图形复制到另一个图形

应用指定的规则构建数组

如何将返回引用的函数与pybind11绑定?

504未连接IB API TWS错误—即使API连接显示已接受''

如何获得满足掩码条件的第一行的索引?

用0填充没有覆盖范围的垃圾箱

如何在表单中添加管理员风格的输入(PDF)

更新包含整数范围的列表中的第一个元素

如何通过函数的强式路径动态导入函数?