python - 循环优化熊猫切片操作
问题描述
这是我的数据结构,日期时间是唯一的,并用作具有 700,000 行不同日期的 pandas 数据框的索引。
| DateTime | Open | High | Low | Close | indicator |
2018-10-23 12:00:00 61.61 61.86 61.6 61.84 0
2018-10-23 12:05:00 61.82 61.98 61.76 61.98 0
2018-10-23 12:10:00 61.98 62.01 61.9 62.01 0
2018-10-23 12:15:00 62.05 62.15 62.01 62.02 0
2018-10-23 12:20:00 62.04 62.13 62.03 62.07 0
2018-10-23 12:25:00 62.08 62.19 62.05 62.19 1
2018-10-23 12:30:00 62.19 62.19 62.11 62.15 0
2018-10-23 12:35:00 62.13 62.24 62.12 62.22 1
2018-10-23 12:40:00 62.23 62.34 62.22 62.29 0
2018-10-23 12:45:00 62.3 62.37 62.21 62.25 0
我想对包含仅符合以下条件的行的数据框进行切片 - 1. 行的日期必须与指标值为 1 的行相同 2. 只有及时向前的行才应该被切片
代码执行大约需要 10-12 秒,有没有改进时间?
我的 Python 代码——
# data is a pandas dataframe as above
arr = []
temporarydf = data[data['indicator'] == 1]
for i in range(len(temporaryDF)):
sliceddata = data[(data['DateTime'] > temporaryDF['DateTime'].iloc[i]) &
(data['DateTime'].dt.date ==
temporaryDF['DateTime'].iloc[i].date())]
arr.append(sliceddata)
谢谢你。
解决方案
您不必要地循环,因为 data 是一类独特的熊猫,其中存储了所有数据。通过循环,您正在重写temporarydf,即您循环的时间。您可以尝试排除 for 循环及其外部的内容。
推荐阅读
- node.js - 设置快速服务器的反应
- c++ - 如何在只读期间在 QLineEdit 中显示闪烁的光标
- go - Golang 在每次部署时更新供应商依赖项
- jquery - 在可见区域更改元素的 css
- php - 如果在图的范围内,MySQL 查询平均数据
- ansible - 如何登录运行 Ansible 的遥控器?
- module - How to manage module dependencies in jq
- reactjs - 从一个 Webpack 配置输出多个 React 应用程序
- node.js - 在运行 grunt 时找不到模块“findup-sync”
- spring-boot - 为什么 Spring Boot 会为 Controller 方法参数验证抛出不同的异常?