我知道我可以做这样的事情:
df[df['data'] > 3].index.tolist()
并获取列表的第一个元素
但是我需要使用它的地方是一个循环,其中包含很多迭代和一个非常大的数据框。 我想获取第一个实例并在那里停止执行,而不是浪费时间收集所有实例然后丢弃除第一个实例以外的所有结果。
有没有办法用熊猫做到这一点?手动遍历行太慢了;将数据帧分成多个块并在每个块中进行搜索没有太大帮助(可能是因为它做了一些副本,不确定)。
编辑: 这是一个例子
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。
我想要的是找到一种在符合条件的行时停止执行的快速方法。
答案 0 :(得分:3)
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)