Pandas滚动应用功能到整个窗口数据帧

2024-04-18 04:13:33 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

^{pr2}$

使用一些函数应用于整个窗口:

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关键字来表示rolling,也尝试过使用raw关键字来表示{},但是没有成功。其他方法(agg, transform)似乎也不能提供。在

当然,我可以理解列表。只是觉得有更简单/更干净的方法。在


Tags: columns方法函数答案importdataframepandasdf
1条回答
网友
1楼 · 发布于 2024-04-18 04:13:33

不是用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)

相关问题 更多 >