Andrey
Andrey

Reputation: 6377

How to get rows having DatetimeIndex within time interval in pandas table?

I am using this method:

df = pd.DataFrame({'date': [datetime(2021, 11, 1, 13, 30), datetime(2021, 11, 2, 13, 31), datetime(2021, 11, 3, 13, 32), datetime(2021, 11, 1, 13, 33)],
                    'value': [1, 2, 3, 5]})
df = df.set_index('date')
df = df.loc[
  (df.index.time >= datetime.strptime("13:30", '%H:%M').time()) & \
  (df.index.time < datetime.strptime("13:32", '%H:%M').time())]

Is there any better way?

I tried to use between():

df = df.loc[
  df.index.time.between(
    datetime.strptime("13:30", '%H:%M').time(),
    datetime.strptime("13:32", '%H:%M').time())]

It generates an error:

'numpy.ndarray' object has no attribute 'between'

And I didn't manage to find an appropriate numpy function.

Upvotes: 3

Views: 799

Answers (2)

wwnde
wwnde

Reputation: 26686

Alternative would be

df['date'] =pd.to_datetime(df['date'])
df[df['date'].dt.strftime("%H:%M").between('13:30','13:32')]

     

                 date  value
0 2021-11-01 13:30:00      1
1 2021-11-02 13:31:00      2
2 2021-11-03 13:32:00      3

Upvotes: 0

jezrael
jezrael

Reputation: 863611

Use DataFrame.between_time:

print (df.between_time('13:30','13:32'))
                     value
date                      
2021-11-01 13:30:00      1
2021-11-02 13:31:00      2
2021-11-03 13:32:00      3

Upvotes: 7

Related Questions