2017-07-07 66 views
1

是否有可能將多個函數應用於像tuner這樣的元組中的pandas滾動窗口?Python Pandas滾動窗口應用多個lambda函數

我目前正在創建通過滾動窗口中的價格系列的計數來返回最大倉的數量,下限和上限。

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) 

這令我很沒效率的,因爲我剛剛返回相同的功能(qcut_data)的不同值(項目和索引),在同一系列的相同的​​滾動窗口(df_m [「中」] )。

有沒有一種方法可以將這三個值組合起來?

我不能在.apply()方法中調用列表,元組或集合,有沒有另一種方法?

回答

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

但你需要按摩所產生的幀加入。你也可以命名lambda或使它們適合funcs。