【问题标题】:Pandas resample with "seasonal" frequency熊猫以“季节性”频率重新采样
【发布时间】:2014-04-03 11:07:26
【问题描述】:

在我的领域(天然气市场)中,一个季节是一个跨越两个季度的时期。 4 月至 9 月(均包括在内)是我们所说的夏季,而其余时间是冬季。

使用熊猫,我试图将每日数据重新采样为季节,并且根据每日索引的开始,我似乎得到了不同的结果。基本上,如果开始在 Q2 或 Q4,resample 会按预期工作,但如果索引在 Q1 或 Q3 开始,则不会。请注意,结束日期不会发生同样的情况,因为 resample 似乎在那里表现正确。

这里有一个示例代码:

import pandas as pd
import numpy as np


april_start_dates = pd.DatetimeIndex(freq = 'D', start = '2014-04-01', end = '2015-01-01')

good_case = pd.DataFrame(np.random.randn(april_start_dates.size), index = april_start_dates)

for d in good_case.resample('2QS-APR').index:
    print d.strftime('%d-%b-%Y')

'''
Correct output
01-Apr-2014
01-Oct-2014
'''

jan_start_dates = pd.DatetimeIndex(freq = 'D', start = '2014-01-01', end = '2015-01-01')

bad_case = pd.DataFrame(np.random.randn(jan_start_dates.size), index = jan_start_dates)

for d in bad_case.resample('2QS-APR').index:
    print d.strftime('%d-%b-%Y')

'''
Wrong output ?      Expected
01-Jan-2014         01-Oct-2013
01-Jul-2014         01-Apr-2014
01-Jan-2015         01-Oct-2014
'''

good_case 有正确的日期,一个在 4 月,另一个在 10 月:

正确输出
2014 年 4 月 1 日
2014 年 10 月 1 日

但对于 bad_case 而言,情况并非如此,日期不会像锚定偏移量“2QS-APR”所期望的那样落在 4 月或 10 月。 我希望看到 bad_case 是这样的(第一个日期是 Oct13,它是包含 2014 年 1 月 1 日的季节性周期的开始):

预期
2013 年 10 月 1 日
2014 年 4 月 1 日
2014 年 10 月 1 日

请注意,平均也是错误的,因此使用 loffset 移动标签似乎不是一个足够好的选择。

我错过了什么吗?我可以做些什么不同的事情来得到我想要的?

谢谢。

【问题讨论】:

  • 请更清楚问题是什么;提供示例数据,您期望得到什么以及实际得到什么。
  • @jonrsharpe 代码示例中的 cmets 还不够清楚吗?
  • 不,不是。在您的问题中展示一些示例:一个有效,一个无效,您获得的输出以及您期望为后者获得的输出。
  • 希望像这样更清晰。如果没有,请告诉我。

标签: python pandas time-series offset


【解决方案1】:

看起来这对我来说可能是一个错误。我提交了issue

这是怎么回事,它认为 1 月即将到来。如果偏移量中的 n 应该像您期望的那样工作,我认为这不应该是真的。

 [~/]
 [18]: from pandas.tseries.offsets import QuarterBegin

 [~/]
 [19]: ts = pd.Timestamp('2014-1-1')

 [~/]
 [20]: offset = QuarterBegin(2, startingMonth=4)

 [~/]
 [21]: offset.onOffset(ts)
 [21]: True

您可以通过这样做获得预期的输出,但这是一个 hack,我不希望它在未来工作。我不确定n 是否正常工作(或者我们都误解了它应该如何工作)

 bad_case.resample('2Q-APR').shift(-1, freq='2QS-APR')

【讨论】:

  • 感谢@jseabold 提出问题。并为暂时解决我的问题的黑客 +1!
猜你喜欢
  • 2021-06-01
  • 1970-01-01
  • 2022-06-10
  • 1970-01-01
  • 2019-07-04
  • 1970-01-01
  • 2016-11-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多