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

Python/Pandas下基于指定列条件的大型数据集欠采样实现方法

自定义规则欠采样高效实现方案

针对你需要基于「上一个保留点的状态判断是否保留当前点」的采样规则,以下两种方案性能远高于原生Python逐行遍历,数万行数据集可以在毫秒级完成处理:

方案1:Numba JIT编译实现(最优性能)

核心逻辑和你原本的逐行判断完全一致,通过Numba将代码编译为机器码运行,速度比原生遍历快100倍以上。

实现代码

import pandas as pd
import numpy as np
from numba import jit

@jit(nopython=True)
def filter_custom_rule(time_arr, temp_arr, time_threshold=1, temp_threshold=2):
    total_len = len(time_arr)
    keep_mask = np.zeros(total_len, dtype=np.bool_)
    # 首条数据默认保留
    keep_mask[0] = True
    last_keep_time = time_arr[0]
    last_keep_temp = temp_arr[0]

    for idx in range(1, total_len):
        delta_time = time_arr[idx] - last_keep_time
        delta_temp = abs(temp_arr[idx] - last_keep_temp)
        if delta_time >= time_threshold or delta_temp >= temp_threshold:
            keep_mask[idx] = True
            last_keep_time = time_arr[idx]
            last_keep_temp = temp_arr[idx]
    return keep_mask

# 调用示例
# 先将时间列转为秒级时间戳数值
df['time_stamp'] = df['time'].astype('int64') // 10**9
keep = filter_custom_rule(df['time_stamp'].values, df['temperature'].values)
# 得到欠采样结果
result_df = df[keep].reset_index(drop=True)

适用场景

需要灵活扩展多维度判断规则、追求最高运行速度的场景,规则修改只需要调整函数内的判断逻辑即可。

方案2:Pandas原生向量化实现(无额外依赖)

不需要安装第三方库,全用Pandas原生方法实现,性能比原生遍历快几十倍。

实现代码

# 处理时间阈值条件,按1秒间隔分组
df['time_diff'] = df['time'].diff().dt.total_seconds().fillna(0)
df['time_group'] = (df['time_diff'].cumsum() // 1).diff().ne(0).cumsum()

# 处理温度阈值条件,按2℃变化间隔分组
df['temp_diff'] = df['temperature'].diff().abs().fillna(0)
df['temp_group'] = (df['temp_diff'].cumsum() // 2).diff().ne(0).cumsum()

# 取每个时间/温度分组的第一条数据即为符合要求的采样点
result_df = df.groupby(['time_group', 'temp_group'], as_index=False).first()
# 清理临时列
result_df = result_df.drop(columns=['time_diff', 'time_group', 'temp_diff', 'temp_group'])

适用场景

不想安装额外依赖、规则相对固定的场景。

注意事项

  • 运行前需要确保time列已经转换为Pandas的datetime64类型,避免时间差计算错误。
  • 阈值可以根据实际需求自由调整,不需要修改核心逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 06:27:03