Мой предыдущий ответ был вне базы, поэтому я попробую еще раз.Из повторного прочтения вашего вопроса похоже, что вы ищете один результат за 30 лет, где среднее значение значений Prs_100 превышает 460.
Следующий код может сделать это, но когда я его запустил, у меня былоначались трудности после 415 для среднего значения.
После запуска вы получите список лет 'список_ лет' и список значений 'Prs_100_list', удовлетворяющих критериям среднего значения> 460 (415 в приведенном ниже примере).
Вот мойкод, надеюсь, это в области того, что вы ищете.
from math import factorial
import numpy as np
import pandas as pd
from itertools import combinations
import time
# start a timer
start = time.time()
# array of values to work with, corresponding to the years 2012 - 2062
prs_100 = np.array([
425.189729, 256.382494, 363.309507, 578.728535, 309.311562,
476.388839, 441.47957 , 342.267756, 388.133403, 405.007245,
316.108551, 392.193322, 296.545395, 467.38819 , 644.588971,
301.086631, 478.492618, 435.868944, 467.464995, 323.465049,
391.201598, 548.911349, 381.252838, 451.175339, 281.921215,
403.840004, 460.51425 , 409.134409, 312.182576, 320.246886,
290.163454, 381.432168, 259.228592, 393.841815, 342.999972,
337.491898, 486.13901 , 318.278012, 385.919542, 309.472316,
307.756455, 338.596315, 322.508536, 385.428138, 339.379743,
420.428529, 417.143175, 361.643381, 459.861622, 374.359335])
# build dataframe with prs_100 as index and years as values, so that years can be returned easily.
df = pd.DataFrame(list(range(2012, 2062)), index=prs_100, columns=['years'])
df.index.name = 'Prs_100'
# set combination parameters
r = 30
n = len(prs_100)
Prs_100_list = []
years_list = []
count = 0
for p in combinations(prs_100, r):
if np.mean(p) > 391 and np.mean(p) < 400:
Prs_100_list.append(p)
years_list.append(df.loc[p,'years'].values.tolist())
# build in some exit
count += 1
if count > 100:
break