熊猫滚动将功能应用于整个窗口数据框

时间:2019-05-05 09:33:08

标签: python pandas apply rolling-computation

我想将功能应用于滚动窗口。我在这里看到的所有答案都集中在应用于单个行/列,但是我想将我的函数应用于整个窗口。这是一个简化的示例:

import pandas as pd
data = [ [1,2], [3,4], [3,4], [6,6], [9,1], [11,2] ]
df = pd.DataFrame(columns=list('AB'), data=data)

这是df

    A   B
0   1   2
1   3   4
2   3   4
3   6   6
4   9   1
5   11  2

采取一些功能以应用于整个窗口:

df.rolling(3).apply(lambda x: x.shape)

在这个例子中,我想得到类似的东西:

    some_name   
0   NA  
1   NA  
2   (3,2)   
3   (3,2)   
4   (3,2)   
5   (3,2)   

当然,该形状用作示例,显示f将整个窗口视为计算对象,而不仅仅是行/列。我尝试将axis的{​​{1}}关键字和rolling的{​​{1}}关键字一起使用,但是都没有成功。其他方法(raw)似乎都不提供。

当然,我可以通过列表理解来做到这一点。只是认为有一种更简单/更清洁的方法。

1 个答案:

答案 0 :(得分:1)

不与pd.DataFrame.rolling ....一起使用,该函数将迭代地应用于列,并接受一系列浮点数/ NaN,然后​​逐个返回一系列浮点数/ NaN。我想您凭直觉会更好。...

def rolling_pipe(dataframe, window, fctn):
    return pd.Series([dataframe.iloc[i-window: i].pipe(fctn) 
                      if i >= window else None 
                      for i in range(1, len(dataframe)+1)],
                     index = dataframe.index) 

df.pipe(rolling_pipe, 3, lambda x: x.shape)