2017-05-22 6 views
0

私は、次の構造(約100万行)でパンダのデータフレームを持っている:私がすれば日時インデックスを使用すると、Pandasでgroupbyが適用されますか?

Date  Value ID 
'1/1/17' 500 1 
'1/2/17' 550 1 
'1/4/17' 600 2 

def get_coeff_var(group): 
    group['coeff_var'] = group['Value'].std()/group['Value'].mean() 
    return group 

df = df.groupby(['ID']).apply(lambda x: get_coeff_var(x)) 

それは非常に迅速に完了します。

しかし、私は最初の日付にインデックスを設定し、データの最後の月を取得する場合、同じ適用する機能は、時間の巨大な(それが完了するのを、すなわち私も待つことができない)量とります

df = df.set_index('Date') 
df = df.last('1M') 
df = df.groupby(['ID']).apply(lambda x: get_coeff_var(x)) 

何が起こっているのですか?

答えて

1

ほとんどの場合、groupby-applyの中で突然変異するのは悪い考えです。一般的に、それは正確な問題が何であるかはわかりませんが、遅いパスが必要です。

あなたの場合、この変換を行うための慣用的ではるかに高速な方法は次のとおりです。インデックスに関係なく高速にする必要があります。

gb = df.groupby('ID')['Value'] 
df['coeff_var'] = gb.transform('std')/gb.transform('mean') 
関連する問題