#python #pandas #pandas-groupby #pandas-resample #ohlc
Вопрос:
У меня есть данные о 2 сценариях (имена сценариев-abc и xyz). Поскольку данные о тиках находятся на «втором» уровне, я хочу преобразовать их в OHLC (Открытие, Максимум, Минимум, закрытие) на уровне 1 минуты.
Когда данные тиков содержат только 1 суму, я использую следующий код (OHLC одного Scrip.py) , чтобы получить OHLC на уровне 1 минуты. Этот код дает желаемый результат.
Код:
import os
import time
import datetime
import pandas as pd
import numpy as np
ticks=pd.read_csv(r'C:UserstechDownloadsticks.csv')
ticks=pd.DataFrame(ticks)
#ticks=ticks.where(ticks['scrip_name']=="abc")
#ticks=ticks.where(ticks['scrip_name']=="xyz")
ticks['timestamp'] = pd.to_datetime(ticks['timestamp'])
ticks=ticks.set_index(['timestamp'])
ohlc_prep=ticks.loc[:,['last_price']]
ohlc_1_min=ohlc_prep['last_price'].resample('1min').ohlc().dropna()
ohlc_1_min.to_csv(r'C:UserstechDownloadsohlc_1_min.csv')
Результат:
Однако, когда данные тиков содержат более 1 скрипта, этот код не работает. Какие изменения следует внести в код, чтобы получить следующий результат (имя файла: expected_result.csv), который сгруппирован по имени сценария.
ожидаемый результат:
Вот ссылка на данные галочек, код python для одного скрипта, результат одного скрипта и желаемый результат нескольких скриптов: https://drive.google.com/file/d/1Y3jngm94hqAW_IJm-FAsl3SArVhnjGJE/view?usp=sharing
Мы очень ценим любую помощь.
Спасибо.
Ответ №1:
Я думаю, тебе нужно groupby
, как:
ticks['timestamp'] = pd.to_datetime(ticks['timestamp'])
ticks=ticks.set_index(['timestamp'])
ohlc_1_min=ticks.groupby('scrip_name')['last_price'].resample('1min').ohlc().dropna()
Или:
ohlc_1_min=(ticks.groupby(['scrip_name',
pd.Grouper(freq='1min', level='timestamp')])['last_price']
.ohlc()
.dropna())
Комментарии:
1. это сработало. большое вам спасибо 🙂