在Pandas中,如何减少行,以便仅在每个true子组中接受第一个true的行?

时间:2018-11-14 23:09:15

标签: python pandas

作为示例,请考虑以下内容:

输入

a b   c  bool
1 243 0  true
1 253 1  false
1 267 0  true
1 245 0  true
1 234 0  false
1 255 0  true
1 275 0  true
1 295 0  true

我希望输出如下:

a b   c  bool
1 243 0  true
1 253 1  false
1 267 0  true
1 234 0  false
1 255 0  true

2 个答案:

答案 0 :(得分:1)

为此使用一些布尔蒙版,并在一行中完成:

df.loc[(df['bool'] != df['bool'].shift(1))]

退出:

>>> df.loc[(df['bool'] != df['bool'].shift(1))]
   a    b  c   bool
0  1  243  0   True
1  1  253  1  False
2  1  267  0   True
4  1  234  0  False
5  1  255  0   True

答案 1 :(得分:1)

IIUC

df.groupby(df['bool'].ne(True).cumsum()).head(2)
Out[201]: 
   a    b  c   bool
0  1  243  0   True
1  1  253  1  False
2  1  267  0   True
4  1  234  0  False
5  1  255  0   True