【发布时间】:2021-04-21 03:25:36
【问题描述】:
我想在时间序列 ts(pandas 数据帧中的一列)上实现“快速攻击/慢衰减”(使用指数衰减的峰值检测)过滤器,描述如下:
fasd[t] = max(ts[t], 0.9 * fasd[t-1])
“基本”代码(如下)可以工作,但是是否有 Pythonic 和有效的方法来做到这一点,使用 rolling() 或矢量化方法?谢谢。
import pandas as pd
ts = [1,0,0,0,0,1,0,0,0,1,0.95,1,1,1,1,1,0,0,1,1,1,1,1,1,]
df = pd.DataFrame({'ts':ts})
df['fasd'] = 0
df.loc[0,'fasd'] = df.iloc[0]['ts']
for i in range(1, len(df)):
df.loc[i, 'fasd'] = max(df.loc[i,'ts'], 0.9*df.loc[i-1, 'fasd'])
【问题讨论】:
-
如果您可以将您的检测器定义为 IIR 或 FIR 滤波器,那么有许多快速实现 - 例如在 scipy 中
标签: pandas time-series rolling-computation peak-detection