【问题标题】:How do I daily reset pandas time series cumsum?我如何每天重置熊猫时间序列cumsum?
【发布时间】:2016-07-15 11:08:57
【问题描述】:

我用 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

然后我使用以下代码在以下条件下累积“数量”列;如果“发起者”= B/S/NaN,则数量为正/负/不计数。

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

然后我有一个包含累积数量的新列。但是,我也想每天重新设置/重新开始。新的一天,新的积累。

如何使用 pandas 做到这一点?

【问题讨论】:

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


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-31
      • 2019-07-22
      • 1970-01-01
      • 2017-02-20
      • 2014-07-24
      • 2022-12-05
      • 2013-04-29
      • 1970-01-01
      相关资源
      最近更新 更多