我有一个大数据帧,我想根据两个条件将该数据帧减去为较小的数据帧。下面是数据框的一小部分:
| | id |outcome|
| -------- | -------------- | |
| |1 | 0 |
| 0 | 1 | 1 |
| | 2 | 1 |
| 0 | 16 | 1 |
| | 3 | 1 |
| 0 | 5 | 1 |
| | 4 | 8 |
| 0 | 1 | 1 |
| | 1 | 1 |
| | 1 | 1 |
| | 1 | 1 |
| | 1 | 1 |
| | 16 | 1 |
我想根据 Id 16 和结果 1 将此数据帧减去为更小的数据帧,然后取上面的行,直到结果 !=1。因此,为了在上面的示例中清楚地表明我应该有两个数据帧。 第一个:
| 0 | 1 | 1 |
| | 2 | 1 |
| 0 | 16 | 1 |
第二个:
| 0 | 1 | 1 |
| | 1 | 1 |
| | 1 | 1 |
| | 1 | 1 |
| | 1 | 1 |
| | 16 | 1 |
提前致谢。
您可以使用布尔掩码和
groupby
:
m1 = df['outcome'].eq(1)
m2 = df['id'].eq(16)
m3 = m1.where(m2|~m1).bfill()
out = [g for _, g in df[m3].groupby((~m3).cumsum())]
输出:
[ col id outcome
1 0 1 1
2 2 1
3 0 16 1,
col id outcome
7 0 1 1
8 1 1
9 1 1
10 1 1
11 1 1
12 16 1]