我有一个Pandas 数据框,是这样的:

    col
0   3
1   5
2   9
3   5
4   6
5   6
6   11
7   6
8   2
9   10

它可以用以下代码在Python中创建:

import pandas as pd

df = pd.DataFrame(
    {
        'col': [3, 5, 9, 5, 6, 6, 11, 6, 2, 10]
    }
)

我要查找值大于8的行,并且在它们之前至少有一行的值小于4.

因此,输出应为:

    col
2   9
9   10

您可以看到,索引0的值等于3(小于4),然后索引2的值大于8.因此,我们将索引2添加到输出中,并继续判断下一行.但我们不再考虑指数0, 1, 2,而是重置工作.

索引6的值等于11,但是没有一个索引3, 4, 5的值小于4,因此我们不将索引6添加到输出中.

索引8的值等于2(小于4),而索引9的值等于10(大于8),因此将索引9添加到输出.

我的首要任务是不使用任何for-loops作为代码.

你知道这件事吗?

推荐答案

拯救行动的布尔索引:

# value > 8
m1 = df['col'].gt(8)

# get previous value <4
# check if any occurred previously
m2 = df['col'].shift().lt(4).groupby(m1[::-1].cumsum()).cummax()

df[m1&m2]

输出:

   col
2    9
9   10

Python相关问答推荐

当多个值具有相同模式时返回空

连接两个具有不同标题的收件箱

rame中不兼容的d类型

log 1 p numpy的意外行为

django禁止直接分配到多对多集合的前端.使用user.set()

pandas:排序多级列

如何使用SentenceTransformers创建矢量嵌入?

干燥化与列姆化的比较

在Google Drive中获取特定文件夹内的FolderID和文件夹名称

如果有2个或3个,则从pandas列中删除空格

numpy数组和数组标量之间的不同行为

504未连接IB API TWS错误—即使API连接显示已接受''

我什么时候应该使用帆布和标签?

在pandas中,如何在由两列加上一个值列组成的枢轴期间或之后可靠地设置多级列的索引顺序,

无法在盐流道中获得柱子

EST格式的Azure数据库笔记本中的当前时间戳

为什么按下按钮后屏幕的 colored颜色 保持不变?

Scipy.linprog的可行性有问题吗?(A_ub@x0<;=b_ub).all()为True-但是-linprog(np.zeros_like(X0),A_ub=A_ub,b_ub=b_ub)不可行

是否将列表分割为2?

如何从具有完整层次数据的Pandas框架生成图形?