2017-08-01 9 views
2

私は次の操作を行うために探しています:すべてのを取り、得られた構造の中で(時間単位与えられた)複数のローリング機能をローリングオブジェクトによって複数のパンダグループの列に適用しますか?

  • を、グループごとに

    1. グループのデータフレーム

    2. をタイムウィンドウを生成複数のローリング・サマリー統計関数を適用して、結果に各グループ/時間ウィンドウの組み合わせのサマリー統計が含まれるようにします。

      gps_time,name,val_x,val_y 
      2017-07-04 11:20:23.423,bob,0.963,0.201 
      2017-07-04 11:20:24.492,bob,0.964,0.203 
      2017-07-04 11:20:24.499,bob,0.962,0.210 
      2017-07-04 11:20:25.627,sarah,0.893,0.010 
      2017-07-04 11:20:28.627,sarah,0.894,0.012 
      2017-07-04 11:20:29.613,sarah,0.895,0.014 
      2017-07-04 11:20:29.630,larry,-0.423,0.231 
      2017-07-04 11:20:30.423,larry,-0.431,0.22 
      2017-07-04 11:20:30.428,larry,-0.432,0.222 
      

      上記データのための所望の出力、名前によって1秒のウィンドウとグループ化:私はき

      name,gps_time,val_x_mean,val_x_med,val_y_mean,val_y_med 
      bob,2017-07-04 11:20:23.423,0.963,0.963,0.201,0.201 
      bob,2017-07-04 11:20:24.492,0.963,0.963,0.2065,0.2065 
      sarah,2017-07-04 11:20:25.627,0.893,0.89,0.010,0.010 
      sarah,2017-07-04 11:20:28.627,0.8945,0.8945,0.013,0.013 
      larry,2017-07-04 11:20:30.423,-0.4287,-0.431,0.336,0.222 
      

      ここ

    は、例えばデータセットでありますリストの理解を使用してデータフレームを生成しようとしましたが、プロセスは非常に遅く、すべての列に対して呼び出す必要があります。

  • 答えて

    5

    のはpd.Groupergroupbyを使用してみましょう:

    df_out = df.groupby([pd.Grouper(freq='S', key='gps_time'),'name']).agg(['mean','median']) 
    df_out.columns = df_out.columns.map('_'.join) 
    df_out.reset_index() 
    

    は出力:

       gps_time name val_x_mean val_x_median val_y_mean \ 
    0 2017-07-04 11:20:23 bob  0.9630  0.9630  0.2010 
    1 2017-07-04 11:20:24 bob  0.9630  0.9630  0.2065 
    2 2017-07-04 11:20:25 sarah  0.8930  0.8930  0.0100 
    3 2017-07-04 11:20:28 sarah  0.8940  0.8940  0.0120 
    4 2017-07-04 11:20:29 larry  -0.4230  -0.4230  0.2310 
    5 2017-07-04 11:20:29 sarah  0.8950  0.8950  0.0140 
    6 2017-07-04 11:20:30 larry  -0.4315  -0.4315  0.2210 
    
        val_y_median 
    0  0.2010 
    1  0.2065 
    2  0.0100 
    3  0.0120 
    4  0.2310 
    5  0.0140 
    6  0.2210 
    
    +0

    これは完璧です!どのようにして、特定の間隔で重複率を指定できますか? –

    +0

    オーバーラップ率はどのように計算するのですか? –

    +0

    50%の重複は、与えられた2つの間隔を意味し、k番目の間隔の最後の50%は(k + 1)番目の間隔の最初の50%です。例えば、リスト[1,2,3,4,5,6,7,8]がある場合、4つの観測のウィンドウと50%の重なりを持つ区間を生成すると[1,2,3,4]となり、 、[3、4、5、6]、[5,6,7,8]。 –

    関連する問題