[英]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.