【发布时间】: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