Python Pandas滚动功能


问题内容

我不确定我是否了解min_periodsPandasrolling函数中的参数:为什么它必须小于window参数?我想使用十个值的窗口来计算(例如)滚动最大值减去滚动最小值,但是我想在开始计算之前等待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()

有没有更有效的方法?


问题答案:

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

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

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

从文档中

min_periods:int,默认值无。窗口中具有值的最小观察数(否则结果为NA)。