我不确定我是否理解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()
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
ValueError: Invalid min_periods size 20 greater than window 10
Run Code Online (Sandbox Code Playgroud)
我认为这min_periods是为了告诉函数在开始计算之前必须等待多少个值。文档说:
min_periods : int, 默认无
具有值所需的窗口中最小观察数(否则结果为 NA)
我没有注意这里的“窗口内”细节......那么实现我想要实现的目标的最有效方法是什么?我应该做这样的事情:
roll = df.loc[20:,'A'].rolling(window=10)
df['C'] = roll.max() - roll.min()
Run Code Online (Sandbox Code Playgroud)
有没有更有效的方法?
该min_period = n选项仅意味着您至少需要n有效的观察来计算您的滚动统计数据。
例如,假设min_period = 5您有一个rolling mean过去的10观察结果。现在,如果6最后的10观察值实际上是缺失值,会发生什么?然后,鉴于4<5(实际上,这里只有 4 个非缺失值,您需要至少 5 个非缺失观测值),滚动均值也将缺失。
这是一个非常非常重要的选择。
从文档
min_periods : int, default None 窗口中具有值所需的最小观察数(否则结果为 NA)。
| 归档时间: |
|
| 查看次数: |
5225 次 |
| 最近记录: |