【问题标题】:Resample hourly TimeSeries with certain starting hour重新采样具有特定开始时间的每小时 TimeSeries
【发布时间】:2012-09-16 17:54:33
【问题描述】:

我想从某个小时开始以每天(正好 24 小时)的频率重新采样 TimeSeries。

喜欢:

index = date_range(datetime(2012,1,1,17), freq='H', periods=60)

ts = Series(data=[1]*60, index=index)

ts.resample(rule='D', how='sum', closed='left', label='left')

我得到的结果:

2012-01-01  7
2012-01-02 24
2012-01-03 24
2012-01-04  5
Freq: D

我希望的结果:

2012-01-01 17:00:00 24
2012-01-02 17:00:00 24
2012-01-03 17:00:00 12
Freq: D

几周前,您可以将'24H' 传递给freq 参数,它工作得很好。 但现在它结合了'24H''1D'

我是否使用了 '24H' 的错误,现在已修复? 我怎样才能以高效且 Pythonic(或 Pandas)的方式获得预期的结果?

版本:

  • python 2.7.3
  • pandas 0.9.0rc1(但在 0.8.1 中也不起作用)
  • numpy 1.6.1

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    Resample 有一个涵盖这种情况的 base 参数:

    ts.resample(rule='24H', closed='left', label='left', base=17).sum()
    

    输出:

    2012-01-01 17:00:00    24
    2012-01-02 17:00:00    24
    2012-01-03 17:00:00    12
    Freq: 24H
    

    【讨论】:

    • 非常感谢!我不理解该参数文档,并认为它是为上采样案例添加的。
    • @MaM 我同意你的看法。这种情况下的文档需要一个很好的例子。
    【解决方案2】:

    2021 年更新:base 自 1.1.0 版起已弃用:您应该使用的新参数是“偏移”或“原点”。

    df.resample('24H',
     origin=datetime(2012,1,1,17) # <--  ADD THIS
    ).sum() 
    

    1.1.0 版中的新功能

    origin{‘epoch’, ‘start’, ‘start_day’}, Timestamp or str, 默认‘start_day’ 调整分组的时间戳。原始时区必须与索引的时区匹配。如果不使用时间戳,也支持这些值:

    • ‘epoch’:原点是 1970-01-01
    • ‘start’:origin 是时间序列的第一个值
    • ‘start_day’:原点是时间序列午夜的第一天

    【讨论】:

      【解决方案3】:

      2020 年更新:适用于数据框

      使用doc 中提到的base 关键字:

      代码示例:

      df.resample(pd.Timedelta('24 hours'), # or '24H'
       base=17 # <--  ADD THIS
      ).sum() 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-26
        • 1970-01-01
        • 2019-06-28
        • 2013-04-29
        相关资源
        最近更新 更多