2017-11-26 5 views
3

誰でも、私が思っていた以下の2つのやり方、なぜなら同じことをpandas.dataframe groupbyのという方法で、iPythonのMagic%timeitに従った別の時間で完了する理由を理解できますか?pandas.dataframe.groupbyが最初に変数に割り当てられた方が速いのはなぜですか?

%timeit somedf.groupby('someBoolColumn')['someBoolColumn'].count() 
484 µs ± 9.52 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each) 

%%timeit grp = somedf.groupby('someBoolColumn') 
grp['someBoolColumn'].count() 
146 µs ± 1.47 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each) 

somedfは、7200行24列を有する。

変数GRPにオブジェクトを割り当てる2つのライナが最初> 3
倍速く、また、なぜ私は

    1. を見つけることができません。

    2. これがgroupbyメソッドに固有の場合は パンダやPythonの場合はさらに一般的なものです(例: 可変アサイメント)。このように任意の啓発のための

    多くのおかげで、本当に私はパラメータの多くの異なる組み合わせで繰り返し、処理したいのですが、多くの非常に大きなデータフレームで役立つだろう。

  • +0

    Hey Jon、あなたは[この編集](https://stackoverflow.com/review/suggested-edits/18149782)でしたが、回答を編集する代わりにできることを尋ねました。これらの制限は、コメントは理由があります。[ここでは、これらの制限が存在し、代わりにできることを読むことができます](https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation -to-comment-to-comment-what-c​​an-i-do-代わりに)良い一日を! – jmattheis

    答えて

    5

    Ipythonの%timeit docs状態:セルモードで

    文の最初の行には、セットアップコードとして使用される( 実行が、タイミングではない)と、セルの本体は計時されます。セル本体には、セットアップコードで作成された任意の変数 があります。

    (私の強調)。 cell modeは、ダブルパーセント形式%%timeitを使用してトリガーされます。 IPythonのプリントは、あなたがIPythonプロンプトで%magicを入力ドキュメントの宣伝文句もあります:numpyののSVDルーチンの実行を時間を計るます

    %%timeit x = numpy.random.randn((100, 100)) 
    numpy.linalg.svd(x) 
    

    はの一環として、X の割り当てを実行しています、セットアップ段階ではありません。


    したがって、

    %%timeit grp = somedf.groupby('someBoolColumn') 
    grp['someBoolColumn'].count() 
    

    代入grp = somedf.groupby('someBoolColumn')grp['someBoolColumn'].count()タイミングではなく、。

    %%timeit 
    grp = somedf.groupby('someBoolColumn') 
    grp['someBoolColumn'].count() 
    

    セルが終了する:

    は単に%%timeit後の最初の行を空白のままにしておき、時間に両方のステートメントを%%timeitを使用するには、次のセットアップラインなし%%timeitを使用する方法


    と入力してを2回入力します。

    +0

    ありがとう@unutbu。確認:
    '%time grp = somedf.groupby( 'someBoolColumn');ループごとに482μs±7.69μs(平均実行時間は7回、ループはそれぞれ1000回) ' – JonB451

    +0

    @ubuntuに微妙で重要な違いがありますので、もう一度おねがいします。他の人にはもっと便利になるように質問を編集することはできません。timeitはフォーカスではなく、あなたが示していると仮定しています。セットアップラインや何らかのダミーセットアップラインなしでセルモードを使う方法などを追加することができれば、それは私と他の人に役立つだろうと思っており、非常に感謝しています。もしそうでなければ、多くのことは既に評価されています。ありがとう。 – JonB451

    +0

    私はまだ質問を編集することができます。質問の後に「A:iPython%timeit misuse」を追加しました。うまくいけば、できるだけ明確かつ迅速に検索可能で有用なものにするためです。これがStackOverflowのエチケットに反しているかどうか私に教えてください。これは私が尋ねた最初の質問です。 – JonB451

    関連する問題