在 Pandas datetimeindex 中将所有索引四舍五入到 30 分钟

Round all index to 30 min in Pandas datetimeindex

我知道 round、ceil、floor 函数。

df.index.round("30min")

这四舍五入到最接近的 30 分钟间隔。我想要的是每个都四舍五入到 30 分钟。

在 .round 的情况下,10:15 将四舍五入为 10:30,而 10:45 将四舍五入为 11:00。我希望两者都舍入到 10:30.

日期时间索引:

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)

按小时使用DatetimeIndex.floor并增加30分钟:

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)