找到Pandas系列中最后一个非零元素的索引

2024-10-01 09:33:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我想找出熊猫系列中最后一个非零元素的指数。我可以用一个循环来完成:

ilast = 0
for i in mySeries.index:
    if abs(mySeries[i]) > 0:
        ilast = i

有没有更干净、更短的方法?在


Tags: 方法in元素forindexifabs指数
2条回答

我可能只写s[s != 0].index[-1],例如

>>> s = pd.Series([0,1,2,3,0,4,0],index=range(7,14))
>>> s
7     0
8     1
9     2
10    3
11    0
12    4
13    0
dtype: int64
>>> s[s != 0].index[-1]
12

最初我以为使用nonzero会使事情变得简单,但我能想到的最好的办法是

^{pr2}$

这个例子要快得多(快30多倍),但我不喜欢它的外观。。基督教青年会。在

只是想出了一些解决办法。在

发电机的几种方法:

max(i for i in s.index if s[i] != 0) # will work only if index is sorted

以及

^{pr2}$

这也是相当快速和可读的。在

通过numpy的trip_zeros

import numpy as np
np.trim_zeros(s, 'b').index[-1]

这比@DSM的两个答案都慢。在


摘要:

timeit np.trim_zeros(s, 'b').index[-1]
10000 loops, best of 3: 89.9 us per loop

timeit s[s != 0].index[-1]
10000 loops, best of 3: 68.5 us per loop

timeit next(i for i in s.index[::-1] if s[i] != 0)
10000 loops, best of 3: 19.4 us per loop

timeit max(i for i in s.index if s[i] != 0)
10000 loops, best of 3: 16.8 us per loop

timeit s.index[s.nonzero()[0][-1]]
100000 loops, best of 3: 1.94 us per loop

相关问题 更多 >