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

如何在Pandas中向量化实现漂移变化检测?

无循环向量化实现温度漂移检测

原代码通过遍历温度序列,识别出与上一次漂移点温度偏差超过toffset的记录,将对应DriftedTemp列设为当前温度,并更新基准温度t0。由于逻辑依赖前一次计算的状态,常规列级向量化无法直接实现,这里提供一种无需显式循环的向量化解决方案:

实现代码

import pandas as pd
import numpy as np

# 定义累积处理函数,维护基准温度和当前漂移标记
def drift_accumulator(accumulated_state, current_temp):
    prev_t0, _ = accumulated_state
    if np.abs(current_temp - prev_t0) > toffset:
        # 超过阈值,更新基准温度并记录当前温度
        return (current_temp, current_temp)
    else:
        # 未超过阈值,保持基准温度,不记录
        return (prev_t0, None)

# 初始化初始状态:(初始温度, 无漂移记录)
initial_state = (df['Temperature'].iloc[0], None)

# 对温度序列从第二个元素开始应用累积函数
accumulated_results = df['Temperature'].iloc[1:].accumulate(drift_accumulator, initial=initial_state)

# 提取漂移记录值,构造DriftedTemp列
drifted_values = [result[1] for result in accumulated_results]
df['DriftedTemp'] = [None] + drifted_values

方案说明

  • pandas.Series.accumulate会依次处理序列中的每个元素,每次传递上一次的累积状态(包含当前基准温度t0和上一次的漂移记录)给自定义函数
  • 自定义函数内部完成偏差判断逻辑,返回更新后的基准温度和当前是否记录漂移的结果
  • 最终将累积结果整理为DriftedTemp列,逻辑与原循环代码完全一致,且无需编写显式循环

性能优化(可选)

如果处理超大规模数据集,可使用numba编译累积函数提升速度:

from numba import jit

@jit(nopython=True)
def drift_accumulator_numba(accumulated_state, current_temp):
    prev_t0 = accumulated_state[0]
    if np.abs(current_temp - prev_t0) > toffset:
        return (current_temp, current_temp)
    else:
        return (prev_t0, None)

# 使用编译后的函数重复上述累积步骤即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 14:43:13