Python Pandas按小时搜索多个索引

时间:2017-03-05 07:06:05

标签: python pandas stocks

我有一个多索引pandas数组,我试图在9:30~10:00 Am之间找到最小值和最大值。我可以迭代数组并检查时间是否匹配。但它应该是通过熊猫的一种方式......

有没有办法在交易日的30分钟内进行分组/搜索?我试图对它进行分组,但由于数据具有上市价值,因此不能正常使用[:30]。

import pytz
from datetime import datetime, date, time
from datetime import timedelta
import matplotlib.pyplot as pyplot
from collections import defaultdict
import pandas as pd
from pandas.tseries.resample import TimeGrouper
from pandas.tseries.offsets import DateOffset
from pandas.tseries.index import DatetimeIndex
from pandas import Timestamp

def my_grouper(ts):
    "Function to apply to the index of the DataFrame to break it into groups."
    #pdb.set_trace()
    # Returns midnight of the supplied date.
    return pd.core.datetools.normalize_date(ts)


def first_thirty_minutes(frame):
    "Function to apply to the resulting groups."
    start = frame.index.searchsorted("09:30:00")
    end = frame.index.searchsorted("10:00:00")
    return frame.iloc[start:end]


hist = pd.read_csv("ES2.txt" ,index_col=0 )
eastern = pytz.timezone('US/Eastern')
hist.index = pd.DatetimeIndex(hist.index).tz_localize('UTC').tz_convert('US/Eastern')
data = hist.groupby(my_grouper).apply(first_thirty_minutes)

数据:

DateTime,Hour,Open,High,Low,Close,Volume
1997-09-11 00:00:00-04:00,1997-09-11 00:33:00-04:00,1176.25,1176.25,1174.5,1174.5,4
1997-09-11 00:00:00-04:00,1997-09-11 00:34:00-04:00,1173.75,1173.75,1173.75,1173.75,1
1997-09-11 00:00:00-04:00,1997-09-11 01:45:00-04:00,1173.25,1173.25,1173.25,1173.25,1
1997-09-11 00:00:00-04:00,1997-09-11 04:08:00-04:00,1172.75,1172.75,1172.75,1172.75,1
1997-09-11 00:00:00-04:00,1997-09-11 04:09:00-04:00,1172.5,1172.5,1172.5,1172.5,2
1997-09-11 00:00:00-04:00,1997-09-11 04:10:00-04:00,1172.5,1172.5,1172.5,1172.5,1
1997-09-11 00:00:00-04:00,1997-09-11 04:11:00-04:00,1172.0,1172.0,1172.0,1172.0,1
1997-09-11 00:00:00-04:00,1997-09-11 04:20:00-04:00,1172.0,1172.0,1172.0,1172.0,1
1997-09-11 00:00:00-04:00,1997-09-11 04:21:00-04:00,1171.75,1172.25,1171.75,1172.25,4
1997-09-11 00:00:00-04:00,1997-09-11 04:22:00-04:00,1172.0,1172.0,1171.5,1171.5,2
1997-09-11 00:00:00-04:00,1997-09-11 04:25:00-04:00,1171.0,1171.0,1171.0,1171.0,1
1997-09-11 00:00:00-04:00,1997-09-11 04:31:00-04:00,1170.5,1170.5,1170.5,1170.5,1

1 个答案:

答案 0 :(得分:0)

经过多次挖掘,我发现这条线路通过使用between_time

来修复算法

return frame.between_time(start_time =' 9:30',end_time =' 10:00')