首页 > 解决方案 > 当我编写这段特定的代码时,我的 jupiter notebook 需要很长时间才能给出任何输出(继续运行)

问题描述

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 notebook 会持续运行大约 10 分钟,然后才提供任何输出

标签: pandasdatetime

解决方案


总之,您可以通过跳过 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'])

推荐阅读