Python Pandas 滚动窗口应用多个 lambda 函数

Ral*_*lph 4 python lambda pandas

是否可以以类似元组的方式将多个函数应用于 Pandas 滚动窗口?

我目前正在创建通过滚动窗口上的价格系列计数返回最大 bin 的计数、下限和上限。

def qcut_data(x):
    data_out = pd.qcut(x, q = 10, duplicates = 'drop').value_counts().nlargest(1)
    return data_out


df_m['hist_count'] = df_m['mid'].rolling(window = rolling_window).apply(lambda x: qcut_data(x).item())
df_m['hist_bottom'] = df_m['mid'].rolling(window = rolling_window).apply(lambda x: qcut_data(x).index[0].left)
df_m['hist_top'] = df_m['mid'].rolling(window = rolling_window).apply(lambda x: qcut_data(x).index[0].right)
Run Code Online (Sandbox Code Playgroud)

这让我感到非常低效,因为我只是在同一系列的同一滚动窗口 (df_m['mid']) 上返回同一函数 (qcut_data) 的不同值(项目和索引)。

有没有办法将这些组合起来,以便可以返回所有三个值?

我无法在 .apply() 方法中调用列表、元组或集合,还有其他方法吗?

Ale*_*lex 6

您可能可以使用更灵活的聚合来做您想做的事情......

df_m['mid'].rolling(window=rolling_window).agg([lambda x: qcut_data(x).item(),
                                                lambda x: qcut_data(x).index[0].left,
                                                lambda x: qcut_data(x).index[0].right])
Run Code Online (Sandbox Code Playgroud)

但是您需要按摩生成的框架才能加入它。您还可以命名 lambdas 或使它们成为正确的函数。