对'US/Eastern'区域使用 'groupby' 时输出错误



假设我们有这样的代码。dd为频率为15分钟的日期范围,时区为UTC。通过将该列转换为US/Eastern区域,我向data数据框添加了另一列。然后使用groupby将开始和结束于9:30:00 AM的行放在一起。

import pandas as pd
import pytz
import numpy as np
dd = pd.date_range(start='03/10/2018', end='03/12/2018', freq='15min', tz='UTC')
data = pd.DataFrame(np.arange(0, len(dd)))
data = data.set_index(dd)
est = pytz.timezone('US/Eastern')
data['EST_time'] = data.index.tz_convert(est)
output = list(data.groupby(pd.Grouper(key='EST_time', freq='24h', offset = '9:30:00')))

问题是output列表的第二项。正如你所看到的,它从2018-03-10 09:30:00-05:00开始,在2018-03-11 10:15:00-04:00结束。开始时间是正确的(差不多),但是结束时间在9:30:00之后。为什么会发生这种情况,我该如何解决?

3月11日是夏令夏令时,所以那一天(在那个时区)实际上只有23个小时,这就是为什么freq='24h'不起作用的原因。

freq='1d'应该可以做到:

for g in data.groupby(pd.Grouper(key='EST_time', freq='1d', offset = '9:30:00')):
print(g[0])

2018-03-09 09:30:00-05:00
2018-03-10 09:30:00-05:00
2018-03-11 09:30:00-04:00 

最新更新