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

时间:2017-07-07 01:31:32

标签: python pandas lambda

是否可以将多个函数应用于像时尚这样的元组中的pandas滚动窗口?

我正在创建通过滚动窗口中的价格序列计数返回最大二进制数的计数,下限和上限。

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)

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

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

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

1 个答案:

答案 0 :(得分:1)

你可以用aggregate做你想要的更灵活的事情......

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])

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