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

标签 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 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 函数(采用数组和值)?

最佳答案

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 中。

关于python - 将 lambda 函数应用于 pandas 滚动窗口系列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45990648/

相关文章:

python - 使用xlrd读取python中的选定列和所有行

python - 使用 tweepy 从 Twitter 获取热门话题。有更好的方法吗?

python - 重采样时,如果源区间中有一些 NaN 值,则将 NaN 放入结果值中

python - 如何计算列表列中列值的出现次数?

python - 用 Python 中之前出现的数字填充空列

python - 将文本渲染到 kivy Canvas

python - 为什么我的绘图将 x 轴上的日期时间绘制为指数?

python - 在 Pandas 中将 `replace` 与 `isnull` 组合

python - 对列中具有公共(public)值的行使用 meshgrid

javascript - 如何从 highcharts.js 动态更新 pointStart 系列属性?