0

I know about round, ceil, floor functions.

df.index.round("30min")

This rounds to the nearest 30 minute interval. What I want is that each is rounded to 30 minutes.

In the case of .round 10:15 will be rounded to 10:30 and 10:45 to 11:00. I would want both rounded to 10:30.

The datetime Index:

DatetimeIndex(['2021-11-29 09:30:00', '2021-11-29 09:45:00',
               '2021-11-29 10:00:00', '2021-11-29 10:15:00',
               '2021-11-29 10:30:00', '2021-11-29 10:45:00',
               '2021-11-29 11:00:00', '2021-11-29 11:15:00',
               '2021-11-29 11:30:00', '2021-11-29 11:45:00',
               ...
               '2021-12-27 13:30:00', '2021-12-27 13:45:00',
               '2021-12-27 14:00:00', '2021-12-27 14:15:00',
               '2021-12-27 14:30:00', '2021-12-27 14:45:00',
               '2021-12-27 15:00:00', '2021-12-27 15:15:00',
               '2021-12-27 15:30:00', '2021-12-27 15:45:00'],
              dtype='datetime64[ns]', name='Datetime', length=520, freq=None)
FObersteiner
  • 22,500
  • 8
  • 42
  • 72
Borut Flis
  • 15,715
  • 30
  • 92
  • 119

1 Answers1

2

Use DatetimeIndex.floor by hour and add 30 minutes:

df = pd.DataFrame(index=pd.DatetimeIndex(
               ['2021-11-29 09:30:00', '2021-11-29 09:45:00',
               '2021-11-29 10:00:00', '2021-11-29 10:15:00',
               '2021-11-29 10:30:00', '2021-11-29 10:45:00',
               '2021-11-29 11:00:00', '2021-11-29 11:15:00',
               '2021-11-29 11:30:00', '2021-11-29 11:45:00',
               '2021-12-27 13:30:00', '2021-12-27 13:45:00',
               '2021-12-27 14:00:00', '2021-12-27 14:15:00',
               '2021-12-27 14:30:00', '2021-12-27 14:45:00',
               '2021-12-27 15:00:00', '2021-12-27 15:15:00',
               '2021-12-27 15:30:00', '2021-12-27 15:45:00']))

print (df.index.floor("1H") + pd.Timedelta('30min'))

DatetimeIndex(['2021-11-29 09:30:00', '2021-11-29 09:30:00',
               '2021-11-29 10:30:00', '2021-11-29 10:30:00',
               '2021-11-29 10:30:00', '2021-11-29 10:30:00',
               '2021-11-29 11:30:00', '2021-11-29 11:30:00',
               '2021-11-29 11:30:00', '2021-11-29 11:30:00',
               '2021-12-27 13:30:00', '2021-12-27 13:30:00',
               '2021-12-27 14:30:00', '2021-12-27 14:30:00',
               '2021-12-27 14:30:00', '2021-12-27 14:30:00',
               '2021-12-27 15:30:00', '2021-12-27 15:30:00',
               '2021-12-27 15:30:00', '2021-12-27 15:30:00'],
              dtype='datetime64[ns]', freq=None)
jezrael
  • 822,522
  • 95
  • 1,334
  • 1,252