将 'groupby' 用于 'US/Eastern' 区域时输出错误
Wrong output when using 'groupby' for 'US/Eastern' zone
假设我们有这段代码。 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 日有 DST 转换(冬令时到夏令时),所以那天(在那个时区)实际上只有 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
假设我们有这段代码。 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 日有 DST 转换(冬令时到夏令时),所以那天(在那个时区)实际上只有 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