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

如何在Polars中对delay轴分箱并聚合t值以生成目标曲线?

问题描述

我有一份实验数据集,绘制2D直方图时能看到一个特征:
2D直方图
可以注意到,在x轴218.46附近、y轴86000附近的区域存在异常特征。

我用以下代码对数据集进行过滤和聚合:

edc = (
    df_TR.filter(
        (pl.col("t") > 85_700)
        & (pl.col("t") < 86_090)
        & (pl.col("delay") > 218.30)
        & (pl.col("delay") < 218.72)
    )
    .group_by("delay").agg(pl.col("t").sum().alias("sum_t")
)

得到的绘图代码及结果如下:

f, ax = plt.subplots()
ax.plot(edc["delay"], edc["sum_t"], ".")
ax.set_ylim(0, 1e7);

聚合后绘图结果

但这并非我想要的结果,我需要在过滤/分组后对数据进行分箱,生成类似下图的结果(忽略拟合部分,该图来自另一实验):
目标分箱绘图示例

我需要对delay轴进行分箱,并在每个分箱内对所有t值求和(或取平均),但不清楚Polars中如何实现分箱操作。

解决方案

Polars提供了多种分箱实现方式,以下是两种常用方案:

1. 固定宽度分箱(pl.bin())

若需按固定步长对delay分箱,可使用pl.bin()指定步长,代码示例:

# 按步长0.02对delay分箱,每个分箱内求和t
edc = (
    df_TR.filter(
        (pl.col("t") > 85_700)
        & (pl.col("t") < 86_090)
        & (pl.col("delay") > 218.30)
        & (pl.col("delay") < 218.72)
    )
    .with_columns(
        delay_bin=pl.col("delay").bin(bin_width=0.02)
    )
    .group_by("delay_bin")
    .agg(
        pl.col("t").sum().alias("sum_t"),
        # 可选:计算分箱中心值,用于绘图时的x轴
        delay_center=pl.col("delay").mean()
    )
)

2. 自定义边界分箱(pl.cut())

若需手动指定分箱边界,可使用pl.cut()实现,代码示例:

# 自定义分箱边界:从218.3到218.72,间隔0.02
bins = pl.arange(218.30, 218.73, 0.02)

edc = (
    df_TR.filter(
        (pl.col("t") > 85_700)
        & (pl.col("t") < 86_090)
        & (pl.col("delay") > 218.30)
        & (pl.col("delay") < 218.72)
    )
    .with_columns(
        delay_bin=pl.col("delay").cut(bins=bins, include_boundaries=True)
    )
    .group_by("delay_bin")
    .agg(
        pl.col("t").sum().alias("sum_t"),
        delay_center=pl.col("delay").mean()
    )
)

绘图代码

分箱聚合完成后,用分箱中心值绘制曲线即可得到类似目标图的效果:

f, ax = plt.subplots()
ax.plot(edc["delay_center"], edc["sum_t"], "-o")
ax.set_ylim(0, 1e7);

可根据需求调整分箱步长或边界范围,适配数据特征。

内容的提问来源于stack exchange,提问作者Maxwell's Daemon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 05:39:52