【问题标题】:Wrong output when using 'groupby' for 'US/Eastern' zone对“美国/东部”区域使用“groupby”时输出错误
【发布时间】:2021-12-05 19:33:49
【问题描述】:

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

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 之后。为什么会发生这种情况,我该如何解决?

【问题讨论】:

    标签: python pandas dataframe timezone pandas-groupby


    【解决方案1】:

    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 
    

    【讨论】:

      猜你喜欢
      • 2022-06-29
      • 1970-01-01
      • 2021-05-30
      • 1970-01-01
      • 2011-07-29
      • 1970-01-01
      • 2018-09-07
      • 1970-01-01
      • 2021-12-06
      相关资源
      最近更新 更多