【问题标题】:Pandas - Resample when not multiple of frequency?Pandas - 当不是频率的倍数时重新采样?
【发布时间】:2017-04-08 16:09:45
【问题描述】:

我有一个跨越 1204 天的每日频率时间序列。 我想在 365D 的基础上重新采样(通过求和),但时间序列跨越 3,29 * 365D,而不是 365D 的倍数。 默认情况下,resample 会返回 4 行。

这是原始数据:

DATE
2012-08-12    15350.0
2012-08-19    11204.0
2012-08-26    11795.0
2012-09-02    15160.0
2012-09-09     9991.0
2012-09-16    12337.0
2012-09-23    10721.0
2012-09-30     9952.0
2012-10-07    11903.0
2012-10-14     8537.0
               ...   
2015-09-27    14234.0
2015-10-04    17917.0
2015-10-11    13610.0
2015-10-18     8716.0
2015-10-25    15191.0
2015-11-01     8925.0
2015-11-08    13306.0
2015-11-15     8884.0
2015-11-22    11527.0
2015-11-29     6859.0

df.index.max() - df.index.min()
Timedelta('1204 days 00:00:00')

如果我申请:

df.resample('365D').sum()

我明白了:

DATE
2012-08-12    536310.0
2013-08-12    555016.0
2014-08-12    569548.0
2015-08-12    245942.0
Freq: 365D, dtype: float64

最后一个 bin 似乎是覆盖不到 365 天的那个。 如何强制重新采样以将其从结果中排除?

【问题讨论】:

  • 你能把你的一些示例数据放在这里吗?
  • 请添加一些代码sn-p和示例数据。
  • @tworec : 添加示例,谢谢
  • @Mr.A:完成,谢谢

标签: python pandas time-series resampling


【解决方案1】:

df.resample('365D') 在索引的最低日开始采样。所以最后一个垃圾箱几乎总是不会覆盖所有的日子。跳过它

df.resample('365D').sum()[:-1]

您也可以考虑按年初/年末抽样

df.resample('A').sum()

【讨论】:

  • 谢谢。我可以在最高天完成样品,以便满箱是最新的吗?然后跳过第一个 bin。
  • 一切皆有可能。 :) 要使用最高日期,您必须在最低日期之前的索引中添加人工日期,并且与最高日期相同的月份和日期df[df.index[-1] + pd.DateOffset(year=df.index[0].year-1) + pd.Timedelta('2D')]=0
  • 小心! 365D 采样会因闰年而中断
  • 点赞!如果我的数据不断变化,这将如何工作,我有一个类似的情况,我需要从 15 分钟蜡烛完成 30 分钟蜡烛,我一直在获取新数据,所以在 A 点,我有 12:00 12:15 12:30 的蜡烛其中 12:15 和 12:30 使我的蜡烛为 12:30 我想在这里跳过 12:15 但在 B 点我有 12:15 12:30 12:45 并且不应跳过任何行,适用于其他时间范围很像 1H 等,只关心开始时的部分垃圾箱
猜你喜欢
  • 2017-01-09
  • 2019-01-26
  • 2019-01-18
  • 1970-01-01
  • 1970-01-01
  • 2019-10-19
  • 1970-01-01
  • 2022-01-19
  • 1970-01-01
相关资源
最近更新 更多