【问题标题】:Rolling Average in PandasPandas 中的滚动平均值
【发布时间】:2019-06-16 16:51:09
【问题描述】:

我有一个包含 2 列的数据框 - 日期和价格。数据首先按最新日期排序(第一行为 1 月 23 日,第二行为 1 月 22 日,依此类推)。

Date   Price
23 Jan 100
22 Jan 95
21 Jan 90
.
.
.

我想计算这个时间序列数据的 2 天滚动平均价格。我正在使用这个:

df.rolling(2).mean()

它的作用是,它将 NaN 分配给第一行(1 月 23 日),然后将第二行的输出作为 1 月 23 日和 1 月 22 日的价格平均值。这没有用,因为 1 月 22 日的平均值正在使用远期数据(1 月 23 日的价格)。我需要的是 1 月 23 日的移动平均值是 1 月 23 日和 1 月 22 日的平均值。这样 MA 的最后一个值将是 NaN 而不是第一个值。

我不想做的是先用最旧的数据排序,计算然后再使用。

pct_change() 也有同样的问题。但是, pct_change(-1) 解决了这个问题。但是滚动不接受负值作为输入。请建议解决此问题的方法。谢谢。

【问题讨论】:

  • 为什么不希望数据按时间顺序(升序)排序?有什么特别的原因吗?
  • 我一直在用 excel 开发这些系统,现在将它们转移到 python 以便于开发。我习惯于首先看到排序为最新日期的值。无论如何,我认为 python 将有一些方法来处理这个问题。只是想检查一下。无论如何,更改排序将是最后的手段。

标签: python pandas moving-average rolling-average


【解决方案1】:

由于您不想排序,这里有一种解决方法。您可以反转您的数据框,采用滚动平均值,然后再次反转它。

df[::-1].rolling(window=2).mean()[::-1]

输出:

        Price
23 Jan  97.5
22 Jan  92.5
21 Jan  NaN

【讨论】:

  • 谢谢。这完全符合目的。旁注 - 你在 python 中使用大量时间序列数据吗?使用按时间升序的数据是一种惯例吗?这对应用内置函数有帮助吗?
  • 我处理大量面板数据(想想横截面和时间序列放在一起)。是的,通常数据将按时间升序排序,但这并不意味着您必须这样做。大多数 pandas 函数都适用于按升序或降序排列的数据。
猜你喜欢
  • 1970-01-01
  • 2016-04-09
  • 1970-01-01
  • 2019-01-22
  • 2018-05-08
  • 1970-01-01
  • 1970-01-01
  • 2023-02-08
相关资源
最近更新 更多