2017-08-31 77 views
0

我有一个函数,它接受一个数组和一个值,并返回一个值。我想滚动地将它应用到我的系列s,所以数组始终是滚动​​窗口。这是我尝试过的一个最简单的例子(失败),使用np.random.choice代替我的真实功能。我发现了很多用于查找滚动方法和其他内置函数的示例,但无法让它适用于我的任意lambda函数。将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 is the first positional param of choice(), so refers to 'rolling_window'] must be 1-dimensional or an integer

的另一种尝试:

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

TypeError: choice() takes at least 1 positional argument (0 given)

...我如何申请一个任意的lambda函数(以一个数组和值)在我的系列,在每个滚动数组窗口中的每个值我的系列?

+0

'rolling_window.apply(lambda x:....)' –

回答

3

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