2

我有一个函数,它接受一个数组和一个值,并返回一个值。我想将它滚动应用到我的系列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 is the first positional param of choice(), so refer to 'rolling_window'] 必须是一维或整数

另一种尝试:

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

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

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

4

1 回答 1

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.

于 2017-08-31T22:02:17.667 回答