【问题标题】:Python Pandas rolling functionsPython Pandas 滚动函数
【发布时间】:2016-11-04 08:00:54
【问题描述】:

我不确定我是否理解 Pandas rolling 函数中的参数 min_periods:为什么它必须小于 window 参数? 我想计算(例如)滚动最大值减去滚动最小值,窗口为 10 个值,但我想在开始计算之前等待 20 个值:

In[1]:  import pandas as pd
In[2]:  import numpy as np
In[3]:  df = pd.DataFrame(columns=['A','B'], data=np.random.randint(low=0,high=100,size=(100,2)))
In[4]:  roll = df['A'].rolling(window=10, min_periods=20)
In[5]:  df['C'] = roll.max() - roll.min()

In[6]:  roll
Out[6]: Rolling [window=10,min_periods=20,center=False,axis=0]

In[7]:  df['C'] = roll.max()-roll.min()

我收到以下错误:

ValueError: Invalid min_periods size 20 greater than window 10

我认为min_periods 是用来告诉函数在开始计算之前必须等待多少个值。文档说:

min_periods : int,默认无

具有值所需的窗口中的最小观察次数 (否则结果为 NA)

我没有注意这里的“窗口内”细节...... 那么实现我想要实现的目标的最有效方法是什么?我应该这样做:

roll = df.loc[20:,'A'].rolling(window=10)
df['C'] = roll.max() - roll.min()

有没有更有效的方法?

【问题讨论】:

  • 如果您的窗口宽度为 10 个观察值,但您需要 20 个观察值来进行计算,您认为您可以完成多少个计算?
  • 你的句子`但我想在开始计算之前等待大概 20 个值:` 不清楚。我认为您对如何计算滚动计算感到困惑。
  • 我承认我的问题不是很清楚。例如,我想计算一个时间序列索引从 2016 年 1 月 1 日开始的数据集的滚动平均值。我想计算 2016 年除 1 月之外的滚动平均值。

标签: python pandas


【解决方案1】:

min_period = n 选项仅表示您至少需要n 有效观察值来计算滚动统计信息。

例如,假设 min_period = 5 并且您在最后的 10 观察结果中有一个 rolling mean。现在,如果最后一个10 观察中的6 实际上是缺失值,会发生什么?然后,考虑到4<5(实际上,这里只有 4 个非缺失值,并且您需要至少 5 个非缺失观测值),滚动平均值也会缺失。

这是一个非常非常重要的选择。

来自文档

min_periods : int, default 无 最小观察次数 窗口需要有一个值(否则结果为 NA)。

【讨论】:

    【解决方案2】:

    最小周期参数只是一种将函数应用于比滚动窗口更小的样本的方法。所以假设你想要 10 的窗口的滚动最小值,传递 5 的 min period 参数将允许计算前 5 个数据的最小值,然后是前 6 个,然后是 7、8、9,最后是 10。现在熊猫可以开始滚动他的 10 个数据点窗口,因为它有超过 10 个数据点,它会保持 10 个周期窗口。

    【讨论】:

      猜你喜欢
      • 2021-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-03
      相关资源
      最近更新 更多