pandas - 当我编写这段特定的代码时,我的 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 分钟,然后才提供任何输出
解决方案
总之,您可以通过跳过 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'])
推荐阅读
- angular - 以角度的静态方法访问 ag-Grid ColumnApi
- mysql - 在 Mysql for Postgresql 中替代“set @myvariable = value”
- intellij-idea - 如何在 IntelliJ IDEA 的拆分选项卡中打开新文件?
- mysql - MySQL CREATE TABLE FROM VIEW 与 PRIMARY KEY
- python - 如何从 Python 中的字符串中提取数字并返回一个列表?
- software-design - 在洋葱、六边形或干净架构中,域模型是否可以包含与数据库中的域模型不同的属性?
- ios - 我想在我的通知中显示图像,我试图在扩展通知服务中这样做,但它没有用
- javascript - for-loop 中的 Discord.js setTimeout 正在同时打印值,有没有办法让这个简单的程序工作
- javascript - Angular 8:如何从 json REST API 创建枚举
- python - 我正在尝试访问此 dict 的值,但我得到了错误的结果