Python Pandas滚动函数

时间:2016-11-03 23:16:14

标签: python pandas

我不确定我是否理解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()

有更有效的方法吗?

2 个答案:

答案 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个周期窗口。