我有一个像这样的数据框:
SEQ_N FREQ VAL
ABC 1 121
ABC 1 130
ABC 1 127
ABC 1 116
DEF 1 345
DEF 1 360
DEF 1 327
DEF 1 309
我想从每个组的后续行中减去第一行的值。
结果:
SEQ_N FREQ VAL RES
ABC 1 121 0
ABC 1 130 9
ABC 1 127 6
ABC 1 116 -5
DEF 1 345 0
DEF 1 360 15
DEF 1 327 -18
DEF 1 309 -36
答案 0 :(得分:3)
用Series.sub
和transform
用first
减去列,以将每个组的第一个值复制到Series
,其大小与原始大小相同:
df['RES'] = df['VAL'].sub(df.groupby('SEQ_N')['VAL'].transform('first'))
print (df)
SEQ_N FREQ VAL RES
0 ABC 1 121 0
1 ABC 1 130 9
2 ABC 1 127 6
3 ABC 1 116 -5
4 DEF 1 345 0
5 DEF 1 360 15
6 DEF 1 327 -18
7 DEF 1 309 -36