Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫用“重新采样”;季节性;频率_Python_Pandas_Time Series_Offset - Fatal编程技术网

Python 熊猫用“重新采样”;季节性;频率

Python 熊猫用“重新采样”;季节性;频率,python,pandas,time-series,offset,Python,Pandas,Time Series,Offset,在我的领域(天然气市场),一个季节是一个跨越两个季度的时期。4月至9月(包括这两个月)是我们所说的夏季,而一年中的其余时间是冬季 使用熊猫,我试图将每日数据重新采样到季节中,根据每日指数的开始,我似乎得到了不同的结果。基本上,如果是在第二季度或第四季度开始,则重新采样会按预期工作,但如果指数是在第一季度或第三季度开始,则不会工作。请注意,结束日期不会发生同样的情况,因为重采样在那里似乎表现正确 下面是一个示例代码: import pandas as pd import numpy as np

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

使用熊猫,我试图将每日数据重新采样到季节中,根据每日指数的开始,我似乎得到了不同的结果。基本上,如果是在第二季度或第四季度开始,则重新采样会按预期工作,但如果指数是在第一季度或第三季度开始,则不会工作。请注意,结束日期不会发生同样的情况,因为重采样在那里似乎表现正确

下面是一个示例代码:

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')