简体   繁体   中英

Python Pandas search by hour on multiple index

I have a multi index pandas array and I am trying to find the Minimum and the Max between the 9:30~10:00 Am. I could iterate the array and check if the times match or not. But it should be a way via pandas...

Is there a way to group/search the 30 mins of the trading day? I am trying to group it but is not working properly by the way its not ok just to use [:30] because the data has pre-market values.

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)

Data:

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

After more digging i have found out with this line gets fix the algo by using between_time

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM