根据连续时间进行计算

时间:2021-07-08 07:29:02

标签: python pandas numpy

我有一个数据框 df,我想在其中添加一个计算字段列,并在每个连续日期期间从该数字中减去。

数据

base    id  date    con retro   finalc  sp
100     aa  q122    5   1       4       159
100     aa  q222    10  1       9       50
50      bb  q122    10  0       10      100
50      bb  q222    5   1       4       70
100     aa  q322    5   1       4       158

需要

base    id  date    con retro   finalc  sp  start
100     aa  q122    5   1       4       159 96
100     aa  q222    10  1       9       50  87
50      bb  q122    10  0       10      100 40
50      bb  q222    5   1       4       70  36
100     aa  q322    5   1       4       158 83

我希望从“base”列中减去“finalc”列,从而得到“start”列 例如第一个条目,'base' 100 - 'finalc' 4 = 'start' 96

我遇到的问题是下一步。给定 id 的连续日期,我想继续从开始列中减去 finalc 值。

例如,id 'aa'的'start'为96,但是在下一个时间段q222,需要减去'finalc'的值由此,给出 87 等值。

初始开始从每个 id 的最早日期开始 对于 aa: 100(base) - 4(finalc)
96-9 = 87 87-4 = 83

df['start']=df.eval("base-finalc")

我只有第一部分的解决方案。任何建议表示赞赏。

1 个答案:

答案 0 :(得分:1)

GroupBy.cumsum 与减法一起使用:

df['start'] = df['base'].sub(df.groupby('id')['finalc'].cumsum())
print (df)
   base  id  date  con  retro  finalc   sp  start
0   100  aa  q122    5      1       4  159     96
1   100  aa  q222   10      1       9   50     87
2    50  bb  q122   10      0      10  100     40
3    50  bb  q222    5      1       4   70     36
4   100  aa  q322    5      1       4  158     83