我想将功能应用于滚动窗口。我在这里看到的所有答案都集中在应用于单个行/列,但是我想将我的函数应用于整个窗口。这是一个简化的示例:
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
for的关键字rolling
以及raw
for的关键字,apply
但没有成功。其他方法(agg, transform
)似乎也无法实现。
当然,我可以通过列表理解来做到这一点。只是认为有一种更简单/更干净的方法可以做到这一点。
不适用于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] 删除。
我来说两句