【问题标题】:Pandas - Choose the starting day when resampling every 2 weeksPandas - 选择每 2 周重采样的起始日期
【发布时间】:2014-06-15 22:55:06
【问题描述】:

假设我有以下时间序列,从 2014-06-01 开始,即星期日。

在[7]中:

# 2014-06-01 is Sunday
df = pd.Series( index=pd.date_range( '2014-06-01', periods=30 ), data=nr.randn( 30 ) ) #
df

我可以每周重新采样,从周日开始到周六结束:

In [9]:

df.resample( 'W-SAT' )
Out[9]:
2014-06-07    0.119460
2014-06-14    0.464789
2014-06-21   -1.211579
2014-06-28    0.650210
2014-07-05    0.666044
Freq: W-SAT, dtype: float64

好的,现在我想做同样的事情,但每两周一次,所以我试试这个:

In [11]:

df.resample( '2W-SAT' )
Out[11]:
2014-06-07    0.119460
2014-06-21   -0.373395
2014-07-05    0.653729
Freq: 2W-SAT, dtype: float64

哦,输出是 1 周,然后是 2 周和 2 周。这不是我所期望的。我期待第一个索引条目是“2014-06-14”。为什么这样做?如何让前 2 周一起重新采样?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    在尝试了resample 的各种选项后,我可能会有一个解释。 resample 选择新重采样索引的第一个条目的方式似乎取决于 closed 选项:

    • closed=leftresample 寻找最新的可能开始时
    • closed=rightresample 寻找最早可能的开始时

    我会举例说明:

    # 2014-06-01 is Sunday
    df = pd.Series( index=pd.date_range( '2014-06-01', periods=30 ), data=range(1 , 31 ) ) #
    df
    

    以下示例说明了closed=left 的行为。左侧闭合的 2 周间隔中最新的“左侧”星期六发生在 2014 年 5 月 31 日,如下所示:

    df.resample( '2W-SAT',how='sum', closed='left', label='left' )
    Out[119]:
    2014-05-31     91
    2014-06-14    287
    2014-06-28     87
    Freq: 2W-SAT, dtype: int64
    

    下一个示例说明了closed=right 的行为,这是我在最初的帖子中不理解的行为(closed=right 默认为resample)。右侧闭合的 2 周间隔中最早的“右侧”星期六发生在 2014/06/07,如下所示:

    df.resample( '2W-SAT',how='sum', closed='right', label='right' )
    Out[122]:
    2014-06-07     28
    2014-06-21    203
    2014-07-05    234
    Freq: 2W-SAT, dtype: int64
    

    【讨论】:

    • 我认为这更多是关于标记而不是将结果偏移一周,即数字相同。
    【解决方案2】:

    2014 年 6 月的第一个星期六是 7 号,所以从 7 号开始。 如果您在周日尝试,它会按预期从 6 月 1 日开始。

    df.resample( '2W-SUN' )
    Out[11]: 
    2014-06-01    0.739895
    2014-06-15    0.497950
    2014-06-29    0.445480
    2014-07-13    0.767430
    Freq: 2W-SUN, dtype: float64
    

    【讨论】:

    • OP 询问我希望第一个索引条目是“2014-06-14”,即中间星期日。
    猜你喜欢
    • 2020-09-29
    • 2015-09-08
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 2018-05-22
    • 2022-01-22
    • 2015-05-04
    相关资源
    最近更新 更多