【问题标题】:Why does pandas roll a week forward when using resample with W-MON frequency?为什么熊猫在使用 W-MON 频率的重采样时会向前滚动一周?
【发布时间】:2018-09-07 17:22:35
【问题描述】:

例如,我有以下代码创建一个数据框,其索引包含单个值 - 日期“2018-03-06”(星期二)。请注意,此日期在 2018-03-05(星期一)这一周:

values = [1, 1, 1]
dates = pd.to_datetime(np.repeat('2018-03-06', 3))
df = pd.DataFrame({
    'value': values
}, index=dates)
df.resample('W-MON').size()

产生:

2018-03-12    3
Freq: W-MON, dtype: int64

为什么 pandas 会将日期提前一周?我原以为结果会被重新采样到 2018-03-05,因为那是生成值的那一周,我使用的是 freq='W-MON'

更新

正如所指出的,我需要将 label 参数添加到 resample,它定义了要使用的 bin 边缘。使用label='left' 解决了将日期存储在正确周内的问题,除非日期在一周的开始(在本例中为星期一)。例如,如果我使用 label='left' 对日期 2018-03-05 应用重新采样,则重新采样的值为 2018-02-26,而它应该是 2018-03-05。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    让我们尝试使用labelclosed see docs

    values = [1, 1, 1]
    dates = pd.to_datetime(np.repeat('2018-03-06', 3))
    df = pd.DataFrame({
        'value': values
    }, index=dates)
    df.resample('W-MON', label='left',closed='left').size()
    

    输出:

    2018-03-05    3
    Freq: W-MON, dtype: int64
    

    还有,

    values = [1, 1, 1]
    dates = pd.to_datetime(np.repeat('2018-03-05', 3))
    df = pd.DataFrame({
        'value': values
    }, index=dates)
    df.resample('W-MON', label='left',closed='left').size()
    

    输出:

    2018-03-05    3
    Freq: W-MON, dtype: int64
    

    有趣的注释关于文档,签名声明“关闭” 默认为无。但是,文档字符串声明“关闭”默认值 '左'。

    【讨论】:

      【解决方案2】:

      我不确定为什么要这样做,我同意您所期望的行为似乎更直观。您可以通过将label='left' 作为关键字参数传递来获得所需的结果。本例中的默认值为'right'

      df.resample('W-MON', label='left').size()
      

      来自documentation

      标签{‘right’, ‘left’}

      使用哪个 bin 边缘标签来标记存储桶。默认为“左” 除“M”、“A”、“Q”、“BM”、“BA”、“BQ”和 ‘W’都默认为‘right’。

      我猜'W-MON' 仍然算作'W',这就是为什么默认为'right' 的原因,因此您的示例给出了'2018-03-12' 而不是'2018-03-05' 的结果。

      【讨论】:

      • 我的错,我想我应该更密切地使用 RFTM。谢谢!
      • 如果日期值在新的一周开始,即星期一,这仍然无法正常工作。例如,如果我将resample 应用于“2017-03-06”(星期一),则重采样值为“2017-02-27”,即一周前。结果应该是“2017-03-06”下降的那一周的开始,即“2017-03-06”。
      猜你喜欢
      • 2018-07-31
      • 1970-01-01
      • 2019-07-25
      • 2016-08-06
      • 1970-01-01
      • 1970-01-01
      • 2016-09-25
      • 2017-05-28
      相关资源
      最近更新 更多