2017-07-07 13 views
1

ファンドのようなタプルで複数の関数をパンダローリングウィンドウに適用できますか?Python 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 [「中期」]の上に、同じ機能(qcut_data)の異なる値(項目とインデックス)を返すよ、これは恐ろしく非効率的なとして私を打ちます)。

これらを組み合わせる方法はありますか?3つの値はすべて返されますか?

リストやタプルを呼び出すことはできません。また、.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]) 

は、しかし、あなたはそれに参加する結果フレームをマッサージする必要があります。ラムダの名前を付けたり、適切な機能を付けたりすることもできます。

関連する問題