将 lambda 函数应用于 pandas 滚动 window 系列
Applying lambda function to a pandas rolling window series
我有一个函数接受一个数组和一个值,returns 一个值。我想在滚动的基础上将它应用到我的系列 s
,因此数组始终是滚动的 window。这是我尝试(未成功)的最小示例,使用 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 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)
...如何在系列中的每个值、系列中的每个滚动数组 window 上应用任意 lambda 函数(采用数组和值)?
IIUC,如果你只想在 window 上应用一个函数,你的第二次尝试就接近了:
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
您传递的函数的其他参数进入 args
和 kwargs
。
我有一个函数接受一个数组和一个值,returns 一个值。我想在滚动的基础上将它应用到我的系列 s
,因此数组始终是滚动的 window。这是我尝试(未成功)的最小示例,使用 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 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)
...如何在系列中的每个值、系列中的每个滚动数组 window 上应用任意 lambda 函数(采用数组和值)?
IIUC,如果你只想在 window 上应用一个函数,你的第二次尝试就接近了:
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
您传递的函数的其他参数进入 args
和 kwargs
。