【问题标题】:Resample by custom annual frequency按自定义年度频率重新采样
【发布时间】:2017-10-22 15:10:49
【问题描述】:

我知道我可以使用 AS-JUL 从 7 月 1 日开始每年重新采样,但我该如何在不同的日期之前进行?

In [11]: df
Out[11]:
            value
date
2005-07-02      4
2005-09-20      7
2005-11-12      4
2005-12-31      0
2006-07-03      5
2006-06-25      6
2006-07-23      1
2006-09-28      8
2006-12-21      1
2006-12-27      9
2007-07-03      7
2007-09-21      0

In [12]: df.resample("AS-JUL").sum()
Out[12]:
            value
date
2005-07-01     26
2006-07-01     19
2007-07-01      7

我希望开始日期是 7 月 5 日,我该如何重新采样?

【问题讨论】:

  • 所以,这个问题归结为你想要一个像"AS-JUL" 这样的自定义偏移量,但从 5 号开始。
  • 是的!@AndyHayden 我只是想沿用你的想法!
  • @AndyHayden 表示如果日期是`2015-7-02`会从2014-7-05开始
  • 是的,我会为你更新一个更简洁的例子

标签: python pandas


【解决方案1】:

您可以减去 4 天,重新采样,然后再加上 4 天……但这有点可怕:

In [11]: data2.index = data2.index - pd.offsets.Day(4)

In [12]: res = data2.resample("AS-JUL").sum()

In [13]: res.index = res.index + pd.offsets.Day(4)

In [14]: res
Out[14]:  
           value
date    
2004-07-05  4
2005-07-05  22
2006-07-05  26
2007-07-05  12

【讨论】:

  • 我期待一个更好的解决方案,但会放弃这个:)
  • 其实你这解决了这个问题,但我想弄清楚如何继续上一个问题!
  • @Tangfeifan 同样的想法适用:从日期列中减去 4 天,做 AS-JUL 的事情,结果加上 4 天。
  • 源代码中的自定义日期开始也没有太多。你可以做功能请求吗?
【解决方案2】:

您可以添加日期偏移量,即

data2['date'].map(to_offset('AS-JUL')) +  pd.DateOffset(days=4)

输出:

0 2006-07-05 1 2006-07-05 2 2006-07-05 3 2006-07-05 4 2006-07-05 5 2006-07-05 6 2007-07-05 7 2007-07-05

【讨论】:

  • 这只是更改了标签,但不会更改实际的基础重采样(即,将 7 月 4 日分组为 5 日,而不是前一个“年”)。见stackoverflow.com/questions/46871173/…
  • @AndyHayden 是对的,当我更改数据时 groupby 结果是错误的
猜你喜欢
  • 2021-10-10
  • 2016-10-19
  • 1970-01-01
  • 2017-01-09
  • 2020-01-13
  • 2018-12-24
  • 2019-10-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多