满足条件时如何区分数据框中的两行?

How to difference 2 rows in dataframe when condition is met?

我的数据框:

f1 f2 Condition
2 4 1
1 3 0
5 7 0
9 11 0
4 9 1
9 16 1
16 25 0

我想得到f1-f2,当f1条件是第一个1,f2条件是最后一个0,比如前2行,我想得到2-3=-1。下一个例子是 4-25=-21。我不能通过将整个 f2 列移动 2 来进行固定减法,因为 1 和 0 之间的距离可能会像数据帧中那样变化。

IIUC,当有从 0 到 1 的转换时,你可以分组,然后取第一个 f1 和最后一个 f2,用它来计算 f1 - f2。

使用这种方法,组中的第一个值必须是 1,最后一个值必须是 0(最终第一行如果为 0,最后一行如果为 1 除外,但在这种情况下应该如何处理?)

group = df['Condition'].diff().eq(1).cumsum()
(df
 .groupby(group)
 .agg({'f1': 'first', 'f2': 'last'})
 .eval('f1-f2')
)

变体:

group = df['Condition'].diff().eq(1).cumsum()
(df
 .groupby(group)
 .apply(lambda d: d['f1'].iloc[0]-d['f2'].iloc[-1])
)

输出:

Condition
0    -1
1   -21
dtype: int64