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

Pandas中非时间序列深度数据下采样(降低采样率)的最优实现方法

Pandas非时间序列固定间隔下采样方案

完全可行,pandas.resample确实仅支持时间类索引,针对深度这类数值型间隔的下采样需求,用Pandas自带的分组聚合即可实现,不需要写循环,性能远高于自定义遍历逻辑。

方案1:数据深度连续无缺失时使用(你的场景适用)

你的采样步长固定为0.01m,直接用深度的整数除法完成5m区间分组即可,代码如下:

import pandas as pd

# 定义下采样间隔
interval = 5

# 按5m区间分组聚合
df_downsampled = df_raw.groupby(df_raw["Depth_m"] // interval).agg(
    # 深度取每组的平均深度,和你给出的期望输出规则一致
    Depth_m = ("Depth_m", "mean"),
    # 数值取每组的平均值,也可替换为median、max、min等你需要的聚合规则
    value = ("value", "mean")
).reset_index(drop=True)

规则说明:

  • df_raw["Depth_m"] // interval会自动把所有深度映射到所属的5m区间编号,比如1.344.99m的样本都属于0号区间,5.009.99m属于1号区间,以此类推自动完成分组
  • 如果你不需要平均深度,想取每组第一个/最后一个样本的深度,或者固定取区间中点作为深度值,直接修改Depth_m对应的聚合函数即可,比如取每组最后一个样本的所有值可以直接简化为df_downsampled = df_raw.groupby(df_raw["Depth_m"] // interval).last().reset_index(drop=True)

方案2:深度存在缺失/需要自定义分箱边界时使用

如果你的原始数据存在深度跳变、漏采的情况,可以用pd.cut手动定义分箱规则,适配性更强:

import pandas as pd

interval = 5
# 生成从最小深度到最大深度的5m间隔分箱边界
bins = pd.interval_range(
    start = df_raw["Depth_m"].min(),
    end = df_raw["Depth_m"].max() + interval,
    freq = interval,
    closed = "left"
)
# 给每个样本标记所属分箱
df_raw["depth_bin"] = pd.cut(df_raw["Depth_m"], bins=bins)
# 分组聚合
df_downsampled = df_raw.groupby("depth_bin", observed=True).agg(
    Depth_m = ("Depth_m", "mean"),
    value = ("value", "mean")
).reset_index(drop=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:06:04