我有一个数据集df,我想在其中执行计算,按两个不同的列进行分组,并创建一个基线,在基线中计算值
数据
id Date ppm pos_diff finalppm finalpos t t_cnt ex ex_cnt
aa Q122 40 3 160 7 50 2 0 0
aa Q222 10 1 150 6 0 0 0 0
bb Q122 -10 -2 510 7 0 0 0 0
bb Q222 10 2 500 5 0 0 50 3
bb Q322 50 8 450 -3 0 0 0 0
bb Q422 50 3 400 -6 20 2 0 0
所需的
id Date ppm pos_diff finalppm finalpos t t_cnt ex ex_cnt final final_cnt
aa Q122 40 3 160 7 50 2 0 0 110 5
aa Q222 10 1 150 6 0 0 0 0 100 4
bb Q122 -10 -2 510 7 0 0 0 0 510 7
bb Q222 10 2 500 5 0 0 50 3 550 8
bb Q322 50 8 450 -3 0 0 0 0 500 0
bb Q422 50 3 400 -6 20 2 0 0 430 -5
逻辑
确保我们按照“id”和“date”列进行分组,我们首先需要对每个新id的第一行执行此计算。这是我们的初始基线
“final'='finalppm'-'t'+'ex'
‘finalcnt’=“finalpos”——‘t_cnt’+‘ex_cnt’
计算出第一个“最终”值后,我们使用该值(示例110)并从中减去“ppm”值以及“t”列值。最后,我们添加“ex”值
‘final’-‘ppm’-‘t’+‘ex’,这将为我们提供下一个‘final’值 (与“final_cnt”的逻辑相同)
做
试图调整这一点以达到预期的输出,但我缺少一些输入。我还在研究。任何建议都是有益的
一位SO成员提出了类似的建议:
df['final'].add(df.groupby('id')['ex'].cumsum())
.sub(df.groupby('id')['t'].cumsum())
逻辑遵循您前面的问题:
与
final_cnt
相同的逻辑:输出:
相关问题 更多 >
编程相关推荐