簡體   English   中英

熊貓以“季節性”頻率重新采樣

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM