gpt4 book ai didi

python - 需要计算连续索引的运行次数

转载 作者:行者123 更新时间:2023-12-01 09:03:07 26 4
gpt4 key购买 nike

我需要计算至少有 4 个连续值满足 pandas 条件的实例。下面的代码给了我一个 Int64Index:

    IN: vals = chunk[chunk[col] > ninetieth].index
OUT: Int64Index([427, 429, 430, 431, 436, 470, 471, 472, 473, 478, 518, 519, 520,
521, 522, 565, 566, 567, 568, 569],
dtype='int64')

我可以通过这种方式得到我想要的东西:

count = 0
i = 0
while i < range(len(vals)):
try:
if vals[i] + 3 == vals[i + 3]:
count += 1
i += 3
else: i += 1
except: break

但是一定有一种更简单、不那么可怕的方法,对吧?

预计到达时间:经过进一步澄清,每次运行至少 4 个连续值时,计数应增加,并且在出现间隙之前不会再次增加。

最佳答案

一种方法是在一个范围内求差,基本上减去连续部分,然后进行分组:

v2 = vals - np.arange(len(vals))
result = (v2.to_series().groupby(v2).size() >= 4).sum()

这给了我

In [141]: result
Out[141]: 3

这之所以有效,是因为

In [142]: v2 = vals - np.arange(len(vals))

In [143]: v2
Out[143]:
Int64Index([427, 428, 428, 428, 432, 465, 465, 465, 465, 469, 508, 508, 508,
508, 508, 550, 550, 550, 550, 550],
dtype='int64')

现在每次连续运行都有相同的数字(与我们开始时的数字不同,但这在这里并不重要)。然后:

In [144]: v2.to_series().groupby(v2).size()
Out[144]:
427 1
428 3
432 1
465 4
469 1
508 5
550 5
dtype: int64

In [145]: (v2.to_series().groupby(v2).size() >= 4).sum()
Out[145]: 3

关于python - 需要计算连续索引的运行次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52300187/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com