我有一个像这样的polars个格子:

shape: (10, 2)
┌────────┬───────┐
│ foo    ┆ bar   │
│ ---    ┆ ---   │
│ i64    ┆ i64   │
╞════════╪═══════╡
│ 86     ┆ 11592 │
│ 109    ┆ 2765  │
│ 109    ┆ 4228  │
│ 153    ┆ 4214  │
│ 153    ┆ 7217  │
│ 153    ┆ 11095 │
│ 160    ┆ 1134  │
│ 222    ┆ 5509  │
│ 225    ┆ 10150 │
│ 239    ┆ 4151  │
└────────┴───────┘

和一个由points个整数组成的sorted列表:

points = [0, 1500, 3000, 4500, 6000, 7500, 9000, 10500, 12000]

我想创建一个新的列baz,这样对于bar中的每个元素y,我找到points中最大的x,使得x =< y.那么baz的元素是y - x.我怎么能做到这一点?

推荐答案

通过使用join_asof,您可以得到一个完全依赖极点表达式的解决方案.首先,在列表中创建DataFrame,然后连接(我假设points列表是预先排序的)

这里,我们将连接的strategy参数留空,因此将使用默认的backward策略.

backward搜索 Select 右DataFrame (in our case - list of points)on键小于或等于左DataFrame (in our case - list of points)键的最后一行:

df_points = pl.DataFrame({'point': points})

(
    df.sort('bar')
    .join_asof(df_points.set_sorted('point'), right_on='point', left_on='bar')
    .with_columns(baz=pl.col('bar') - pl.col('point'))
    .drop('point')
    .sort('foo')
)

┌─────┬───────┬──────┐
│ foo ┆ bar   ┆ baz  │
│ --- ┆ ---   ┆ ---  │
│ i64 ┆ i64   ┆ i64  │
╞═════╪═══════╪══════╡
│ 86  ┆ 11592 ┆ 1092 │
│ 109 ┆ 2765  ┆ 1265 │
│ 109 ┆ 4228  ┆ 1228 │
│ 153 ┆ 4214  ┆ 1214 │
│ 153 ┆ 7217  ┆ 1217 │
│ 153 ┆ 11095 ┆ 595  │
│ 160 ┆ 1134  ┆ 1134 │
│ 222 ┆ 5509  ┆ 1009 │
│ 225 ┆ 10150 ┆ 1150 │
│ 239 ┆ 4151  ┆ 1151 │
└─────┴───────┴──────┘

Python相关问答推荐

try 从网站获取表(ValueRight:如果使用所有纯量值,则必须传递索引)

云上Gunicorn的Flask-socketIO无法工作

Docker-compose:为不同项目创建相同的容器

sys.modulesgo 哪儿了?

如何将我的位置与光强度数据匹配到折射图案曲线中?

基本链合同的地址是如何计算的?

Python plt.text中重叠,包adjust_text不起作用,如何修复?

如何使用Jinja语法在HTML中重定向期间传递变量?

Python在tuple上操作不会通过整个单词匹配

numba jitClass,记录类型为字符串

抓取rotowire MLB球员新闻并使用Python形成表格

如何根据参数推断对象的返回类型?

标题:如何在Python中使用嵌套饼图可视化分层数据?

使用groupby Pandas的一些操作

如何在solve()之后获得症状上的等式的值

移动条情节旁边的半小提琴情节在海运

如何更新pandas DataFrame上列标题的de值?

基于行条件计算(pandas)

如何创建引用列表并分配值的Systemrame列

合并与拼接并举