繁体   English   中英

在熊猫中找到匹配条件的第一行的索引

[英]finding the index of the first row matching a condition in pandas

我知道我可以做这样的事情:

df[df['data'] > 3].index.tolist()

并取列表的第一个元素

但是我需要使用它的地方是在一个循环中,有很多迭代和一个非常大的数据帧。 我想获得第一个实例并在那里停止执行,而不是浪费时间收集所有实例然后丢弃除第一个之外的所有结果。

有没有办法用 Pandas 做到这一点? 手动遍历行非常慢; 将数据帧分成块并在每个块中进行搜索并没有太大帮助(可能是因为它做了一些副本,不确定)。

编辑:这是一个例子

data = {'data': [10, 11, 12, 14, 15, 16, 18]}   # this is over 1M entries in practice
df = pd.DataFrame.from_dict(data)
df.index[df['data']>14].tolist()[0]

正如预期的那样,这将返回 4。

我想要的是找到一种在有一行匹配条件时停止执行的快速方法。

idxmax

在评估idxmax之前仍然评估布尔系列

df['data'].gt(3).idxmax()

argmax

df.index[(df['data'].to_numpy() > 3).argmax()]

显式函数

def find(s):
    for i, v in s.iteritems():
        if v > 3:
            return i

find(df['data'])

努巴

from numba import njit

@njit
def find(a, b, c):
    for x, y in zip(a, b):
        if y > c:
            return x

find(df.index.to_numpy(), df['data'].to_numpy(), 3)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM