从每个组的后续行中减去第一行值

时间:2019-03-03 05:22:09

标签: python python-3.x pandas dataframe pandas-groupby

我有一个像这样的数据框:

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

1 个答案:

答案 0 :(得分:3)

Series.subtransformfirst减去列,以将每个组的第一个值复制到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