首页 > 解决方案 > 仅选择存在特定值的底部连续行 Pandas

问题描述

我有这个数据框

lst = [['A',1],['B',0],['C',1],['D',0],['E',1],['F',1],['G',1]]
df = pd.DataFrame(lst,columns = ['name','val'])

看起来像这样

  name  val
0    A    1
1    B    0
2    C    1
3    D    0
4    E    1
5    F    1
6    G    1

我想得到val1 的行,但它们应该是底部连续的行。

期望的输出

  name  val
4    E    1
5    F    1
6    G    1

我正在做,这将给所有 val 1。

df[df.val == 1]

标签: pythonpython-3.xpandas

解决方案


您可以使用cumsum获取最后一个块:

# blocks separated by `0`
s = df.val.ne(1).cumsum()

# last blocks and only value 1
df[s.eq(s.max()) & df['val'].eq(1)]

输出:

  name  val
4    E    1
5    F    1
6    G    1

推荐阅读