使用 pandas 将数据帧减去子数据帧

问题描述 投票:0回答:1

我有一个大数据帧,我想根据两个条件将该数据帧减去为较小的数据帧。下面是数据框的一小部分:

|          | 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      |

提前致谢。

pandas dataframe
1个回答
0
投票

您可以使用布尔掩码和

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]
© www.soinside.com 2019 - 2024. All rights reserved.