我有一个数据框 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")
我只有第一部分的解决方案。任何建议表示赞赏。
答案 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