【问题标题】:Rolling first derivative and second derivative in pandas在熊猫中滚动一阶导数和二阶导数
【发布时间】:2021-04-01 10:09:12
【问题描述】:

我正在尝试创建一个函数来查找 Pandas 中的滚动导数(一阶和二阶)。 我觉得df.diff()挺方便的。

我想找到滚动窗口值 = 40 的导数。

对于一阶导数,

noise = np.random.normal(size=int(1e4))
noise=pd.DataFrame(noise)
first_derivative=noise.diff(periods=40)

如果我将它用于二阶导数是否正确?

second_derivative=noise.diff(periods=40).diff()

我很困惑,但如果我再次将periods=40 放在第二个.diff() 中,那么它将是 40*40 滚动窗口(对于二阶导数)。 谢谢!

【问题讨论】:

  • 你的预期输出是什么
  • 我相信您将微分(微分运算)与元素的差异混淆了。 Pandas diff() 方法计算元素的离散差异,您可以查看文档:pandas.pydata.org/docs/reference/api/pandas.DataFrame.diff.html
  • diff 没有给你导数,它只是与上一行的区别。 periods 只是在计算差异之前控制数据移动了多少,所以它并不是你想的那样的窗口大小

标签: python pandas derivative


【解决方案1】:

Pandas 不是数学库,它的diff() 运算只是取元素之间的离散差异,而不是导数。

为了获得导数,我建议您使用SymPy,这是一个用于符号数学的不错的 Python 库。详情请查看documentation

例子:

from sympy import *

>> diff(cos(x), x)
-sin(x)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-30
    • 2020-03-05
    • 1970-01-01
    • 2021-04-17
    • 1970-01-01
    相关资源
    最近更新 更多