【问题标题】:Applying lambda function to a pandas rolling window series将 lambda 函数应用于熊猫滚动窗口系列
【发布时间】:2018-02-09 22:51:53
【问题描述】:

我有一个函数,它接受一个数组和一个值,然后返回一个值。我想以滚动方式将其应用于我的系列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)

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

【问题讨论】:

  • rolling_window.apply(lambda x: ....)

标签: python pandas series rolling-computation


【解决方案1】:

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-03-30
    • 2021-07-21
    • 2021-05-26
    • 2020-04-21
    • 2021-03-30
    • 1970-01-01
    • 2018-07-10
    • 2014-08-11
    • 1970-01-01
    相关资源
    最近更新 更多