我如何每天重置熊猫时间系列cumsum?
问题描述:
我进口一些与时间序列数据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
然后我用下面的代码来积累符合下列条件的“量”列;如果'发起人'= B/S/NaN,那么数量是正数/负数/不计数。
instr['multipl'] = np.where(instr.initiator == 'B', 1, -1) * instr.initiator.notnull()
instr['acc_qnty'] = (instr.quantity * instr.multipl).cumsum()
然后我有累计数量的新列。不过,我也想每天重置/重新开始。新的一天,新的积累。
我怎么用熊猫做到这一点?
答
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
工程就像一个魅力,非常感谢! – cJc
@cJc,欢迎您! :) – MaxU