将lambda函数应用于pandas滚动窗口系列

时间:2017-08-31 21:56:25

标签: python pandas series rolling-computation

我有一个函数,它接受一个数组和一个值,并返回一个值。我想以滚动方式将它应用于我的系列s,因此数组始终是滚动​​窗口。这是我尝试(失败)的最小例子,使用np.random.choice代替我的真实功能。我找到了许多用于查找滚动方法和其他内置函数的示例,但无法使其适用于我的任意lambda函数。

s = pd.Series([1,2,3,4,5,6,7,8,9])
rolling_window = s.rolling(3)

首次尝试:

new_values = s.apply(lambda x: np.random.choice(rolling_window, size=1)) 
  

ValueError:a [a是choice()的第一个位置参数,因此指的是' rolling_window']必须是1维或整数

另一次尝试:

new_values = rolling_window.apply(lambda x: np.random.choice(size=1))
  

TypeError:choice()至少需要1个位置参数(给定0)

...如何在我的系列中的每个滚动阵列窗口上的系列中的每个值上应用任意lambda函数(获取数组和值)?

1 个答案:

答案 0 :(得分:4)

IIUC,如果你想做的只是在窗口上应用一个功能,你的第二次尝试就会接近:

rolling_window.apply(lambda x: np.random.choice(x, size=1))

但是,你可以绕过lambda这样的使用:

rolling_window.apply(np.random.choice, kwargs={'size' : 1})

0    NaN
1    NaN
2    1.0
3    4.0
4    4.0
5    5.0
6    7.0
7    7.0
8    8.0
dtype: float64

您传递的函数的其他参数位于argskwargs