gpt4 book ai didi

python - 有没有一种有效的方法来查找系列中的前 n 个重复项?

转载 作者:行者123 更新时间:2023-12-01 07:50:44 24 4
gpt4 key购买 nike

我正在尝试识别

  • 数组中大于 5 的前 6 个元素

  • 然后是接下来的 6 个小于 5 的连续元素。

  • 这两个跨度之间的元素数量是我想要的输出。

我过去做过类似的问题,我需要找到连续值的最长长度 >n 并使用np.where 将我的系列转换为二进制数组,然后找到最大连续值。
我尝试使用类似的方法,但效果不是很好,尽管我坚持使用二进制数组,因为我认为这将是处理事情的最简单的方法。 df 是我的数组n 是数组的长度


def first_six_dupes(df, n):

for i in (5, n-1):

if df[i-5] == 1 and df[i-4] == 1 and df[i-3] == 1 and df[i-2] == 1 and df[i-1] == 1 and df[i] == 1:

return i

当我打印输出时,这会返回“None”。如果我要求它只查找等于 1(index==1) 的单个索引,它会返回最后一个索引,而不是第一次出现的索引。我没有收到任何错误。
我的预期结果将是二进制数组中前六个连续“1”数字的最后一个索引。例如,如果我的数组是 [0,0,1,0,1,1,1,1,1,1,0,0,0,1,0] 我希望获取 9 作为返回值。

最佳答案

MCVE

df = pd.DataFrame({'col1': [6,7,8,9,9,9,2,2,1,1,6,2,2,2,2,2,3]})
<小时/>

IIUC,您可以按连续值分组并使用 cumsum 来查找符合您条件的连续值范围之间的这些区域。

def elements_between_runs(series, threshold, runs):
m = series.gt(threshold)
g = m.ne(m.shift()).cumsum()
f = m.groupby(g).cumsum().eq(runs).idxmax()
l = (~m).groupby(g).cumsum().eq(runs).idxmax()
if l > f:
return l - f - runs
else:
raise ValueError('No region found matching criteria')
<小时/>
>>> elements_between_runs(df.col1, threshold=5, runs=6)
5

>>> elements_between_runs(df.col1, threshold=5, runs=7)
ValueError: No region found matching criteria

关于python - 有没有一种有效的方法来查找系列中的前 n 个重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56226663/

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