2016-07-27 14 views
0

datetimeをメインインデックスとして使用しますが、そこに重複がたくさんあります。私が望むのは、秒の各グループ内に "カウンタ"として機能する人工的なミリ秒を追加することです。例えばミリ秒を追加してtimeindexを重複除外します

- のように、元のデータフレームが見えます:私は使用することができることを、私はGROUPBY機能を再生しようとした

2016-06-28 13:00:10 
2016-06-28 13:00:10.001000 
2016-06-28 13:00:10.002000 
2016-06-28 13:00:10.003000 
2016-06-28 13:00:10.004000 
2016-06-28 13:00:10.005000 
2016-06-28 13:00:10.006000 

:私の目標はにduplicit行を変更することです

      Bid BidVol 
2016-06-27 13:00:10 4183.50  0 
2016-06-27 13:00:10 4183.50  0 
2016-06-27 13:00:10 4183.50  0 
2016-06-28 13:00:10 4249.25  1 
2016-06-28 13:00:10 4249.25  1 
2016-06-28 13:00:10 4249.00  1 
2016-06-28 13:00:10 4248.75  1 
2016-06-28 13:00:10 4248.75  2 
2016-06-28 13:00:10 4248.75  1 
2016-06-28 13:00:10 4248.75  2 
2016-06-28 13:00:12 4248.50  0 
2016-06-28 13:00:12 4248.50  0 
2016-06-29 13:00:12 4353.75  0 
2016-06-29 13:00:12 4353.75  0 
2016-06-29 13:00:12 4353.75  0 
2016-06-29 13:00:12 4354.00  1 
2016-06-29 13:00:12 4354.00  1 
2016-06-29 13:00:12 4353.75  0 
2016-06-29 13:00:12 4354.00  1 
2016-06-29 13:00:12 4354.00  1 
2016-06-29 13:00:12 4354.00  1 
2016-06-29 13:00:12 4354.00  1 
2016-06-30 13:00:10 4394.00  0 
2016-06-30 13:00:11 4394.25  1 
2016-06-30 13:00:11 4394.00  0 

ループでミリ秒を印刷します。

for name, group in test.groupby(test.index): 
    print ('------') 
    i=0 
    for idx, values in group.iterrows(): 
     print (idx+pd.Timedelta(milliseconds=i)) 
     i+=1 

ただし、インデックスを変更する方法はわかりません。私が必要とする結果を得る最も効果的な方法は?特に効率性を重視しています(主なデータセットは非常に大きい)。

答えて

2

あなたはそれがto_timedelta変換し、msを作成するためのcumcountを使用してindexに追加することができます。

a = df.groupby(level=0).cumcount() 
print (a) 
2016-06-27 13:00:10 0 
2016-06-27 13:00:10 1 
2016-06-27 13:00:10 2 
2016-06-28 13:00:10 0 
2016-06-28 13:00:10 1 
2016-06-28 13:00:10 2 
2016-06-28 13:00:10 3 
2016-06-28 13:00:10 4 
2016-06-28 13:00:10 5 
2016-06-28 13:00:10 6 
2016-06-28 13:00:12 0 
2016-06-28 13:00:12 1 
2016-06-29 13:00:12 0 
2016-06-29 13:00:12 1 
2016-06-29 13:00:12 2 
2016-06-29 13:00:12 3 
2016-06-29 13:00:12 4 
2016-06-29 13:00:12 5 
2016-06-29 13:00:12 6 
2016-06-29 13:00:12 7 
2016-06-29 13:00:12 8 
2016-06-29 13:00:12 9 
2016-06-30 13:00:10 0 
2016-06-30 13:00:11 0 
2016-06-30 13:00:11 1 
dtype: int64 
df.index = df.index + pd.to_timedelta(a, unit='ms') 
print (df) 
          Bid BidVol 
2016-06-27 13:00:10.000 4183.50  0 
2016-06-27 13:00:10.001 4183.50  0 
2016-06-27 13:00:10.002 4183.50  0 
2016-06-28 13:00:10.000 4249.25  1 
2016-06-28 13:00:10.001 4249.25  1 
2016-06-28 13:00:10.002 4249.00  1 
2016-06-28 13:00:10.003 4248.75  1 
2016-06-28 13:00:10.004 4248.75  2 
2016-06-28 13:00:10.005 4248.75  1 
2016-06-28 13:00:10.006 4248.75  2 
2016-06-28 13:00:12.000 4248.50  0 
2016-06-28 13:00:12.001 4248.50  0 
2016-06-29 13:00:12.000 4353.75  0 
2016-06-29 13:00:12.001 4353.75  0 
2016-06-29 13:00:12.002 4353.75  0 
2016-06-29 13:00:12.003 4354.00  1 
2016-06-29 13:00:12.004 4354.00  1 
2016-06-29 13:00:12.005 4353.75  0 
2016-06-29 13:00:12.006 4354.00  1 
2016-06-29 13:00:12.007 4354.00  1 
2016-06-29 13:00:12.008 4354.00  1 
2016-06-29 13:00:12.009 4354.00  1 
2016-06-30 13:00:10.000 4394.00  0 
2016-06-30 13:00:11.000 4394.25  1 
2016-06-30 13:00:11.001 4394.00  0 
関連する問題