Мой блокнот Юпитер занимает много минут, прежде чем дать какой-либо вывод (продолжает работать), когда я пишу этот конкретный кусок кода - PullRequest
1 голос
/ 02 мая 2020
for j in range(len(datelist)):
    tempmax.append((df.where(df['Date']==datelist[j])['Data_Value'].max()))
    tempmin.append((df.where(df['Date']==datelist[j])['Data_Value'].min()))

print(tempmax)    

Когда я пишу этот фрагмент кода, моя записная книжка Jupiter продолжает работать около 10 минут, прежде чем выдает какой-либо вывод

1 Ответ

0 голосов
/ 02 мая 2020

В общем, вы можете увеличить свою скорость, пропустив 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'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...