满足条件时如何区分数据框中的两行?
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
我的数据框:
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