我有以下氨纶:

 df = pl.DataFrame({
        "Column A": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
        "Column B": [2, 3, 1, 4, 1, 7, 3, 2, 12, 0]
    })

我想创建一个新的列C,以行为单位保存当前行的B值与列B中的下一个值之间的距离,该距离大于或等于B +50%.

最终结果应该是这样的:

 df = pl.DataFrame({
        "Column A": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
        "Column B": [2, 3, 1, 4, 1, 7, 3, 2, 12, 0],
        "Column C": [1, 4, 1, 2, 1, 3, 2, 1, None, None]
    })

如何使用Polars有效地实现这一目标,尤其是因为我正在使用大型数据框架?

推荐答案

好吧,首先我应该说--这个看起来需要在多列上加入不等式,根据我发现纯极点并不适合它.用join_asof个可能可以做到这一点,但我无法让它漂亮.

我可能会使用duckdb integration with polars来实现结果:

import duckdb

duckdb.sql("""
    select
        d."Column A",
        d."Column B",
        (
            select tt."Column A"
            from df as tt
            where tt."Column A" > d."Column A" and tt."Column B" >= d."Column B" * 1.5
            order by tt."Column A" asc
            limit 1
        ) - d."Column A" as "Column C"
    from df as d
""").pl()

┌──────────┬──────────┬──────────┐
│ Column A ┆ Column B ┆ Column C │
│ ---      ┆ ---      ┆ ---      │
│ i64      ┆ i64      ┆ i64      │
╞══════════╪══════════╪══════════╡
│ 1        ┆ 2        ┆ 1        │
│ 2        ┆ 3        ┆ 4        │
│ 3        ┆ 1        ┆ 1        │
│ 4        ┆ 4        ┆ 2        │
│ 5        ┆ 1        ┆ 1        │
│ 6        ┆ 7        ┆ 3        │
│ 7        ┆ 3        ┆ 2        │
│ 8        ┆ 2        ┆ 1        │
│ 9        ┆ 12       ┆ null     │
│ 10       ┆ 0        ┆ null     │
└──────────┴──────────┴──────────┘

Python相关问答推荐

使用pandas MultiIndex进行不连续 Select

绘制系列时如何反转轴?

Twilio:CallInstance对象没有来自_的属性'

在Arrow上迭代的快速方法.Julia中包含3000万行和25列的表

查找下一个值=实际值加上使用极点的50%

Python中MongoDB的BSON时间戳

如何使用Google Gemini API为单个提示生成多个响应?

TARete错误:类型对象任务没有属性模型'

使用FASTCGI在IIS上运行Django频道

Python中的嵌套Ruby哈希

不理解Value错误:在Python中使用迭代对象设置时必须具有相等的len键和值

发生异常:TclMessage命令名称无效.!listbox"

在线条上绘制表面

如何将Docker内部运行的mariadb与主机上Docker外部运行的Python脚本连接起来

无法使用requests或Selenium抓取一个href链接

在极性中创建条件累积和

如何使Matplotlib标题以图形为中心,而图例框则以图形为中心

如何从需要点击/切换的网页中提取表格?

如何排除prefecture_related中查询集为空的实例?

基于另一列的GROUP-BY聚合将列添加到Polars LazyFrame