我有以下 pandas 系列(以列表形式表示):
[7,2,0,3,4,2,5,0,3,4]
我想定义一个新的系列,返回到最后一个零的距离。这意味着我想要以下输出:
[1,2,0,1,2,3,4,0,1,2]
如何以最有效的方式在 pandas 中做到这一点?
复杂度是O(n)
。会减慢速度的是做一个for
在Python中循环。如果有k
系列中的零点,以及log k
与系列的长度相比可以忽略不计O(n log k)
解决方案是:
>>> izero = np.r_[-1, (ts == 0).nonzero()[0]] # indices of zeros
>>> idx = np.arange(len(ts))
>>> idx - izero[np.searchsorted(izero - 1, idx) - 1]
array([1, 2, 0, 1, 2, 3, 4, 0, 1, 2])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)