以下のように、移動平均などを計算しようとしたらすごく時間がかかっていたので速くしようとした時の話。
agg = sales[SALES_COUNT].astype("float32").shift(shift).rolling(window) \ .agg(["mean", "max", "min", "std", lambda x: x.mode()[0]]) \ .reset_index().set_index("seq_idx") #2.3秒かかった
↑を↓のように書き換え、最頻値を計算しないようにしたら150倍ぐらい速くなった(!)
agg = sales[SALES_COUNT].astype("float32").shift(shift).rolling(window) \ .agg(["mean", "max", "min", "std"]) \ .reset_index().set_index("seq_idx") #0.015秒かかった
カスタム関数を使うと遅くなると言うが、ここまで違うとは。。 最頻値が必要な場合はDataFrameからndarrayを取り出してnumpyで処理した方が良いかも。