簡體   English   中英

使用 resample 為 Pandas 數據框中的不同列聚合具有不同規則的數據

[英]using resample to aggregate data with different rules for different columns in a pandas dataframe

我有一個經典的“高開低收”數據類型的數據框,在金融中很常見。 每行為 1 分鍾。 720 行。 我用 Kraken 的這個代碼收集它:

import urllib.request, json 

with urllib.request.urlopen("https://api.kraken.com/0/public/OHLC?pair=XXBTZEUR&interval=1") as url:
    data = json.loads(url.read().decode())

columns=['time', 'open', 'high', 'low', 'close', 'vwap', 'volume', 'ount']
data_DF=pd.DataFrame(data['result']['XXBTZEUR'],columns=columns)
data_DF['open']=data_DF['open'].astype(float)
data_DF['high']=data_DF['high'].astype(float)
data_DF['low']=data_DF['low'].astype(float)
data_DF['close']=data_DF['close'].astype(float)
data_DF['volume']=data_DF['volume'].astype(float)
data_DF['vwap']=data_DF['vwap'].astype(float)
data_DF['ount']=data_DF['ount'].astype(int)
data_DF['time']=pd.to_datetime(data_DF['time'],unit='s')
data_DF.set_index('time',inplace=True)

我現在需要將它匯總到不同的時間段。 為了簡單起見,讓我們假設只有經典的 5 分鍾。 每列必須根據不同的規則生成:
開列必須是樣本開列值的第一個錯誤;
關閉列必須是樣本關閉列值的最后一個值;
high 必須是樣本的 high 列值的最大值;
低必須是樣本低列值的最小值;

我試過

data_DF5=data_DF['vwap'].resample('5Min').OHLC()

但它為每列創建了一系列開盤高低收盤價。 嗯,不是我要找的。

我試過:

data_DF5=data_DF['time'].resample('5Min')
data_DF5['volume']=data_DF['volume'].resample('5Min').sum()
data_DF5['open']=data_DF['open'].resample('5Min').first()
data_DF5['close']=data_DF['close'].resample('5Min').last()
data_DF5['high']=data_DF['high'].resample('5Min').max()
data_DF5['low']=data_DF['low'].resample('5Min').min()

旨在一次構建一列數據框。

我得到一個

“無法打開‘hashtable_class_helper.pxi’:找不到文件”錯誤,我無法理解。 如果我改變第一行

data_DF5=data_DF['vwap'].resample('5Min').mean()

我得到了一個我什至無法解釋的數據框 [參見 (*)]。

如果我改變第一行

data_DF5=data_DF['vwap'].resample('5Min')

我得到:

'DatetimeIndexResampler' 對象不支持項目分配。

我真的很茫然。 我一直在尋找 stackoverflow 的其他問題,但似乎沒有一個涵蓋這種情況。 手冊頁似乎也不清楚如何解決這個問題。

(*)

2018-12-29 07:05:00 3417.8 2018-12-29 07:10:00 3411.12 2018-12-29 07:15:00 3408.98 2018-12-29-09-018.98-2018-12-209.0707 :25:00 3409.26 2018-12-29 07:30:00 2729.18 2018-12-29 07:35:00 3413.9 2018-12-29 07:40:00 2729.18-12-29 07:40:00 273492:07:35:00 -12-29 07:50:00 3423.46 2018-12-29 07:55:00 3433.22 2018-12-29 08:00:00 3424.14 2018-12-29 08:34208:04-08:0420 10:00 3424.6 2018-12-29 08:15:00 3425.22 2018-12-29 08:20:00 3425.6 2018-12-29 08:25:00 3425-12-29 08:25:00 3425-12-29 08:20:00 3425-72 08:00 12-29 08:35:00 3427.64 2018-12-29 08:40:00 3427.06 2018-12-29 08:45:00 3426.06 2018-12-29 08:3820 08:3820:50 3427.06 :00 3426.42 2018-12-29 09:00:00 3441.08 2018-12-29 09:05:00 3439.68 2018-12-29 09:10:00 3429-12-20 3429-12-29 09:10:00 3429-12-29 3439.68 -29 09:20:00 3418.4 2018-12-29 09:25:00 3419 2018-12-29 09:30:00
3415.94 ... 2018-12-29 17:05:00 3363.46 2018-12-29 17:10:00 3364.86 2018-12-29 17:15:00 3362.56-0808-2820 2018-12-29 17:10:00 3364.86 12-29 17:25:00 3358.98 2018-12-29 17:30:00 3353.8 2018-12-29 17:35:00 3371.62 2018-12-29 17:32250-17:33620.8-18:40:00 3353.8 :00 3368.76 2018-12-29 17:50:00 3373.82 2018-12-29 17:55:00 3373.32 2018-12-29 18:00:00 3374.82-29 18:00:00 3374.82-29 18:00 3374.82-29 18:00 -29 18:10:00 3370.3 2018-12-29 18:15:00 3370.3 2018-12-29 18:20:00 3371.36 2018-12-29 18:25:00.14137:25:00.14132 00 3367.36 2018-12-29 18:35:00 3371.3 2018-12-29 18:40:00 3367.08 2018-12-29 18:45:00 3363.3-12-29 18:40:00 3363.3-08-18-2018-18-18-2018 29 18:55:00 3357.64 2018-12-29 19:00:00 3357.64 2018-12-29 19:05:00 3356 卷時間 2018-12-29 07:05:02-12-1356 開..時間 2018-12-29 07:05:00 3418.9 2018-12-29 ... 關閉時間 2018-12-29 07:05:00
3416.8 2018-12-29 ... 高時 2018-12-29 07:05:00 3418.9 2018-12-29 ... 低時 2018-12-29 07:05:00 3416.8-2018-.12 . 名稱:vwap,長度:150,dtype:對象

我想你需要pd.Grouper

data_DF = data_DF.groupby(pd.Grouper(freq='5min')).agg({'open':'first',
                                                        'close':'last',
                                                        'high':'max',
                                                        'low':'min'})

                       open   close    high     low
time                                               
2018-12-29 07:30:00  3411.4  3413.9  3413.9  3411.4
2018-12-29 07:35:00  3413.9  3413.1  3416.1  3411.9
2018-12-29 07:40:00  3413.1  3422.9  3427.5  3413.1
2018-12-29 07:45:00  3421.1  3423.8  3431.7  3418.0
2018-12-29 07:50:00  3423.8  3428.2  3428.2  3418.9

暫無
暫無

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

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