在熊猫滚动中应用自定义窗口功能

Posted

技术标签:

【中文标题】在熊猫滚动中应用自定义窗口功能【英文标题】:Apply custom window function in pandas rolling 【发布时间】:2021-01-10 11:11:08 【问题描述】:

我有一个 DataFrame,例如

df = pd.DataFrame([1,2,3,4,5,6,7,8,9])

现在我想应用滚动平均值,例如

df.rolling(window=3, win_type=None).mean()

这给了我一个均匀加权元素的结果。 现在我想更改窗口功能。我知道,这可以通过将字符串(例如 'hann')传递给 win_type 参数来实现。

df.rolling(window=3, win_type='hann').mean()

现在对我来说有趣的一点是应用一个窗口函数,它使用指数衰减的权重,给“右边”的值一个高权重,给“更左边”的值一个较低的权重。这应该可以通过使用scipy.signal.windows.exponential 并调整参数来实现。但是,我正在努力传递这些参数,因为 win_type 只接受字符串。

当我尝试win_type='exponential' 时,我得到ValueError: exponential window requires tau

谁能告诉我如何将tau 等参数传递给win_type 甚至自己创建一个窗口函数?

【问题讨论】:

【参考方案1】:

答案是here 重要。解决方案取决于 pandas 版本。 Python 常见

import pandas as pd
df = pd.DataFrame([1,2,3,4,5,6,7,8,9])

tau=10 的情况下。 对于 Pandas='0.24.2'

df.rolling(window=(3,10), win_type='exponential').mean()
对于熊猫='1.1.3'
df.rolling(window=3, win_type='exponential').mean(tau=10)

不要犹豫添加其他版本依赖。

【讨论】:

非常感谢。但是,复制这个确切的代码仍然会产生 ``` ValueError:exponential window requires tau ``` 很奇怪。这 3 行代码对我有用。你使用的是哪个版本的 pandas 和 numpy? 我的熊猫是 1.1.3 我使用了 pandas='0.24.2',在检查了 1.1.3 版本后,我可以声称该解决方案取决于版本。【参考方案2】:

从 Stepan 提供的链接中找到答案: Tau 必须在函数调用中传递,即

df.rolling(window=(3), win_type='exponential').mean(tau=10)

【讨论】:

以上是关于在熊猫滚动中应用自定义窗口功能的主要内容,如果未能解决你的问题,请参考以下文章

如何将自定义函数应用于每行的熊猫数据框[重复]

pandas使用rolling函数计算dataframe指定数据列特定窗口下的滚动均值(rolling mean)自定义指定滚动窗口的大小(window size)

具有滚动功能的自定义 UITabBarController

pandas使用rolling函数计算dataframe指定数据列特定窗口下的滚动加和值(rolling sum)自定义指定滚动窗口的大小(window size)

pandas使用rolling函数计算dataframe指定数据列特定窗口下的滚动中位数(rolling median)自定义指定滚动窗口的大小(window size)

pandas使用rolling函数计算dataframe指定数据列特定窗口下的滚动最小值(rolling minimum)自定义指定滚动窗口的大小(window size)