首页 > 解决方案 > 循环优化熊猫切片操作

问题描述

这是我的数据结构,日期时间是唯一的,并用作具有 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)

谢谢你。

标签: pythonpandas

解决方案


您不必要地循环,因为 data 是一类独特的熊猫,其中存储了所有数据。通过循环,您正在重写temporarydf,即您循环的时间。您可以尝试排除 for 循环及其外部的内容。


推荐阅读