簡體   English   中英

如何在Pandas / Numpy中使用dateOffset對日內時間序列數據進行重新采樣?

[英]How to do resample of intraday timeseries data with dateOffset in Pandas/Numpy?

我正在處理期貨數據,當天在00:00:00之前開始。 考慮到日期偏移,我需要重新采樣1分鍾數據到1小時的數據。 我們來看一個例子:

df1 - 1min數據

                        Open     High      Low    Close
2005-09-06 17:27:00  1234.75  1234.75  1234.75  1234.75
2005-09-06 17:28:00  1234.75  1234.75  1234.75  1234.75
2005-09-06 17:29:00  1234.75  1234.75  1234.75  1234.75
2005-09-06 17:30:00  1234.75  1234.75  1234.50  1234.50
2005-09-06 18:01:00  1234.50  1234.50  1234.25  1234.50
2005-09-06 18:02:00  1234.50  1234.50  1234.50  1234.50
2005-09-06 18:03:00  1234.50  1234.50  1234.50  1234.50
2005-09-06 18:04:00  1234.50  1234.50  1234.50  1234.50
2005-09-06 18:05:00  1234.50  1234.50  1234.25  1234.25

這是定期重新采樣所發生的情況:

conversion = {'Open': 'first', 'High': 'max', 'Low': 'min', 'Close': 'last'}

In [77]: normal_resample = df1.resample(rule='60Min', how=conversion)
In [78]: normal_resample
Out[79]: 
                        Open     High      Low    Close
2005-09-06 17:00:00  1234.75  1234.75  1234.50  1234.50
2005-09-06 18:00:00  1234.50  1234.50  1234.25  1234.25

這是偏移量的期望輸出:

conversion = {'Open': 'first', 'High': 'max', 'Low': 'min', 'Close': 'last'}

In [77]: offset_resample = df1.resample(rule='60Min', how=conversion) + offset:18:00
In [78]: offset_resample
Out[79]: 
                        Open     High      Low    Close
2005-09-06 17:00:00  1234.75  1234.75  1234.50  1234.50
2005-09-07 18:00:00  1234.50  1234.50  1234.25  1234.25

注意我想要的是指定新的一天從'18:00:00'開始,而不是在午夜。

我做了什么:我有一個公式,包括偏移量,重新采樣到每日數據,但我不知道如何調整它以進行日內重新采樣。

def resample_day(df):
    df.index = pd.DatetimeIndex(df.index)
    df = df.between_time('18:00', '16:00', include_start=True, include_end=True)
    proxy = df.index + pd.DateOffset(hours=6)  # This is the piece that does the trick
    result = df.groupby(proxy.date).agg(
        {'Open': 'first', 'High': 'max', 'Low': 'min', 'Close': 'last'})
    result = result.reindex(columns=['Open', 'High', 'Low', 'Close'])
    return result

此外, 這里建議 ,至少對我來說不起作用。

感謝您的投入。

您可以在一天中添加(如果時間過了下午5點):

In [11]: df1.index.time > datetime.time(17)
Out[11]: array([False,  True], dtype=bool)

In [12]: df1.index + np.where((df1.index.time > datetime.time(17)), pd.offsets.Day(1).nanos, 0)
Out[12]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2005-09-06 17:00:00, 2005-09-07 18:00:00]
Length: 2, Freq: 60T, Timezone: None

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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