2016-07-15 5 views
0

Iはpd.read_csvと、いくつかの時系列データをインポートし、それは次のようになりますパンダの時系列cumsumを毎日リセットするにはどうしたらいいですか?

     price quantity initiator 
time           
2016-07-13 16:19:31 6.20  8000   B 
2016-07-13 16:19:45 6.19  5176   S 
2016-07-13 16:25:08 6.24  15000   NaN 
2016-07-13 16:25:08 6.24  2847   S 
2016-07-13 16:25:08 6.24  39829   B 
2016-07-14 09:25:08 6.35  2398   B 
2016-07-14 09:25:08 6.30  1844   NaN 
2016-07-14 09:25:08 6.25  9538   S 
2016-07-14 09:25:08 6.15  459   B 
2016-07-14 09:25:08 6.25  1082   B 

Iは、次の条件に「数量」列を蓄積するために、次のコードを使用します。 'initiator' = B/S/NaNの場合、数量は正数/負数/カウントされません。

instr['multipl'] = np.where(instr.initiator == 'B', 1, -1) * instr.initiator.notnull() 
instr['acc_qnty'] = (instr.quantity * instr.multipl).cumsum() 

次に、累計数量の新しい列があります。しかし、私はまた、毎日リセット/開始したいと思います。新しい日、新しい蓄積。

パンダを使ってどうすればいいですか?

答えて

1

IIUCあなたは、このようにそれを行うことができます。魔法のように

df['new'] = np.where(df.initiator == 'B', 1, -1) * df.initiator.notnull() * df.quantity 

df['result'] = df.groupby(df.index.date)['new'].cumsum() 

In [25]: df 
Out[25]: 
        price quantity initiator multipl new result 
2016-07-13 16:19:31 6.20  8000   B  1 8000 8000 
2016-07-13 16:19:45 6.19  5176   S  -1 -5176 2824 
2016-07-13 16:25:08 6.24  15000  NaN  0  0 2824 
2016-07-13 16:25:08 6.24  2847   S  -1 -2847  -23 
2016-07-13 16:25:08 6.24  39829   B  1 39829 39806 
2016-07-14 09:25:08 6.35  2398   B  1 2398 2398 
2016-07-14 09:25:08 6.30  1844  NaN  0  0 2398 
2016-07-14 09:25:08 6.25  9538   S  -1 -9538 -7140 
2016-07-14 09:25:08 6.15  459   B  1 459 -6681 
2016-07-14 09:25:08 6.25  1082   B  1 1082 -5599 
+0

作品、おかげでたくさん! – cJc

+0

@cJc、あなたは大歓迎です! :) – MaxU

関連する問題