[英]Pandas resample with “seasonal” frequency
在我的領域(天然氣市場)中,一個季節跨越兩個季度。 4月至9月(包括兩者)是我們所說的夏天,而其余的時間是冬天。
使用大熊貓,我試圖將日常數據重新采樣成季節,並且根據每日索引的開始,我似乎得到了不同的結果。 基本上,如果起點在Q2或Q4中,則重新采樣按預期進行,但如果索引從Q1或Q3中開始,則不會進行采樣。 請注意,結束日期不會發生這種情況,因為重新采樣似乎在此處正確執行。
無論如何,這里是一個示例代碼:
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月:
正確的輸出
01-APR-2014
01 - 10月2014
但這不是bad_case的情況,日期不是4月或10月的落差,正如人們期望從錨定偏移量“ 2QS-APR”得出的那樣。 我希望看到bad_case是這樣的(第一個日期是Oct13,因為它是包含2014年1月1日的季節性周期的開始):
預期
01-OCT-2013
01-APR-2014
01 - 10月2014
請注意,平均也是錯誤的,因此使用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
您可以通過執行此操作獲得預期的輸出,但這是一個hack,我希望它將來不會奏效。 我不確定n
是否可以正常工作(否則我們都會誤解它應該如何工作)
bad_case.resample('2Q-APR').shift(-1, freq='2QS-APR')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.