gpt4 book ai didi

python - 在 Pandas 数据帧上应用 Savitzky-Golay 过滤器

转载 作者:行者123 更新时间:2023-12-05 06:10:50 24 4
gpt4 key购买 nike

我有以下时间序列数据集:

import pandas as pd
from datetime import datetime
import numpy as np
from scipy.signal import savgol_filter

date_rng = pd.date_range(start='2020-07-01', end='2020-07-20', freq='d')
df = pd.DataFrame(date_rng, columns=['date'])
df['data'] = np.random.randint(0,100,size=(len(date_rng)))

我想计算一个 Savitzky-Golay 过滤器和一个 pandas 数据框,我在以下函数中定义了它们:

def savgol(x, wl=3, p=2):
return savgol_filter(x, window_length=wl, polyorder=p)

df['sav_gol'] = df['data'].apply(savgol)

执行脚本时,我收到以下错误消息:

ValueError:如果模式为“interp”,则 window_length 必须小于或等于 x 的大小。

编辑:

这是我调整后的分组数据集。我会将 savgol 函数应用于此数据集:

df = pd.DataFrame({
'date':date_rng,
'value':np.random.randint(0,100,size=(len(date_rng))),
'group':'a'
})
df2 = pd.DataFrame({
'date':date_rng,
'value':np.random.randint(0,100,size=(len(date_rng))),
'group':'b'
})

df = df.append(df2, ignore_index=True)

这将是我的尝试:

df['sav_gol'] = df.groupby('group')['value'].apply(savgol)

如有任何帮助,我们将不胜感激!

最佳答案

这确实有效:

df['savgol'] = df.groupby('group')['value'].transform(lambda x: savgol_filter(x, 5,2))

关于python - 在 Pandas 数据帧上应用 Savitzky-Golay 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64224483/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com