Python Pandas滚动功能
问题内容:
我不确定我是否了解min_periods
Pandasrolling
函数中的参数:为什么它必须小于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)。