В общем, вы можете увеличить свою скорость, пропустив pd.where ()
Сравнение скорости:
df = pd.DataFrame()
df['a'] = range(16000)
df['b'] = range(16000)
%timeit df.where(df['a']==2)['b'].max()
>>> 6.31 ms ± 124 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
%timeit df[df['a']==2]['b'].max()
>>> 777 µs ± 8.14 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
Ваш новый код должен работать примерно в 10 раз быстрее:
for j in range(len(datelist)):
tempmax.append((df[df['Date']==datelist[j]]['Data_Value'].max()))
tempmin.append((df[df['Date']==datelist[j]]['Data_Value'].min()))
Также возможно, что использование pd.Series.agg () ускорит процесс:
for j in range(len(datelist)):
search = df[df['Date']==datelist[j]].agg(['max','min'])['Data_Value']
tempmax.append(search['max'])
tempmin.append(search['min'])