我如何每天重置大熊猫时间序列cumsum?

时间:2016-07-15 11:08:57

标签: python-3.x pandas time-series

我使用pd.read_csv导入一些时间序列数据,它看起来像这样:

                     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

然后我使用以下代码来累积'quantity'列,其中包含以下条件;如果'发起人'= B / S / NaN则数量为正/负/不计。

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

然后我有一个新的列,其中包含累计数量。但是,我还希望每天重置/重启。新的一天,新的积累。

如何使用熊猫来做到这一点?

1 个答案:

答案 0 :(得分: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