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

耶尔·道恩

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

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将整个窗口视为计算对象,而不仅仅是行/列。我尝试使用axisfor关键字rolling以及rawfor关键字,apply但没有成功。其他方法(agg, transform)似乎也无法实现。

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

Ouyang Ze

不适用于pd.DataFrame.rolling....将该函数迭代地应用于列,并接受一系列的floats / NaN,然后​​一次返回一系列的floats / 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)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章