计算满足条件的当前行和最新行之间的差异

Calculate difference between current row and latest row satisfying a condition

我有一个 pandas 数据框看起来像。

    time value group
0   1   12  1
1   2   14  1
2   3   15  2
3   4   15  1
4   5   18  2
5   6   20  1
6   7   19  2
7   8   24  2

我知道要计算第 1 组和第 2 组之间的最新值的差值。 IE。在每一行中,我想查看第 1 组和第 2 组的最新值,并计算第 1 组的值 - 第 2 组的值。

在示例中,输出应如下所示

    time value group diff
0   1   12  1 0
1   2   14  1 0
2   3   15  2 -1
3   4   15  1 0
4   5   18  2 -3
5   6   20  1 2
6   7   19  2 1
7   8   24  2 -4

到目前为止我能找到的唯一函数是 pd.diff() 但它不能满足我的需要。所以我真的很感激这里的一些帮助。谢谢!

可以先转发group1和2的填充值,然后计算差值:

df['diff'] = df.value.where(df.group == 1).ffill() - df.value.where(df.group == 2).ffill()
df
   time  value  group  diff
0     1     12      1   NaN
1     2     14      1   NaN
2     3     15      2  -1.0
3     4     15      1   0.0
4     5     18      2  -3.0
5     6     20      1   2.0
6     7     19      2   1.0
7     8     24      2  -4.0

使用fillna -- 如果需要填写df['diff'] = df['diff'].fillna(0).