我不确定我是否理解Pandas min_periods
函数中的参数rolling
:为什么它必须小于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()
有更有效的方法吗?
答案 0 :(得分:4)
min_period = n
选项只是意味着您至少需要n
次有效观察来计算滚动统计数据。
示例,假设min_period = 5
并且您在最后rolling mean
次观察中得到10
。现在,如果最后6
次观察的10
实际上缺少值,会发生什么?然后,鉴于4<5
(实际上,这里只有4个非缺失值,并且您需要至少5个非缺失的观测值),滚动平均值也将丢失。
这是一个非常非常重要的选择。
来自文档
min_periods:int,default无最小观察数 窗口需要有一个值(否则结果是NA)。
答案 1 :(得分:1)
min period参数只是将函数应用于比滚动窗口更小的样本的一种方法。因此,假设您希望窗口的滚动最小值为10,通过5的最小周期参数将允许计算前5个数据的最小值,然后是前6个,然后是7,8,9,最后是10个。现在,大熊猫可以开始滚动他的10个数据点窗口,因为它有10个以上的数据点,它将保持10个周期窗口。