Python 熊猫用“重新采样”;季节性;频率
在我的领域(天然气市场),一个季节是一个跨越两个季度的时期。4月至9月(包括这两个月)是我们所说的夏季,而一年中的其余时间是冬季 使用熊猫,我试图将每日数据重新采样到季节中,根据每日指数的开始,我似乎得到了不同的结果。基本上,如果是在第二季度或第四季度开始,则重新采样会按预期工作,但如果指数是在第一季度或第三季度开始,则不会工作。请注意,结束日期不会发生同样的情况,因为重采样在那里似乎表现正确 下面是一个示例代码:Python 熊猫用“重新采样”;季节性;频率,python,pandas,time-series,offset,Python,Pandas,Time Series,Offset,在我的领域(天然气市场),一个季节是一个跨越两个季度的时期。4月至9月(包括这两个月)是我们所说的夏季,而一年中的其余时间是冬季 使用熊猫,我试图将每日数据重新采样到季节中,根据每日指数的开始,我似乎得到了不同的结果。基本上,如果是在第二季度或第四季度开始,则重新采样会按预期工作,但如果指数是在第一季度或第三季度开始,则不会工作。请注意,结束日期不会发生同样的情况,因为重采样在那里似乎表现正确 下面是一个示例代码: import pandas as pd import numpy as np
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_案例的日期正确,一个在4月,另一个在10月:
正确输出2014年4月1日
2014年10月1日 但bad_的情况并非如此,在bad_的情况下,日期不会像人们从锚定偏移量“2QS-APR”中预期的那样在4月或10月。 对于bad_案例,我希望看到的是(第一个日期是10月13日,因为它是2014年1月1日的季节性开始): 预期
2013年10月1日
2014年4月1日
2014年10月1日 请注意,平均值也是错误的,因此使用loffset移动标签似乎不是一个足够好的选择 我错过什么了吗?为了得到我想要的东西,我可以做些什么不同的事情
谢谢。这对我来说可能是个问题。我提交了一份申请 现在的情况是,它认为一月是在抵消。如果偏移量中的
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
通过这样做,您可以获得预期的输出,但这是一种黑客行为,我不希望它在将来起作用。我不确定n
是否正常工作(或者我们都误解了它应该如何工作)
请更清楚问题是什么;提供示例数据,您期望得到的和实际得到的。@jornsharpe代码示例中的注释不够清楚吗?不,不太清楚。在你的问题中展示一些例子:一个有效,一个无效,你得到的输出和你期望得到的输出。如果没有,请告诉我。感谢您在@jseabold提交此问题。和+1的黑客解决了我的问题的时刻!
bad_case.resample('2Q-APR').shift(-1, freq='2QS-APR')